@kizmann/nano-ui 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
    
        package/dist/nano-ui.js.map
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"sources":["webpack://Nano/webpack/universalModuleDefinition","webpack://Nano/webpack/bootstrap","webpack://Nano/external {\"root\":\"pi\",\"commonjs2\":\"@kizmann/pico-js\",\"commonjs\":\"@kizmann/pico-js\",\"amd\":\"@kizmann/pico-js\"}","webpack://Nano/external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"}","webpack://Nano/(webpack)/buildin/global.js","webpack://Nano/./src/draggable/src/draghandler/draghandler.js","webpack://Nano/./src/mixins/src/ctor.js","webpack://Nano/./src/virtualscroller/src/virtualscroller/virtualscroller.beta.js","webpack://Nano/./src/draggable/src/draglist/draglist.js","webpack://Nano/./src/draggable/src/draglist-item/draglist-item.js","webpack://Nano/./src/draggable/src/draggrid/draggrid.js","webpack://Nano/./src/draggable/src/draggrid-item/draggrid-item.js","webpack://Nano/./src/preview/src/preview/preview.js","webpack://Nano/./src/preview/src/preview-video/preview-video.js","webpack://Nano/./src/mixins/src/cmer.js","webpack://Nano/./src/mixins/src/cslo.js","webpack://Nano/./src/index.js","webpack://Nano/./src/virtualscroller/index.js","webpack://Nano/./src/draggable/index.js","webpack://Nano/./src/table/src/table/table.js","webpack://Nano/./src/table/src/table-column/table-column.js","webpack://Nano/./src/table/src/table-cell/table-cell.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-string.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-boolean.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-datetime.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-option.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-image.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-matrix.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-select.js","webpack://Nano/./src/table/src/table-filter/table-filter.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-string.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-boolean.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-datetime.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-option.js","webpack://Nano/./src/table/index.js","webpack://Nano/./src/info/src/info/info.js","webpack://Nano/./src/info/src/info-column/info-column.js","webpack://Nano/./src/info/src/info-field/info-field.js","webpack://Nano/./src/info/src/info-field/types/info-field-string.js","webpack://Nano/./src/info/src/info-field/types/info-field-boolean.js","webpack://Nano/./src/info/src/info-field/types/info-field-datetime.js","webpack://Nano/./src/info/src/info-field/types/info-field-option.js","webpack://Nano/./src/info/src/info-field/types/info-field-image.js","webpack://Nano/./src/info/index.js","webpack://Nano/./src/popover/src/popover/popover.js","webpack://Nano/./src/popover/src/popover-group/popover-group.js","webpack://Nano/./src/popover/src/popover-option/popover-option.js","webpack://Nano/./src/popover/index.js","webpack://Nano/./src/form/src/form/form.js","webpack://Nano/./src/form/src/form-group/form-group.js","webpack://Nano/./src/form/src/form-item/form-item.js","webpack://Nano/./src/form/index.js","webpack://Nano/./src/config/src/config/config.js","webpack://Nano/./src/config/src/config/config-next.js","webpack://Nano/./src/config/index.js","webpack://Nano/./src/button/src/button/button.js","webpack://Nano/./src/button/src/button-group/button-group.js","webpack://Nano/./src/button/index.js","webpack://Nano/./src/select/src/select/select.js","webpack://Nano/./src/select/src/select-option/select-option.js","webpack://Nano/./src/select/index.js","webpack://Nano/./src/checkbox/src/checkbox/checkbox.js","webpack://Nano/./src/checkbox/src/checkbox-group/checkbox-group.js","webpack://Nano/./src/checkbox/index.js","webpack://Nano/./src/radio/src/radio/radio.js","webpack://Nano/./src/radio/src/radio-group/radio-group.js","webpack://Nano/./src/radio/index.js","webpack://Nano/./src/cascader/src/cascader-panel/cascader-panel.js","webpack://Nano/./src/cascader/src/cascader/cascader.js","webpack://Nano/./src/cascader/index.js","webpack://Nano/./src/datepicker/src/datepicker-panel/datepicker-panel.js","webpack://Nano/./src/datepicker/src/datepicker/datepicker.js","webpack://Nano/./src/datepicker/index.js","webpack://Nano/./src/timepicker/src/timepicker-panel/timepicker-panel.js","webpack://Nano/./src/timepicker/src/timepicker/timepicker.js","webpack://Nano/./src/timepicker/index.js","webpack://Nano/./src/tabs/src/tabs/tabs.js","webpack://Nano/./src/tabs/src/tabs-item/tabs-item.js","webpack://Nano/./src/tabs/index.js","webpack://Nano/./src/collapse/src/collapse/collapse.js","webpack://Nano/./src/collapse/src/collapse-item/collapse-item.js","webpack://Nano/./src/collapse/index.js","webpack://Nano/./src/preview/src/preview-plain/preview-plain.js","webpack://Nano/./src/preview/src/preview-image/preview-image.js","webpack://Nano/./src/preview/index.js","webpack://Nano/./src/map/src/map/map.js","webpack://Nano/./src/map/src/map-marker/map-marker.js","webpack://Nano/./src/map/index.js","webpack://Nano/./src/alert/src/alert/alert.js","webpack://Nano/./src/alert/index.js","webpack://Nano/./src/notification/src/notification/notification.js","webpack://Nano/./src/notification/index.js","webpack://Nano/./src/empty/src/empty-icon/empty-icon.js","webpack://Nano/./src/empty/index.js","webpack://Nano/./src/scrollbar/src/scrollbar/scrollbar.next.js","webpack://Nano/./src/scrollbar/index.js","webpack://Nano/./src/loader/src/loader/loader.js","webpack://Nano/./src/loader/index.js","webpack://Nano/./src/resizer/src/resizer/resizer.js","webpack://Nano/./src/resizer/index.js","webpack://Nano/./src/modal/src/modal/modal.js","webpack://Nano/./src/modal/index.js","webpack://Nano/./src/input/src/input/input.js","webpack://Nano/./src/input/index.js","webpack://Nano/./src/input-number/src/input-number/input-number.js","webpack://Nano/./src/input-number/index.js","webpack://Nano/./src/textarea/src/textarea/textarea.js","webpack://Nano/./src/textarea/index.js","webpack://Nano/./src/slider/src/slider/slider.js","webpack://Nano/./src/slider/index.js","webpack://Nano/./src/switch/src/switch/switch.js","webpack://Nano/./src/switch/index.js","webpack://Nano/./src/confirm/src/confirm/confirm.js","webpack://Nano/./src/confirm/index.js","webpack://Nano/./src/transfer/src/transfer/transfer.js","webpack://Nano/./src/transfer/index.js","webpack://Nano/./src/paginator/src/paginator/paginator.js","webpack://Nano/./src/paginator/index.js","webpack://Nano/./src/file/src/file/file.js","webpack://Nano/./src/file/index.js","webpack://Nano/./src/rating/src/rating/rating.js","webpack://Nano/./src/rating/index.js"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","global","dragMods","NDragCounter","$el","Dom","make","classList","appendTo","document","body","event","count","update","html","Locale","choice","dataTransfer","setData","setDragImage","keyMods","Arr","has","push","attr","join","DragCounter","NDragIndicator","parent","safezone","el","strategy","rect","getBoundingClientRect","clientY","y","height","find","hasClass","show","hide","offsetTop","style","top","css","Obj","map","item","remove","NDraghandler","rootNode","frame","DragIndicator","DragCache","bindDragstart","on","onDragenterRoot","onDragoverRoot","onDragleaveRoot","onDragendRoot","onDragdropRoot","Event","uid","bindDragend","bindDragdrop","off","unbind","preventDefault","target","closest","cacheNodes","length","frames","Date","now","allowDrop","Any","isFunction","rainbow","each","node","addClass","removeClass","fire","moveNodes","group","cache","allowGroups","JSON","parse","stringify","dragcount","dropNodes","tempSelected","$emit","removeNode","clone","items","unlinkNodes","removeNodes","isSelected","id","virtuals","uniqueProp","route","clientHeight","resolve","targetNode","isInSelf","cascade","childNodes","unbindNode","$handle","handle","onDragstartNode","onDragenterNode","onDragoverNode","onDragleaveNode","onDragendNode","onDragdropNode","transformDrop","insertNode","moveNodesRoot","moveNodesInto","moveNodesBefore","moveNodesAfter","sources","eventName","set","prop","filter","childProp","disableMove","targetRoute","children","replace","index","splice","except","UUID","props","reduce","merge","reduceItem","Num","depth","cascades","unique","tempCascade","virtual","last","isEmpty","childRoute","ctor","fallback","$options","split","args","apply","DEBUG_NVSCROLL","inject","NDraggable","default","undefined","model","itemHeight","itemWidth","renderNode","deathzone","type","Number","overflowY","Boolean","overflowX","offsetY","offsetX","threshold","framerate","useKeys","data","state","start","end","grid","buffer","width","load","watch","updateRender","beforeMount","scrollTop","mounted","bindAdaptScroll","beforeUnmount","unbindAdaptScroll","methods","refreshScroll","setInterval","onScrollupdate","clearInterval","isIndexRendered","scrollIntoView","$refs","scrollbar","scrollToIndex","selector","total","Math","ceil","floor","targetTop","scrollTo","x","clearState","delay","content","async","refreshDriver","offset","offsetHeight","inner","scrollHeight","onSizechange","queue","timer","clearTimeout","to","setTimeout","bufferItems","round","startItem","endItem","isEqual","renderItem","passed","topOffset","renderFunction","$slots","renderRows","slice","renderGridRows","counter","chunk","renderGrid","chunks","renderItems","empty","render","totalHeight","DEBUG_NDLIST","draggable","size","String","current","selected","expanded","Array","lazyload","showEmptyIcon","itemOffset","scrollTopOnChange","renderCurrent","renderHandle","renderSelect","renderExpand","allowSelect","allowDrag","keyEvents","highlightTimeout","provide","modifier","visible","highlight","firstSelected","lastSelected","tempCurrent","tempExpanded","drag","watchModifierDown","_uid","watchModifierUp","virtualscroller","bindRoot","$watch","watchSelected","deep","refreshVirtuals","unbindRoot","filterVirtuals","add","which","updateNode","findVirtual","console","log","contains","getIndex","findIndex","getCurrentIndex","isDraggable","canDrag","isHighlight","highlightNode","refresh","recursive","$nextTick","scrollToHighlight","first","isCurrent","setCurrent","setRawCurrent","setNextCurrent","setPrevCurrent","reset","syncCurrent","isDisabled","canSelect","hasChildren","getChildren","isExpanded","expandItem","toggle","expandCurrent","isTotalSelected","isInterSelected","toggleSingleNode","toggleRangeNode","indexies","reversed","selectItem","selectAll","unselectAll","bindKeydown","onKeydown","unbindKeydown","stopPropagation","renderEmpty","trans","only","$props","onMouseenter","onMouseleave","NDraggableItem","required","computed","touch","navigator","msMaxTouchPoints","mousedown","mousemove","mouseup","init","bindNode","copy","copyNode","onClick","onDblclick","renderElement","renderSpacer","nano","Icons","Str","ucfirst","angleRight","checked","fileMap","image","video","font","text","application","file","thumb","fit","preview","typre","showSrc","tempFile","tempThumb","fileMime","getFileMime","thumbMime","getThumbMime","lightbox","extension","exts","resolveVimeo","resolveYoutube","showLightbox","renderPreview","renderFull","isObject","renderLightbox","slots","raw","url","isString","host","match","path","src","provider","tempSrc","resolveType","resolveData","youtube","vimeo","renderYoutube","renderVimeo","renderPlain","cmer","attrsList","isArray","isPlain","assign","$attrs","cslo","slot","Comment","circle","intermediate","clock","calendar","times","primary","success","warning","danger","info","angleUp","angleDown","angleLeft","angleDoubleLeft","angleDoubleRight","Settings","iconPosition","notifySize","notifyPosition","Install","App","pi","error","config","globalProperties","CtorMixin","CmerMixin","CsloMixin","Nano","component","Virtualscroller","Draglist","DraglistItem","Draggrid","DraggridItem","NTable","sortProp","sortDir","closeFilterOnEnter","elements","tempVisible","tempVisibleProps","tempSortProp","tempSortDir","tempFilter","tempFilterProps","makeVisibleProps","detectVisible","addColumn","column","removeColumn","getColumnIndex","getColumnVisiblity","getColumnSorted","getColumnFilter","filterProp","getColumnFiltered","detectVisibity","intersect","extract","onResize","sortByColumn","dir","replaceFilter","search","filters","resetFilter","refreshCurrent","modelValue","disabled","renderBody","columns","values","renderContext","label","renderHead","defaultRender","draggableHtml","tooltip","align","sort","breakpoint","previewProp","matrix","matrixProp","options","optionsValue","optionsLabel","fluid","fixedWidth","minWidth","maxWidth","emptyText","undefinedText","trueText","falseText","datetimeFormat","allowUncheck","matrixValues","NTableColumn","tempWidth","changedStates","sortDirection","flexBasis","onMousedown","renderHeadLabel","labelHtml","renderHeadSort","renderHeadFilter","angleHtml","resolveComponent","h","class","input","setFirstState","firstState","extends","TableCell","convertString","convertBoolean","convertDatetime","renderOption","$value","$index","option","toggleMatrix","toggleSelect","itemList","currentMatrix","combine","finder","isChecked","canReset","canApply","getFilterClone","mountFilter","_","getFilterProp","getDefaultFilter","applyFilter","clearFilter","popover","close","renderForm","renderApply","link","renderReset","renderFooter","trigger","footer","TableFilter","operator","li","nl","eq","ne","1","0","lt","gt","in","ni","Table","TableColumn","TableCellString","TableCellBoolean","TableCellDatetime","TableCellOption","TableCellImage","TableCellMatrix","TableCellSelect","TableFilterString","TableFilterBoolean","TableFilterDatetime","TableFilterOption","syncEvent","relative","tempValue","bindSyncEvent","unbindSyncEvent","updated","adaptHeight","setValue","NInfo","vals","infoHtml","renderLabel","InfoField","Info","InfoColumn","InfoFieldString","InfoFieldBoolean","InfoFieldDatetime","InfoFieldOption","InfoFieldImage","NPopover","listen","position","scrollClose","multiClose","clientX","prevent","refreshVisible","previous","append","onHover","onContext","onExit","onCloseEvent","active","open","pause","unpause","stopRefreshInterval","startRefreshInterval","passedOffset","updatePosition","isSameOffset","isSameSize","passedSize","getTargetHorizontal","targetRect","left","windowRect","posY","posX","center","inverse","broken","innerHeight","innerWidth","clientWidth","getTargetVertical","getTargetOffset","scroll","zIndex","isScrollClose","source","result","keyCode","header","viewBody","isNull","tempSize","focus","icon","imagePosition","clickClose","renderImage","renderIcon","renderContent","Popover","PopoverGroup","PopoverOption","inheritAttrs","dom","form","errors","forceChange","forceErrors","onSubmit","is","addItem","removeItem","emitChange","NForm","ready","attrs","collapse","tooltipPosition","collapseGroup","renderCollapse","renderText","textHtml","renderAction","action","renderTooltip","NTabs","NTabsItem","tooltipWindow","focusInput","$input","childs","click","gotoInput","keys","changeTab","renderError","renderInput","Form","FormGroup","FormItem","scope","solveAwait","$$scope","$$value","solveValue","solveEvent","$configRefs","solveContent","$render","prepareValue","veModel","deepSet","inputClosure","closure","obj","val","shift","renderLayer","setup","vIf","vShow","vAwait","$on","display","resolved","propAwait","getState","propExists","exists","solveInput","$scope","$model","$global","toPropKey","splits","lcfirst","toEventKey","cb","solveContext","getProp","getInput","setInput","renderSetup","alias","defaultsBind","binds","events","updateKey","element","NConfig","NConfigNext","square","buttonType","nativeType","innerHtml","Button","ButtonGroup","clearValue","multiple","clearable","placeholder","collapseText","allowCreate","optionsDisabled","custom","tempClear","searched","NSelect","searchOptions","scrollToClosest","clear","addOption","removeOption","resetInput","onFocusInput","onInputInput","onKeydownInput","createOrToggle","selectPrev","selectNext","searchRegex","RegExp","toggleOption","denyUpdate","getOptionLabel","tempLabel","newIndex","scrollToCurrent","createOption","renderLabelClear","renderLabelAngle","renderLabelItem","renderLabelCollapse","firstHtml","renderLabelItems","renderMultiple","isEmptyValue","isNumber","onFocus","onInput","inputHtml","renderSingle","modelLabel","renderDisplay","displayHtml","emptyHtml","renderPopover","onClose","renderOptions","valueProp","labelProp","toggleItem","isMultipleActive","isSingleActive","Select","SelectOption","NCheckboxGroup","tempComputed","globalChecked","tempChecked","tempIntermediate","globalIntermediate","tempDisabled","globalDisabled","addCheckbox","removeCheckbox","check","checkCheckbox","uncheck","uncheckCheckbox","eventShiftClick","shiftCheckbox","eventLocalClick","shiftKey","toggleCheckbox","eventGlobalClick","toggleAll","updateFromGroup","renderCheckbox","interHtml","checkHtml","checkbox","emit","checkboxes","uncheckAll","checkAll","Checkbox","CheckboxGroup","NRadioGroup","addRadio","removeRadio","checkRadio","renderRadio","radio","NRadio","hover","disabledProp","tempHover","clearCascader","hoverItem","onSelect","updateHover","clickTimer","lastclick","hoverTimer","fireSelectItem","onMousemove","renderCascade","renderList","onCascaderInput","onCascaderHover","onPopoverInput","itemLabel","CascaderPanel","Cascader","arrive","clearArrive","depart","clearDepart","minDate","maxDate","range","monthPanels","format","weekdays","months","yearsGrid","tempCache","getYears","monthsGrid","getMonths","Now","tempArrive","tempDepart","tempView","tempRanger","cacheArrive","cacheDepart","gotoDate","gotoMonth","gotoYear","patchDate","patchMonth","printRange","patchYear","patchRange","renderToolbarPrev","renderToolbarNext","renderToolbarMonth","monthsHtml","month","addMonths","renderToolbarYear","yearsHtml","year","renderToolbar","prev","next","renderDateItem","equalDate","valid","isNotBeforeMin","after","isNotAfterMax","before","renderRangeDateItem","viewMode","isTempValid","between","arriveFirst","renderDate","legendHtml","day","bodyHtml","getDatesGrid","panelHtml","prevMonth","nextMonth","renderMonthItem","equal","renderMonth","prevYear","nextYear","renderYearItem","renderYear","prevDecade","nextDecade","placeholderArrive","placeholderDepart","rangeSeparator","boundary","displayFormat","clearDatepicker","clearRangeDatepicker","clearSingleDatepicker","onValueInput","moment","isValid","date","onArriveInput","onDepartInput","onDatepickerInput","onDatepickerDepart","onDatepickerArrive","initialDate","renderRange","arriveProps","departProps","DatepickerPanel","Datepicker","hoursInterval","minutesInterval","secondsInterval","hoursGrid","getHours","minutesGrid","getMinutes","secondsGrid","getSeconds","eventSelect","renderHourItem","hour","renderHourPanel","renderMinuteItem","minute","renderMinutePanel","renderSecondItem","second","renderSecondPanel","clearTimepicker","onTimepickerInput","renderPanel","TimepickerPanel","Timepicker","addTab","tab","$forceUpdate","removeTab","getTab","updateEvent","currentTab","sorted","repeatNext","renderHeaderIndicator","transform","renderHeader","tabs","preload","keep","_key","renderHeaderIcon","renderHeaderLabel","Tabs","TabsItem","NCollapse","showTab","hideTab","toggleTab","NCollapseItem","dragger","renderHeaderAngle","angle","showDelay","Collapse","CollapseItem","tempExt","ImageCache","resolveLoad","loaded","reader","FileReader","onload","readAsDataURL","Preview","PreviewPlain","PreviewImage","PreviewVideo","lat","lng","zoom","NMap","callbacks","tempMap","focusMarkers","Map","callback","getMap","onMount","tempMarker","importMarkerPosition","marker","setPosition","updateMarkerPosition","getPosition","initializeMarker","innerHTML","createMarker","addListener","debounce","setMarkerByAddress","address","then","Notify","MapMarker","AlertFrame","iconPrimary","iconSecondary","iconSuccess","iconWarning","iconDanger","iconInfo","Alert","backdrop","onclick","getIcon","alert","Notification","duration","wrapper","getWrapper","notifications","Notifcation","EmptyIcon","NScrollbar","fixture","allowNative","wrapClass","native","adaptScrollBehavior","bindAdaptHeight","bindAdaptWidth","passive","onUpdate","onScroll","passedHeight","passedWidth","unbindAdaptHeight","unbindAdaptWidth","onScrollTo","scrollLeft","onScrollIntoView","outerHeight","outerWidth","offsetLeft","$dom","offsetWidth","adaptScrollHeight","barHeight","max","maxHeight","heightRatio","vbar","hasVtrack","adaptScrollPosition","adaptScrollWidth","scrollWidth","barWidth","widthRatio","hbar","hasHtrack","vbarTop","hbarLeft","cacheChildEl","child","cacheWindwoEl","windowCache","spacer","refreshHeight","adaptWidth","resizeTimer","refreshWidth","$inner","actual","getTouchEvent","touches","changedTouches","onVbarMousedown","onVbarMousemove","onVbarMouseup","onHbarMousedown","onHbarMousemove","onHbarMouseup","WIN","vbarProps","hbarProps","Scrollbar","NLoader","minimum","applyTimer","timing","startTimer","restartTimer","timeout","Loader","resizerWidth","sizeFixed","updateWidth","bindSizechange","forceWidth","unmounted","unbindSizechange","flex","updateHandle","onLeftMousedown","onLeftMouseup","onLeftMousemove","scrollX","targetWidth","min","frameStyle","onRightMousedown","onRightMouseup","onRightMousemove","Resizer","title","closable","renderClose","startRefreshTimeout","NModal","eventClick","eventKeydown","openModal","force","closeModal","stopRefreshTimeout","queueRefreshTimeout","indexes","modal","renderFrame","renderBackdrop","Modal","iconDisabled","onIconClick","onBlur","Input","MAX_VALUE","stepSize","precision","decimals","getDisplayValue","nextStep","isNaN","toFixed","onNextDown","nextTimeout","nextInterval","onNextUp","prevStep","onPrevDown","prevTimeout","prevInterval","onPrevUp","regex","renderPrev","renderNext","renderClear","InputNumber","autoRows","maxRows","minRows","maxLength","eventInput","rows","currentRows","Textarea","steps","labels","fixmin","fixmax","minmax","getPseudoValue","setModelValue","getValPos","fixed","getValStyle","getBarPos","getBarWidth","getBarStyle","getClosestValue","diff","step","abs","onMouseup","relativeWidth","closestValue","stepMin","stepMax","handleProps","renderHandles","renderBar","barProps","Slider","onValue","offValue","onType","offType","renderSwitch","Switch","confirmText","abortText","abort","confirm","Confirm","sourceLabel","targetLabel","sourceChecked","selectedSource","tempSource","sourceIntermediate","targetChecked","selectedTarget","tempTarget","targetIntermediate","sourceSearch","searchPattern","targetSearch","moveItemsTarget","moveItemsSource","moveRowTarget","moveRowSource","moveToSource","moveToTarget","updateSelectedSource","updateSelectedTarget","renderSourceSelect","renderSourceTitle","counterHtml","renderSourceHeader","renderSourceSearch","renderSourceBody","onMove","renderTargetSelect","renderTargetTitle","renderTargetHeader","renderTargetSearch","renderTargetBody","renderMoveSource","renderMoveTarget","Transfer","page","limit","limitOptions","maxPages","layout","pages","tempLimit","pageOptions","tempPage","forcePage","updatePaginate","paginate","onPrevPage","onPageInput","onNextPage","onFirstPage","onLastPage","onLimitInput","renderLimit","renderCount","renderGoto","renderFirst","renderLast","renderPage","renderPages","renderSlot","view","className","Paginator","clearableIcon","buttonText","openContext","updateFile","files","clearFile","renderButton","renderHidden","File","virtualValue","renderStars","rate","renderValue","vars","Rating"],"mappings":"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","file":"nano-ui.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@kizmann/pico-js\"), require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@kizmann/pico-js\", \"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Nano\"] = factory(require(\"@kizmann/pico-js\"), require(\"vue\"));\n\telse\n\t\troot[\"Nano\"] = factory(root[\"pi\"], root[\"Vue\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { Arr, Obj, Num, Any, Dom, Event, Locale, UUID } from \"@kizmann/pico-js\";\n\nglobal.dragMods = [];\n\nclass NDragCounter\n{\n\n    $el = null;\n\n    constructor()\n    {\n        this.$el = Dom.make('div', {\n            classList: ['n-draggable__counter']\n        });\n\n        this.$el.appendTo(document.body);\n    }\n\n    get(event, count)\n    {\n        // Update dragover color/type\n        this.update();\n\n        this.$el.html(\n            `<span>${Locale.choice(':count Item|:count Items', count)}</span>`\n        );\n\n        // Fix data transfer\n        event.dataTransfer.setData('text/plain', '');\n\n        if ( typeof event.dataTransfer.setDragImage !== 'function' ) {\n            return;\n        }\n\n        // Set finally the drop image\n        event.dataTransfer.setDragImage(this.$el.get(0), 0, 0);\n    }\n\n    update()\n    {\n        global.dragMods = global.keyMods;\n\n        let classList = [\n            'n-draggable__counter'\n        ];\n\n        if ( Arr.has(global.dragMods, 18) ) {\n            classList.push('n-modify--alt');\n        }\n\n        if ( Arr.has(global.dragMods, 17) ) {\n            classList.push('n-modify--ctrl');\n        }\n\n        if ( Arr.has(global.dragMods, 91) ) {\n            classList.push('n-modify--meta');\n        }\n\n        this.$el.attr('class', classList.join(' '));\n    }\n\n}\n\nglobal.DragCounter = new NDragCounter;\n\nclass NDragIndicator\n{\n\n    $el = null;\n\n    parent = null;\n\n    constructor(parent)\n    {\n        this.$el = Dom.make('div', {\n            classList: ['n-draggable__indicator']\n        });\n\n        this.$el.appendTo(this.parent = parent);\n    }\n\n    resolve(event, safezone, el, strategy = 'inner')\n    {\n        let rect = el.getBoundingClientRect();\n\n        if ( event.clientY < rect.y + safezone ) {\n            strategy = 'before';\n        }\n\n        if ( event.clientY > rect.y + rect.height - safezone ) {\n            strategy = 'after';\n        }\n\n        if ( Dom.find(el).hasClass('n-expanded') ) {\n            strategy = strategy === 'after' ? 'inner' : strategy;\n        }\n\n        Arr.has(['before', 'after'], strategy) ?\n            this.show(el, strategy) : this.hide();\n\n\n        return strategy;\n    }\n\n    show(el, strategy)\n    {\n        let offsetTop = Dom.find(el).offsetTop(this.parent);\n\n        let style = {\n            top: offsetTop || 1\n        };\n\n        if ( strategy === 'after' ) {\n            style.top = offsetTop + Dom.find(el).height();\n        }\n\n        this.$el.css(Obj.map(style, (item) => item + 'px'));\n    }\n\n    hide()\n    {\n        this.$el.css(null);\n    }\n\n    destroy()\n    {\n        this.$el.get(0).remove();\n    }\n\n}\n\nclass NDraghandler\n{\n\n    uid = null;\n\n    rootNode = null;\n    childNodes = {};\n\n    dropNodes = [];\n    cacheNodes = [];\n\n    strategy = 'nodrop';\n    frames = 0;\n    timeout = 0;\n    dragcount = {};\n\n    constructor(rootNode)\n    {\n        this.rootNode = rootNode;\n    }\n\n    bindRoot(frame = null)\n    {\n        this.DragIndicator = new NDragIndicator(frame || this.rootNode.$el);\n\n        if ( global.DragCache ) {\n            this.bindDragstart.call(this, ...global.DragCache);\n        }\n\n        Dom.find(this.rootNode.$el).on('dragenter', (event) => {\n            this.onDragenterRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragover', (event) => {\n            this.onDragoverRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragleave', (event) => {\n            this.onDragleaveRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragend', (event) => {\n            this.onDragendRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('drop', (event) => {\n            this.onDragdropRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragdrop', (event) => {\n            this.onDragdropRoot(event);\n        });\n\n        Event.bind('NDrag:start', this.bindDragstart.bind(this),\n            this.rootNode.uid);\n\n        Event.bind('NDrag:end', this.bindDragend.bind(this),\n            this.rootNode.uid);\n\n        Event.bind('NDrag:drop', this.bindDragdrop.bind(this),\n            this.rootNode.uid);\n    }\n\n    unbindRoot()\n    {\n        let events = [\n            'dragstart',\n            'dragenter',\n            'dragover',\n            'dragleave',\n            'dragend',\n            'drop',\n            'dragdrop',\n        ];\n\n        Dom.find(this.rootNode.$el).off(events);\n\n        Event.unbind('NDrag:start', this.rootNode.uid);\n        Event.unbind('NDrag:end', this.rootNode.uid);\n        Event.unbind('NDrag:drop', this.rootNode.uid);\n    }\n\n    onDragenterRoot(event)\n    {\n        event.preventDefault();\n    }\n\n    onDragoverRoot(event)\n    {\n        let isNode = Dom.find(event.target)\n            .closest('.n-draglist-item');\n\n        if ( isNode || !this.cacheNodes.length ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        if ( this.frames && Date.now() - this.frames < 135 ) {\n            return;\n        }\n\n        let allowDrop = this.rootNode.allowDrop;\n\n        if ( !Any.isFunction(allowDrop) ) {\n            allowDrop = () => this.rootNode.allowDrop;\n        }\n\n        let rainbow = Arr.each(this.cacheNodes, (node) => {\n            return !!allowDrop(node, null, this.strategy);\n        });\n\n        this.strategy = 'root';\n\n        if ( Arr.has(rainbow, false) ) {\n            this.strategy = 'nodrop';\n        }\n\n        this.DragIndicator.hide();\n\n        if ( this.strategy !== 'nodrop' ) {\n            Dom.find(this.rootNode.$el).addClass('n-dragover');\n        } else {\n            Dom.find(this.rootNode.$el).removeClass('n-dragover');\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            Dom.find(this.rootNode.$el).addClass('n-nodrop');\n        } else {\n            Dom.find(this.rootNode.$el).removeClass('n-nodrop');\n        }\n\n        this.frames = Date.now();\n    }\n\n    onDragleaveRoot(event)\n    {\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n    }\n\n    onDragendRoot(event)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n\n        if ( this.strategy !== 'root' ) {\n            return;\n        }\n\n        Event.fire('NDrag:end');\n    }\n\n    onDragdropRoot(event)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n\n        if ( this.strategy !== 'root' ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        this.moveNodes(null, this.strategy);\n\n        Event.fire('NDrag:drop');\n    }\n\n    bindDragstart(group, cache)\n    {\n        if ( Arr.has(this.rootNode.allowGroups, group) ) {\n            this.cacheNodes = JSON.parse(JSON.stringify(cache));\n        }\n    }\n\n    bindDragend()\n    {\n        this.dragcount = {};\n\n        this.cacheNodes = this.dropNodes = [];\n    }\n\n    bindDragdrop(...args)\n    {\n        if ( !this.dropNodes.length ) {\n            return;\n        }\n\n        this.rootNode.tempSelected = [];\n\n        this.rootNode.$emit('update:selected',\n            this.rootNode.tempSelected);\n\n        if ( !this.rootNode.removeNode ) {\n            return;\n        }\n\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        this.unlinkNodes(clone);\n        this.removeNodes(clone);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    onDragstartNode(event, node)\n    {\n        if ( !this.rootNode.isSelected(node) ) {\n            this.rootNode.$emit('update:selected',\n                this.rootNode.tempSelected = [node.uid]);\n        }\n\n        let cache = Arr.each(this.rootNode.tempSelected, (id) => {\n            return Arr.find(this.rootNode.virtuals, { [this.rootNode.uniqueProp]: id });\n        });\n\n        global.DragCounter.get(event, cache.length);\n\n        Arr.map(cache, (value) => {\n            return { value, item: Obj.get(this.rootNode, value.route) };\n        });\n\n        Event.fire('NDrag:start', this.rootNode.group,\n            this.dropNodes = cache);\n\n        global.DragCache = [\n            this.rootNode.group, this.dropNodes\n        ];\n\n        this.dragcount[node.uid] = 0;\n    }\n\n    onDragenterNode(event, node)\n    {\n        event.preventDefault();\n\n        if ( !this.dragcount[node.uid] ) {\n            this.dragcount[node.uid] = 0;\n        }\n\n        this.dragcount[node.uid] ++;\n    }\n\n    onDragoverNode(event, node)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        if ( this.frames && Date.now() - this.frames < 45 ) {\n            return;\n        }\n\n        let safezone = this.rootNode\n            .safezone(node.$el.clientHeight);\n\n        this.strategy = this.DragIndicator\n            .resolve(event, safezone, node.$el);\n\n        let targetNode = {\n            value: node.value, item: node.item\n        };\n\n        let allowDrop = this.rootNode.allowDrop;\n\n        if ( !Any.isFunction(allowDrop) ) {\n            allowDrop = () => this.rootNode.allowDrop;\n        }\n\n        let rainbow = Arr.each(this.cacheNodes, (node) => {\n            return !!allowDrop(node, targetNode, this.strategy);\n        });\n\n        let isInSelf = Arr.has(node.value.cascade,\n            this.rootNode.tempSelected);\n\n        rainbow.push(!isInSelf);\n\n        if ( Arr.has(rainbow, false) ) {\n            this.strategy = 'nodrop';\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            this.DragIndicator.hide();\n        }\n\n        if ( this.strategy !== 'nodrop' ) {\n            Dom.find(node.$el).addClass('n-dragover');\n            Dom.find(node.$el).removeClass('n-nodrop');\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            Dom.find(node.$el).removeClass('n-dragover');\n            Dom.find(node.$el).addClass('n-nodrop');\n        }\n\n        this.frames = Date.now();\n    }\n\n    onDragleaveNode(event, node)\n    {\n        this.dragcount[node.uid] --;\n\n        if ( this.dragcount[node.uid] !== 0 ) {\n            return;\n        }\n\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n    }\n\n    onDragendNode(event, node)\n    {\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        Event.fire('NDrag:end');\n\n        global.DragCache = null;\n    }\n\n    onDragdropNode(event, node)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        if ( this.strategy === 'nodrop' ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        this.moveNodes(node, this.strategy);\n\n        Event.fire('NDrag:drop');\n    }\n\n    bindNode(node)\n    {\n        if ( this.childNodes[node.uid] ) {\n            this.unbindNode(node);\n        }\n\n        let $handle = Dom.find(node.$el);\n\n        if ( this.rootNode.handle ) {\n            $handle = $handle.find('[draggable]');\n        }\n\n        let $el = Dom.find(node.$el);\n\n        $handle.on('dragstart', (event) => {\n            this.onDragstartNode(event, node);\n        });\n\n        $el.on('dragenter', (event) => {\n            this.onDragenterNode(event, node);\n        });\n\n        $el.on('dragover', (event) => {\n            this.onDragoverNode(event, node);\n        });\n\n        $el.on('dragleave', (event) => {\n            this.onDragleaveNode(event, node);\n        });\n\n        $el.on('dragend', (event) => {\n            this.onDragendNode(event, node);\n        });\n\n        $el.on('drop', (event) => {\n            this.onDragdropNode(event, node);\n        });\n\n        $el.on('dragdrop', (event) => {\n            this.onDragdropNode(event, node);\n        });\n\n        this.childNodes[node.uid] = node;\n    }\n\n    unbindNode(node)\n    {\n        let $handle = Dom.find(node.$el);\n\n        if ( this.rootNode.handle ) {\n            $handle = $handle.find('[draggable]');\n        }\n\n        $handle.off('dragstart');\n\n        let $el = Dom.find(node.$el);\n\n        $el.off([\n            'dragenter',\n            'dragover',\n            'dragleave',\n            'dragend',\n            'drop',\n            'dragdrop',\n        ]);\n\n        $el.removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        delete this.childNodes[node.uid];\n    }\n\n    moveNodes(target, strategy)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        if ( this.rootNode.removeNode ) {\n            this.unlinkNodes(clone);\n        }\n\n        if ( !this.dropNodes.length ) {\n            Arr.each(this.cacheNodes, (value, key) => {\n                this.cacheNodes[key]['item'] = this.rootNode.transformDrop(value.item);\n            });\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'root' ) {\n            clone = this.moveNodesRoot(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'inner' ) {\n            clone = this.moveNodesInto(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'before' ) {\n            clone = this.moveNodesBefore(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'after' ) {\n            clone = this.moveNodesAfter(clone, target);\n        }\n\n        if ( this.rootNode.removeNode ) {\n            clone = this.removeNodes(clone);\n        }\n\n        let sources = Arr.each(this.cacheNodes, (node) => {\n            return node.item[this.rootNode.uniqueProp];\n        });\n\n        this.dropNodes = this.rootNode.tempSelected = [];\n\n        let eventName = 'move';\n\n        if ( Arr.has(global.dragMods, 18) ) {\n            eventName = 'moveAlt';\n        }\n\n        if ( Arr.has(global.dragMods, 17) ) {\n            eventName = 'moveCtrl';\n        }\n\n        if ( Arr.has(global.dragMods, 91) ) {\n            eventName = 'moveMeta';\n        }\n\n        this.rootNode.$emit(eventName, sources,\n            Obj.get(target, 'uid'), strategy);\n\n        this.rootNode.$emit(eventName + 'Raw',\n            this.cacheNodes, target, strategy);\n\n        this.rootNode.$emit('update:selected',\n            this.rootNode.tempSelected);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    unlinkNodes(clone)\n    {\n        Arr.each(this.dropNodes, (node) => {\n            Obj.set(clone, node.value.route, null);\n        });\n    }\n\n    removeNodes(clone, prop = 'items')\n    {\n        clone[prop] = Arr.filter(clone[prop], (node) => {\n            return !!node;\n        });\n\n        Arr.map(clone[prop], (node) => {\n\n            if ( !node[this.rootNode.childProp] ) {\n                return node;\n            }\n\n            return this.removeNodes(node,\n                this.rootNode.childProp);\n        });\n\n        return clone;\n    }\n\n    moveNodesRoot(clone)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        Arr.each(this.cacheNodes, (node) => {\n            clone.items.push(node.item);\n        });\n\n        return clone;\n    }\n\n    moveNodesInto(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = [\n            target.value.route,\n            this.rootNode.childProp\n        ].join('.');\n\n        let children = Obj.get(clone,\n            targetRoute, []);\n\n        Arr.each(this.cacheNodes, (node) => {\n            children.push(node.item);\n        });\n\n        Obj.set(clone, targetRoute, children);\n\n        return clone;\n    }\n\n    moveNodesBefore(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = target.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        Arr.each(this.cacheNodes, (node, index) => {\n            items.splice(target.value.index + index, 0, node.item);\n        });\n\n        Obj.set(clone, targetRoute, items);\n\n        return clone;\n    }\n\n    moveNodesAfter(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = target.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        Arr.each(this.cacheNodes, (node, index) => {\n            items.splice(target.value.index + index + 1, 0, node.item);\n        });\n\n        Obj.set(clone, targetRoute, items);\n\n        return clone;\n    }\n\n    copyNode(node)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        let targetRoute = node.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        let target = Obj.except(node.item, [], {\n            [this.rootNode.uniqueProp]: UUID()\n        });\n\n        items.splice(node.value.index + 1,\n            0, target);\n\n        Obj.set(clone, targetRoute, items);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    removeNode(node)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        let targetRoute = node.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        items.splice(node.value.index, 1);\n\n        Obj.set(clone, targetRoute, items);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    reduce(items, ...props)\n    {\n        return Arr.reduce(items, (merge, item, index) =>\n            this.reduceItem(merge, item, Num.int(index), ...props), []);\n    }\n\n    reduceItem(merge, item, index, depth = 0, route = 'items', cascades = [])\n    {\n        // Get a unique id\n        let unique = Obj.get(item,\n            this.rootNode.uniqueProp, UUID());\n\n        // Add unique to cascader\n        let tempCascade = Arr.merge(cascades,\n            [unique]);\n\n        let virtual = {\n            index: index,\n            depth: depth,\n            route: [route, index].join('.'),\n            parent: Arr.last(cascades),\n            cascade: tempCascade,\n        };\n\n        virtual[this.rootNode.uniqueProp] = unique;\n\n        let children = Obj.get(item,\n            this.rootNode.childProp, []);\n\n        if ( Any.isEmpty(children) ) {\n            return Arr.merge(merge, [virtual]);\n        }\n\n        let childRoute = [\n            route, index,\n            this.rootNode.childProp\n        ].join('.');\n\n        let props = [\n            depth + 1, childRoute, tempCascade\n        ]\n\n        return Arr.merge(merge, [virtual],\n            this.reduce(children, ...props));\n    }\n\n}\n\nexport default NDraghandler;","import { Arr, Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    ctor(key, fallback = null)\n    {\n        let ctor = Obj.get(this.$options, key.split('.'), -1);\n\n\n\n        //console.log(this.$options, ctor);\n\n        // console.log(ctor);\n\n        // if ( ctor === -1 ) {\n        //     ctor = Obj.get(this.$vnode.componentOptions.Ctor,\n        //         Arr.merge(['options'], key.split('.')), -1);\n        // }\n\n        if ( ctor === -1 ) {\n            ctor = fallback;\n        }\n\n        if ( typeof ctor !== 'function' ) {\n            return ctor;\n        }\n\n        return (...args) => ctor.apply(this, args);\n    }\n\n}\n","import { Arr, Obj, Any, Dom } from \"@kizmann/pico-js\";\n\nglobal.DEBUG_NVSCROLL = false;\n\nexport default {\n\n    name: 'NVirtualscroller',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n\n    },\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 34;\n            }\n        },\n\n        itemWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        deathzone: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        framerate: {\n            default()\n            {\n                return 65;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        let state = {\n            start: 0, end: 0, grid: 1\n        };\n\n        return {\n            state, buffer: [], width: 0, height: 0, load: true\n        };\n    },\n\n    watch: {\n\n        'items': function () {\n            this.updateRender();\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.scrollTop = 0;\n    },\n\n    mounted()\n    {\n\n        this.bindAdaptScroll()\n    },\n\n\n    beforeUnmount()\n    {\n        this.unbindAdaptScroll()\n    },\n\n    methods: {\n\n        bindAdaptScroll()\n        {\n            this.refreshScroll = setInterval(this.onScrollupdate,\n                1000 / this.framerate);\n        },\n\n        unbindAdaptScroll()\n        {\n            clearInterval(this.refreshScroll);\n        },\n\n        isIndexRendered(index)\n        {\n            if ( ! this.itemHeight ) {\n                return true;\n            }\n\n            return this.state.start < index &&\n                this.state.end > index;\n        },\n\n        scrollIntoView(index)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            if ( index === -1 || index >= this.items.length ) {\n                index = this.items.length;\n            }\n\n            if ( ! this.isIndexRendered(index) ) {\n                return this.scrollToIndex(index);\n            }\n\n            let selector = `[data-index=\"${index}\"]`;\n\n            this.$refs.scrollbar.scrollIntoView(selector);\n        },\n\n        scrollToIndex(index)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            let total = Math.ceil(this.items.length /\n                this.state.grid);\n\n            index = Math.floor(index / this.state.grid);\n\n            if ( index === -1 || index >= total ) {\n                index = total;\n            }\n\n            let targetTop = index * this.itemHeight;\n\n            if ( this.scrollTop > targetTop ) {\n                return this.scrollTo(0, targetTop);\n            }\n\n            targetTop = targetTop - this.height + \n                this.itemHeight;\n\n            this.scrollTo(0, targetTop);\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollTo(x, y);\n        },\n\n        clearState()\n        {\n            this.state = { start: 0, end: 0 };\n        },\n\n        updateRender()\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return Any.delay(this.updateRender);\n            }\n\n            this.scrollTop = this.$refs.scrollbar.\n                $refs.content.scrollTop;\n\n            Any.async(this.refreshDriver);\n        },\n\n        onScrollupdate()\n        {\n            if ( ! this.threshold ) {\n                return;\n            }\n\n            let scrollTop = this.$refs.scrollbar.\n                $refs.content.scrollTop;\n\n            if ( scrollTop === this.scrollTop ) {\n                return;\n            }\n\n            this.scrollTop = scrollTop;\n\n            let offset = this.$refs.scrollbar.$el.offsetHeight -\n                this.$refs.scrollbar.$el.clientHeight;\n\n            let isOutOfRange = scrollTop < 0 || scrollTop + this.height\n                > this.$refs.inner.scrollHeight + offset;\n\n            if ( isOutOfRange ) {\n                return;\n            }\n\n            Any.async(this.refreshDriver);\n        },\n\n        onSizechange(height, width, el)\n        {\n            this.width = width;\n            this.height = height;\n\n            Any.async(this.refreshDriver);\n        },\n\n\n        refreshDriver(queue = true)\n        {\n            if ( Any.isEmpty(this.timer) ) {\n                this.timer = Date.now();\n            }\n\n            if ( Date.now() - this.timer > 20 ) {\n                queue = false;\n            }\n\n            clearTimeout(this.to);\n\n            this.to = setTimeout(() => {\n                this.refreshDriver(false);\n            }, 25);\n\n            if ( queue ) {\n                return;\n            }\n\n            clearTimeout(this.to);\n\n            let grid = 1;\n\n            if ( this.itemWidth ) {\n                grid = Math.floor((this.width - this.deathzone) /\n                    this.itemWidth) || 1;\n            }\n\n            if ( ! this.threshold || this.threshold > this.items.length ) {\n                return this.state = { start: 0, end: 0, grid };\n            }\n\n            let total = Math.ceil(this.items.length\n                / grid);\n\n            let bufferItems = Math.round((this.height /\n                this.itemHeight) * 0.6);\n\n            let startItem = Math.round(this.scrollTop /\n                this.itemHeight);\n\n            let endItem = Math.round((this.scrollTop + \n                this.height) / this.itemHeight);\n\n            let start = (startItem - bufferItems);\n\n            if ( start < 0 ) {\n                start = 0;\n            }\n\n            let end = endItem + bufferItems;\n\n            if ( end > total ) {\n                end = total;\n            }\n\n            let state = { start, end, grid };\n\n            if ( Any.isEqual(this.state, state) ) {\n                return;\n            }\n\n            this.state = state;\n        },\n\n    },\n\n    renderItem(passed)\n    {\n        passed.index = (passed.index +\n            this.state.start);\n\n        let topOffset = Math.round(this.itemHeight * \n            passed.index);\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.renderNode ) {\n            renderFunction = this.renderNode;\n        }\n\n        let props = {\n            'data-index': passed.index\n        };\n\n        if ( this.NDraggable && this.useKeys ) {\n            props.key = passed.value[this.NDraggable.uniqueProp];\n        }\n\n        let style = {};\n\n        let isLazy = this.threshold && this.threshold <=\n            this.items.length;\n\n        if ( isLazy && this.state.grid === 1 ) {\n            style.top = topOffset + 'px';\n        }\n\n        if ( this.itemHeight ) {\n            style.height = this.itemHeight + 'px';\n        }\n\n        if ( this.state.grid !== 1 ) {\n            style.width = this.itemWidth + 'px';\n        }\n        \n        return (\n            <div class=\"n-virtualscroller__item\" style={style} {...props}>\n                { renderFunction(passed) }\n            </div>\n        );\n    },\n\n    renderRows()\n    {\n        let items = Arr.slice(this.items, this.state.start,\n            this.state.end);\n\n        if ( ! this.threshold || this.threshold > this.items.length ) {\n            items = this.items;\n        }\n\n        return Arr.each(items, (value, index) => {\n            return this.ctor('renderItem')({ value, index });\n        });\n    },\n\n    renderGridRows(passed)\n    {\n        let topOffset = Math.round(this.itemHeight *\n            (passed.index + this.state.start));\n\n        let style = {};\n\n        if ( this.threshold && this.threshold <= this.items.length ) {\n            style.top = topOffset + 'px';\n        }\n\n        let counter = passed.index * this.state.start;\n\n        return (\n            <div class=\"n-virtualscroller__row\" style={style}>\n                {\n                    Arr.each(passed.chunk, (value, index) => {\n                        return this.ctor('renderItem')({\n                            value, index: index + counter\n                        });\n                    })\n                }\n            </div>\n        );\n    },\n\n    renderGrid()\n    {\n        let chunks = Arr.chunk(this.items,\n            this.state.grid);\n\n        let items = Arr.slice(chunks, this.state.start,\n            this.state.end);\n\n        if ( ! this.threshold || this.threshold > chunks.length ) {\n            items = chunks;\n        }\n\n        return Arr.each(items, (chunk, index) => {\n            return this.ctor('renderGridRows')({ chunk, index });\n        });\n    },\n\n    renderItems()\n    {\n        if ( ! this.items.length ) {\n            return this.$slots.empty && this.$slots.empty() || null;\n        }\n\n        if ( this.state.grid === 1 ) {\n            return this.ctor('renderRows')();\n        }\n\n        return this.ctor('renderGrid')();\n    },\n\n    render()\n    {\n        let classList = [\n            'n-virtualscroller'\n        ];\n\n        if ( this.threshold && this.threshold <= this.items.length ) {\n            classList.push('n-virtualscroller--absolute');\n        }\n\n        let props = {\n            overflowY: this.overflowY,\n            overflowX: this.overflowX,\n            offsetY: this.offsetY,\n            offsetX: this.offsetX,\n            onSizechange: this.onSizechange,\n        };\n\n        let style = {};\n\n        let totalHeight = this.items.length / this.state.grid *\n            this.itemHeight;\n\n        if ( this.threshold && this.items.length ) {\n            style.height = Math.ceil(totalHeight) + 'px';\n        }\n\n        return (\n            <NScrollbar class={classList} ref=\"scrollbar\" {...props}>\n                <div ref=\"inner\" class=\"n-virtualscroller__inner\" style={style}>\n                    { this.ctor('renderItems')() }\n                </div>\n            </NScrollbar>\n        );\n    }\n\n}\n","import { UUID, Num, Arr, Obj, Dom, Any, Event, Locale } from \"@kizmann/pico-js\";\nimport NDraghandler from \"../draghandler/draghandler\";\n\nglobal.DEBUG_NDLIST = false;\n\nexport default {\n\n    name: 'NDraglist',\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        expanded: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => height * 0.265;\n            }\n        },\n\n        lazyload: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 34;\n            },\n            type: [Number]\n        },\n\n        itemOffset: {\n            default()\n            {\n                return 30;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderExpand: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggable: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            modifier: [],\n            virtuals: [], \n            visible: [], \n            childNodes: {}, \n            highlight: [],\n            firstSelected: null,\n            lastSelected: null,\n            tempCurrent: this.current, \n            tempExpanded: this.expanded, \n            tempSelected: this.selected\n        };\n    },\n\n    beforeMount()\n    {\n        this.drag = new NDraghandler(this);\n\n        Dom.find(window).on('keydown',\n            this.watchModifierDown, this._uid);\n\n        Dom.find(window).on('keyup',\n            this.watchModifierUp, this._uid);\n    },\n\n    mounted()\n    {\n        let frame = this.$refs.virtualscroller.\n            $refs.inner;\n\n        this.drag.bindRoot(frame);\n\n        this.$watch('tempSelected', this.watchSelected, \n            { deep: true });\n\n        this.refreshVirtuals();\n    },\n\n    beforeUnmount()\n    {\n        this.drag.unbindRoot();\n\n        Dom.find(document).off('keydown', null, this.uid);\n        Dom.find(document).off('keyup', null, this.uid);\n    },\n\n    watch: {\n        \n        items()\n        {\n            if ( this.scrollTopOnChange ) {\n                this.scrollTo();\n            }\n\n            this.refreshVirtuals();\n        },\n\n        virtuals()\n        {\n            this.filterVirtuals();\n        },\n\n        expanded(value)\n        {\n            this.tempExpanded = value;\n\n            this.filterVirtuals();\n        },\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n        current(value)\n        {\n            this.tempCurrent = value;\n        }\n\n    },\n\n    methods: {\n\n        watchModifierDown(e)\n        {\n            Arr.add(this.modifier, e.which);\n        },\n\n        watchModifierUp(e)\n        {\n            Arr.remove(this.modifier, e.which);\n        },\n\n        watchSelected()\n        {\n            if ( ! this.tempSelected.length ) {\n                return this.firstSelected = null;\n            }\n\n            this.firstSelected = Arr.find(this.virtuals, {\n                [this.uniqueProp]: this.tempSelected[0]\n            });\n        },\n\n        updateNode(node)\n        {\n            Obj.set(this, node.value.route, node.item);\n\n            this.$emit('update:items', this.items);\n        },\n\n        findVirtual(unique)\n        {\n            let value = Arr.find(this.virtuals, (item) => {\n                return item[this.uniqueProp] === unique;\n            });\n\n            if ( ! value ) {\n                return null;\n            }\n\n            return {\n                value, item: Obj.get(this, value.route, null)\n            };\n        },\n\n        refreshVirtuals()\n        {\n            this.virtuals = this.drag.reduce(this.items);\n\n            if ( global.DEBUG_NDLIST ) {\n                console.log('Total virtual items mounted: ' + this.virtuals.length);\n            }\n        },\n\n        filterVirtuals()\n        {\n            this.visible = Arr.filter(this.virtuals, (node) => {\n                return Arr.contains(this.tempExpanded, node.cascade.slice(0, -1));\n            });\n        },\n\n        getIndex(unique)\n        {\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: unique\n            });\n        },\n\n        getCurrentIndex()\n        {\n            if ( ! this.tempCurrent ) {\n                return -1;\n            }\n\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            if ( ! this.$refs.virtualscroller ) {\n                return Any.delay(() => this.scrollTo(x, y));\n            }\n\n            this.$refs.virtualscroller.scrollTo(x, y);\n        },\n\n        scrollToIndex(index)\n        {\n            if ( ! this.$refs.virtualscroller ) {\n                return Any.delay(() => this.scrollToIndex(index));\n            }\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isDraggable(node)\n        {\n            let canDrag = this.allowDrag;\n\n            if ( ! Any.isFunction(canDrag) ) {\n                canDrag = () => this.allowDrag;\n            }\n\n            return canDrag(node);\n        },\n\n        isHighlight(node)\n        {\n            return Arr.has(this.highlight, node.value[this.uniqueProp]);\n        },\n\n        highlightNode(value, key = null)\n        {\n            clearTimeout(this.refresh);\n\n            // Clear highlight items\n            this.highlight = [];\n\n            Arr.recursive(this.items, this.childProp, (node, cascade) => {\n\n                if ( Obj.get(node, key || this.uniqueProp) !== value ) {\n                    return;\n                }\n\n                Arr.each(cascade, (item) => {\n                    Arr.add(this.tempExpanded, item[this.uniqueProp]);\n                });\n\n                Arr.add(this.highlight, node[this.uniqueProp]);\n            });\n\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            this.$nextTick(this.scrollToHighlight);\n            \n            this.refresh = setTimeout(() =>\n                this.highlight = [], this.highlightTimeout);\n            \n            this.filterVirtuals();\n        },\n\n        scrollToHighlight()\n        {\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: Arr.first(this.highlight)\n            });\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isCurrent(node)\n        {\n            return this.renderCurrent && this.tempCurrent && \n                node.value[this.uniqueProp] === this.tempCurrent[this.uniqueProp] ;\n        },\n\n        setCurrent(node)\n        {\n            let isSameNode = this.tempCurrent && \n                this.tempCurrent[this.uniqueProp] === node.value[this.uniqueProp];\n\n            if ( isSameNode ) {\n                return;\n            }\n\n            this.$emit('update:current', \n                this.tempCurrent = node.item);\n            \n            Event.fire('NDraglist:syncCurrent', node.item, this.uid);\n        },\n\n        setRawCurrent(index)\n        {\n            let route = Obj.get(this.visible, \n                [index, 'route']);\n\n            if ( ! route ) {\n                return this.setRawCurrent(0);\n            }\n\n            let item = Obj.get(this, route);\n\n            this.$refs.virtualscroller\n                .scrollIntoView(index);\n\n            this.$emit('update:current', \n                this.tempCurrent = item);\n            \n            Event.fire('NDraglist:syncCurrent', item, this.uid);\n        },\n\n        setNextCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = 0;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index++;\n            }\n\n            if ( index >= this.visible.length ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        setPrevCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = this.visible.length - 1;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index--;\n            }\n\n            if ( index < 0 ) {\n                index = reset;\n            }\n            \n            this.setRawCurrent(index);\n        },\n\n        syncCurrent()\n        {\n            return ['NDraglist:syncCurrent', this.uid];\n        },\n\n        isDisabled(node)\n        {\n            let canSelect = this.allowSelect;\n\n            if ( ! Any.isFunction(canSelect) ) {\n                canSelect = () => this.allowSelect;\n            }\n\n            return ! canSelect(node) || (this.firstSelected &&\n                node.value.depth !== this.firstSelected.depth);\n        },\n\n        hasChildren(node)\n        {\n            return !! this.getChildren(node).length;\n        },\n\n        getChildren(node)\n        {\n            return Obj.get(node.item, this.childProp, []);\n        },\n\n        isExpanded(node)\n        {\n            return Arr.has(this.tempExpanded, node.value[this.uniqueProp]);\n        },\n\n        expandItem(node)\n        {\n            if ( ! this.hasChildren(node) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempExpanded, node.value[this.uniqueProp]);\n\n            this.filterVirtuals();\n        },\n\n        expandCurrent()\n        {\n            if ( ! this.tempCurrent ) {\n                return;\n            }\n\n            let children = Obj.get(this.tempCurrent, \n                this.childProp);\n\n            if ( Any.isEmpty(children) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempExpanded, \n                this.tempCurrent[this.uniqueProp]);\n\n            this.filterVirtuals();\n        },\n\n        isSelected(node)\n        {\n            return Arr.has(this.tempSelected, node.value[this.uniqueProp]);\n        },\n\n        isTotalSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length === this.tempSelected;\n        },\n\n        isInterSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length !== this.tempSelected &&\n                this.tempSelected;\n        },\n\n        toggleSingleNode(node)\n        {\n            Arr.toggle(this.tempSelected, this.lastSelected =\n                node.value[this.uniqueProp]);\n        },\n\n        toggleRangeNode(node)\n        {\n            let indexies = [0, -1], reversed = false;\n\n            if ( ! Any.isEmpty(this.lastSelected) ) {\n                indexies[1] = this.getIndex(this.lastSelected);\n            }\n\n            indexies[0] = this.getIndex(node.value[this.uniqueProp]);\n\n            if ( indexies[1] > indexies[0] ) {\n                reversed = true;\n            }\n\n            if ( ! reversed ) {\n                indexies = [indexies[1]+1, indexies[0]+1];\n            }\n\n            Arr.each(this.items.slice(indexies[0], indexies[1]), (item, index) => {\n                Arr.toggle(this.tempSelected, item[this.uniqueProp]);\n            });\n\n            this.lastSelected = node.value[this.uniqueProp];\n        },\n\n        selectItem(node)\n        {\n            if ( this.isDisabled(node) ) {\n                return;\n            }\n\n            ! Arr.has(this.modifier, 16) || this.renderExpand ?\n                this.toggleSingleNode(node) : this.toggleRangeNode(node);\n\n            this.$emit('update:selected', this.tempSelected);\n        },\n\n        selectAll()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            let indexies = Arr.each(visible, (item) => {\n                return item[this.uniqueProp];\n            });\n\n            if ( indexies.length === this.tempSelected.length ) {\n                return this.$emit('update:selected', this.tempSelected = []);\n            }\n\n            this.lastSelected = null;\n\n            this.$emit('update:selected', this.tempSelected = indexies);\n        },\n\n        unselectAll()\n        {\n            if ( this.tempSelected.length ) {\n                this.$emit('update:selected', this.tempSelected = []);\n            }\n        },\n\n        bindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).on('keydown', \n                this.onKeydown, this.uid)\n        },\n\n        unbindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).off('keydown', \n                null, this.uid)\n        },\n\n        onKeydown(event, el)\n        {\n            if ( Dom.find(el).closest('input') ) {\n                return;\n            }\n\n            if ( event.which === 32 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.expandCurrent();\n            }\n\n            if ( event.which === 38 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.setPrevCurrent();\n            }\n\n            if ( event.which === 40 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.setNextCurrent();\n            }\n        }\n\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={! this.showEmptyIcon} class=\"n-draglist__empty\">\n                 { this.$slots.empty && this.$slots.empty() || this.trans('No entries') }\n            </NEmptyIcon>\n        );\n    },\n\n    renderItem(props)\n    {\n        return (\n            <NDraglistItem {...Obj.except(props, ['index'])}>\n                { { default: this.$slots.default } }\n            </NDraglistItem>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draglist',\n            'n-draglist--' + this.size,\n            'n-draglist--' + this.type\n        ];\n\n        if ( ! this.items.length ) {\n            classList.push('n-empty');\n        }\n\n        let passed = [\n            'threshold', 'bufferItems', 'itemHeight', \n            'overflowX', 'overflowY',  'offsetX', 'offsetY', 'useKeys'\n        ];\n\n        let props = Obj.only(this.$props, passed, {\n            items: this.visible,\n            onMouseenter: this.bindKeydown,\n            onMouseleave: this.unbindKeydown\n        });\n\n        return (\n            <NVirtualscroller ref=\"virtualscroller\" class={classList} {...props}>\n                { { default: this.ctor('renderItem'), empty: this.ctor('renderEmpty') } }\n            </NVirtualscroller>\n        );\n    }\n\n}\n","import { Str, Obj, Arr, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDraglistItem',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n    \n    },\n\n    provide()\n    {\n        return {\n            NDraggableItem: this\n        };\n    },\n\n    props: {\n\n        value: {\n            required: true\n        },\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return Obj.get(this.value, this.NDraggable.uniqueProp);\n        },\n\n        item()\n        {\n            return Obj.get(this.NDraggable, this.value.route);\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: ! this.NDraggable.lazyload\n        };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => {\n\n            if ( this.NDraggable.draggable ) {\n                this.timer = setTimeout(() => {\n                    this.NDraggable.drag.bindNode(this);\n                }, 10);\n            }\n\n            this.init = true;\n        }, 5);\n    },\n\n    beforeUnmount()\n    {\n        clearTimeout(this.timer);\n\n        this.NDraggable.drag.unbindNode(this);\n    },\n\n    methods: {\n\n        copy()\n        {\n            return this.NDraggable.drag.copyNode(this);\n        },\n\n        remove()\n        {\n            return this.NDraggable.drag.removeNode(this);\n        },\n\n        hasChildren()\n        {\n            return this.NDraggable.hasChildren(this);\n        },\n\n        isDisabled()\n        {\n            return this.NDraggable.isDisabled(this);\n        },\n\n        isHighlight()\n        {\n            return this.NDraggable.isHighlight(this);\n        },\n\n        isCurrent()\n        {\n            return this.NDraggable.isCurrent(this);\n        },\n\n        isDraggable()\n        {\n            return this.NDraggable.isDraggable(this);\n        },\n\n        isExpanded()\n        {\n            return this.NDraggable.isExpanded(this);\n        },\n\n        expandItem()\n        {\n            this.NDraggable.expandItem(this);\n        },\n\n        isSelected()\n        {\n            return this.NDraggable.isSelected(this);\n        },\n\n        selectItem()\n        {\n            this.NDraggable.selectItem(this);\n        },\n\n        onClick(event)\n        {\n            let isExpand = Dom.find(event.target)\n                .closest('.n-draglist-item__expand');\n\n            if ( isExpand ) {\n                return;\n            }\n\n            this.NDraggable.setCurrent(this);\n\n            if ( Arr.has(global.keyMods, 91) ) {\n                this.NDraggable.selectItem(this);\n            }\n\n            this.NDraggable.$emit('row-click', this);\n        },\n\n        onDblclick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            this.NDraggable.$emit('row-dblclick', this);\n        }\n\n    },\n\n    renderElement()\n    {\n        let classList = [\n            'n-draglist-item__element'\n        ];\n\n        if ( ! this.init ) {\n            return (<div class={classList} />);\n        }\n\n        let props = {\n            value: this.value,\n            item: this.item,\n            copy: this.copy,\n            remove: this.remove,\n        };\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.NDraggable.renderNode ) {\n            renderFunction = this.NDraggable.renderNode;\n        }\n\n        return (\n            <div class={classList}>\n                { renderFunction(props) }\n            </div>\n        );\n    },\n\n    renderSpacer()\n    {\n        let width = this.value.depth * \n            this.NDraggable.itemOffset;\n\n        if ( ! width ) {\n            return null;\n        }\n\n        let style = {\n            width: width + 'px'\n        };\n\n        return (\n            <div class=\"n-draglist-item__spacer\" style={style}>\n                { /* SPACER */ }\n            </div>\n        );\n    },\n\n    renderHandle()\n    {\n        if ( ! this.NDraggable.renderHandle ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( this.NDraggable.draggable && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        return (\n            <div class=\"n-draglist-item__handle\" {...props}>\n                <div class=\"n-draglist-item__ellipsis\">\n                    <i class={ nano.Icons.handle }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderExpand()\n    {\n        if ( ! this.NDraggable.renderExpand ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.expandItem\n        };\n\n        return (\n            <div class=\"n-draglist-item__expand\" {...props}>\n                <div class=\"n-draglist-item__angle\">\n                    <i class={ nano.Icons.angleRight }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderSelect()\n    {\n        if ( ! this.NDraggable.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.selectItem\n        };\n\n        return (\n            <div class=\"n-draglist-item__select\" {...props}>\n                <div class=\"n-draglist-item__checkbox\">\n                    <i class={ nano.Icons.checked }></i>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draglist-item'\n        ];\n\n        if ( this.hasChildren() ) {\n            classList.push('n-children');\n        }\n\n        if ( this.isDisabled() ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.isSelected() ) {\n            classList.push('n-selected');\n        }\n\n        if ( this.isExpanded() ) {\n            classList.push('n-expanded');\n        }\n\n        if ( this.isCurrent() ) {\n            classList.push('n-current');\n        }\n\n        if ( this.isHighlight() ) {\n            classList.push('n-highlight');\n        }\n\n        let props = {\n            onClick: this.onClick,\n            onDblclick: this.onDblclick,\n        };\n\n        if ( this.NDraggable.draggable && ! this.NDraggable.handle && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        props['data-unique'] = this.value[this.NDraggable.uniqueProp];\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHandle')() }\n                { this.ctor('renderSpacer')() }\n                { this.ctor('renderExpand')() }\n                { this.ctor('renderSelect')() }\n                { this.ctor('renderElement')() }\n            </div>\n        );\n    }\n\n}\n","import { UUID, Num, Arr, Obj, Dom, Any, Event, Locale } from \"@kizmann/pico-js\";\nimport NDraghandler from \"../draghandler/draghandler\";\n\nglobal.DEBUG_NDLIST = false;\n\nexport default {\n\n    name: 'NDraggrid',\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => -1;\n            }\n        },\n\n        lazyload: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 200;\n            },\n            type: [Number]\n        },\n\n        itemWidth: {\n            default()\n            {\n                return 150;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        deathzone: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggable: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            virtuals: [],\n            visible: [],\n            childNodes: {},\n            highlight: [],\n            firstSelected: null,\n            tempCurrent: this.current,\n            tempExpanded: this.expanded,\n            tempSelected: this.selected\n        };\n    },\n\n    beforeMount()\n    {\n        this.drag = new NDraghandler(this);\n    },\n\n    mounted()\n    {\n        let frame = this.$refs.virtualscroller.\n            $refs.inner;\n\n        this.drag.bindRoot(frame);\n\n        this.$watch('tempSelected', this.watchSelected,\n            { deep: true });\n\n        this.refreshVirtuals();\n    },\n\n    beforeUnmount()\n    {\n        this.drag.unbindRoot();\n\n        Dom.find(document).off('keydown', null, this.uid);\n    },\n\n    watch: {\n\n        items()\n        {\n            if ( this.scrollTopOnChange ) {\n                this.scrollTo();\n            }\n\n            this.refreshVirtuals();\n        },\n\n        virtuals()\n        {\n            this.filterVirtuals();\n        },\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n        current(value)\n        {\n            this.tempCurrent = value;\n        }\n\n    },\n\n    methods: {\n\n        watchSelected()\n        {\n            if ( ! this.tempSelected.length ) {\n                return this.firstSelected = null;\n            }\n\n            this.firstSelected = Arr.find(this.virtuals, {\n                [this.uniqueProp]: this.tempSelected[0]\n            });\n        },\n\n        refreshVirtuals()\n        {\n            this.virtuals = this.drag.reduce(this.items);\n\n            if ( global.DEBUG_NDLIST ) {\n                console.log('Total virtual items mounted: ' + this.virtuals.length);\n            }\n        },\n\n        filterVirtuals()\n        {\n            this.visible = Arr.filter(this.virtuals, (node) => {\n                return node.depth === 0;\n            });\n        },\n\n        getIndex(unique)\n        {\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: unique\n            });\n        },\n\n        getCurrentIndex()\n        {\n            if ( ! this.tempCurrent ) {\n                return -1;\n            }\n\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            this.$refs.virtualscroller.scrollTo(x, y);\n        },\n\n        scrollToIndex(index)\n        {\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isDraggable(node)\n        {\n            let canDrag = this.allowDrag;\n\n            if ( ! Any.isFunction(canDrag) ) {\n                canDrag = () => this.allowDrag;\n            }\n\n            return canDrag(node);\n        },\n\n        isHighlight(node)\n        {\n            return Arr.has(this.highlight, node.value[this.uniqueProp]);\n        },\n\n        highlightNode(value, key = null)\n        {\n            clearTimeout(this.refresh);\n\n            // Clear highlight items\n            this.highlight = [];\n\n            Arr.recursive(this.items, this.childProp, (node, cascade) => {\n\n                if ( Obj.get(node, key || this.uniqueProp) !== value ) {\n                    return;\n                }\n\n                Arr.each(cascade, (item) => {\n                    Arr.add(this.tempExpanded, item[this.uniqueProp]);\n                });\n\n                Arr.add(this.highlight, node[this.uniqueProp]);\n            });\n\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            this.$nextTick(this.scrollToHighlight);\n\n            this.refresh = setTimeout(() =>\n                this.highlight = [], this.highlightTimeout);\n\n            this.filterVirtuals();\n        },\n\n        scrollToHighlight()\n        {\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: Arr.first(this.highlight)\n            });\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isCurrent(node)\n        {\n            return this.renderCurrent && this.tempCurrent &&\n                node.value[this.uniqueProp] === this.tempCurrent[this.uniqueProp] ;\n        },\n\n        setCurrent(node)\n        {\n            let isSameNode = this.tempCurrent &&\n                this.tempCurrent[this.uniqueProp] === node.value[this.uniqueProp];\n\n            if ( isSameNode ) {\n                return;\n            }\n\n            this.$emit('update:current',\n                this.tempCurrent = node.item);\n\n            Event.fire('NDraggrid:syncCurrent', node.item, this.uid);\n        },\n\n        setRawCurrent(index)\n        {\n            let route = Obj.get(this.visible,\n                [index, 'route']);\n\n            if ( ! route ) {\n                return this.setRawCurrent(0);\n            }\n\n            let item = Obj.get(this, route);\n\n            this.$refs.virtualscroller\n                .scrollIntoView(index);\n\n            this.$emit('update:current',\n                this.tempCurrent = item);\n\n            Event.fire('NDraggrid:syncCurrent', item, this.uid);\n        },\n\n        setNextCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = 0;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index++;\n            }\n\n            if ( index >= this.visible.length ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        setPrevCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = this.visible.length - 1;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index--;\n            }\n\n            if ( index < 0 ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        syncCurrent()\n        {\n            return ['NDraggrid:syncCurrent', this.uid];\n        },\n\n        isDisabled(node)\n        {\n            let canSelect = this.allowSelect;\n\n            if ( ! Any.isFunction(canSelect) ) {\n                canSelect = () => this.allowSelect;\n            }\n\n            return ! canSelect(node) || (this.firstSelected &&\n                node.value.depth !== this.firstSelected.depth);\n        },\n\n        isSelected(node)\n        {\n            return Arr.has(this.tempSelected, node.value[this.uniqueProp]);\n        },\n\n        isTotalSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length === this.tempSelected;\n        },\n\n        isInterSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length !== this.tempSelected &&\n                this.tempSelected;\n        },\n\n        selectItem(node)\n        {\n            if ( this.isDisabled(node) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempSelected, node.value[this.uniqueProp]);\n\n            this.$emit('update:selected', this.tempSelected);\n        },\n\n        selectAll()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            let indexies = Arr.each(visible, (item) => {\n                return item[this.uniqueProp];\n            });\n\n            if ( indexies.length === this.tempSelected.length ) {\n                return this.$emit('update:selected', this.tempSelected = []);\n            }\n\n            this.$emit('update:selected', this.tempSelected = indexies);\n        },\n\n        unselectAll()\n        {\n            if ( this.tempSelected.length ) {\n                this.$emit('update:selected', this.tempSelected = []);\n            }\n        },\n\n        bindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).on('keydown',\n                this.onKeydown, this.uid)\n        },\n\n        unbindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).off('keydown',\n                null, this.uid)\n        },\n\n        onKeydown(event, el)\n        {\n            if ( Dom.find(el).closest('input') ) {\n                return;\n            }\n\n            if ( event.which === 38 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                // this.setPrevCurrent();\n            }\n\n            if ( event.which === 40 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                // this.setNextCurrent();\n            }\n        }\n\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={! this.showEmptyIcon} class=\"n-draggrid__empty\">\n                { this.$slots.empty && this.$slots.empty() || this.trans('No entries') }\n            </NEmptyIcon>\n        );\n    },\n\n    renderItem(props)\n    {\n        return (\n            <NDraggridItem {...Obj.except(props, ['index'])}>\n                { { default: this.$slots.default } }\n            </NDraggridItem>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draggrid',\n            'n-draggrid--' + this.size,\n            'n-draggrid--' + this.type\n        ];\n\n        if ( ! this.items.length ) {\n            classList.push('n-empty');\n        }\n\n        let passed = [\n            'threshold', 'deathzone', 'itemHeight', 'itemWidth',\n            'overflowX', 'overflowY',  'offsetX', 'offsetY', 'useKeys'\n        ];\n\n        let props = Obj.only(this.$props, passed, {\n            items: this.visible,\n            onMouseenter: this.bindKeydown,\n            onMouseleave: this.unbindKeydown\n        });\n\n        return (\n            <NVirtualscroller ref=\"virtualscroller\" class={classList} {...props}>\n                { { default: this.ctor('renderItem'), empty: this.ctor('renderEmpty') } }\n            </NVirtualscroller>\n        );\n    }\n\n}\n","import { Str, Arr, Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDraggridItem',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggableItem: this\n        };\n    },\n\n    props: {\n\n        value: {\n            required: true\n        }\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return Obj.get(this.value, this.NDraggable.uniqueProp);\n        },\n\n        item()\n        {\n            return Obj.get(this.NDraggable, this.value.route);\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: ! this.NDraggable.lazyload\n        };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => {\n\n            if ( this.NDraggable.draggable ) {\n                this.timer = setTimeout(() => {\n                    this.NDraggable.drag.bindNode(this);\n                }, 50);\n            }\n\n            this.init = true;\n        }, 40);\n    },\n\n    beforeUnmount()\n    {\n        if ( ! this.init ) {\n            clearTimeout(this.timer);\n        }\n\n        this.NDraggable.drag.unbindNode(this);\n    },\n\n    methods: {\n\n        copy()\n        {\n            return this.NDraggable.drag.copyNode(this);\n        },\n\n        remove()\n        {\n            return this.NDraggable.drag.removeNode(this);\n        },\n\n        isDisabled()\n        {\n            return this.NDraggable.isDisabled(this);\n        },\n\n        isHighlight()\n        {\n            return this.NDraggable.isHighlight(this);\n        },\n\n        isCurrent()\n        {\n            return this.NDraggable.isCurrent(this);\n        },\n\n        isDraggable()\n        {\n            return this.NDraggable.isDraggable(this);\n        },\n\n        isSelected()\n        {\n            return this.NDraggable.isSelected(this);\n        },\n\n        selectItem()\n        {\n            this.NDraggable.selectItem(this);\n        },\n\n        onClick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            if ( Arr.has(global.keyMods, 91) ) {\n                this.NDraggable.selectItem(this);\n            }\n\n            this.NDraggable.$emit('row-click', this);\n        },\n\n        onDblclick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            this.NDraggable.$emit('row-dblclick', this);\n        }\n\n    },\n\n    renderElement()\n    {\n        let classList = [\n            'n-draglist-item__element'\n        ];\n\n        if ( ! this.init ) {\n            return (<div class={classList} />);\n        }\n\n        let props = {\n            value: this.value,\n            item: this.item,\n            copy: this.copy,\n            remove: this.remove,\n        };\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.NDraggable.renderNode ) {\n            renderFunction = this.NDraggable.renderNode;\n        }\n\n        return (\n            <div class={classList}>\n                {renderFunction(props)}\n            </div>\n        );\n    },\n\n    renderHandle()\n    {\n        if ( ! this.NDraggable.renderHandle ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( this.NDraggable.draggable && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        return (\n            <div class=\"n-draggrid-item__handle\" {...props}>\n                <div class=\"n-draggrid-item__ellipsis\">\n                    <i class={ nano.Icons.handle }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderSelect()\n    {\n        if ( ! this.NDraggable.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.selectItem\n        };\n\n        return (\n            <div class=\"n-draggrid-item__select\" {...props}>\n                <div class=\"n-draggrid-item__checkbox\">\n                    <i class={ nano.Icons.checked }></i>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draggrid-item'\n        ];\n\n        if ( this.isDisabled() ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.isSelected() ) {\n            classList.push('n-selected');\n        }\n\n        if ( this.isCurrent() ) {\n            classList.push('n-current');\n        }\n\n        if ( this.isHighlight() ) {\n            classList.push('n-highlight');\n        }\n\n        let props = {\n            onClick: this.onClick,\n            onDblclick: this.onDblclick,\n        };\n\n        if ( this.NDraggable.draggable && ! this.NDraggable.handle && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        props['data-unique'] = this.value[this.NDraggable.uniqueProp];\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHandle')() }\n                { this.ctor('renderSelect')() }\n                { this.ctor('renderElement')() }\n            </div>\n        );\n    }\n\n}\n","import { Obj, Arr, Any, Dom } from \"@kizmann/pico-js\";\n\nconst fileMap = {\n    image: [\n        'jpg', 'jpeg', 'gif', 'svg', 'png'\n    ],\n    video: [\n        'mp4', 'webm', 'mov'\n    ],\n    font: [\n        'woff', 'ttf', 'otf'\n    ],\n    text: [\n        'csv', 'txt', 'html'\n    ],\n    application: [\n        'pdf', 'doc', 'xls'\n    ]\n}\n\nexport default {\n\n    name: 'NPreview',\n\n    props: {\n\n        file: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        thumb: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        fit: {\n            default()\n            {\n                return 'cover';\n            },\n            type: [String]\n        },\n\n        preview: {\n            default()\n            {\n                return true;\n            },\n            typre: [Boolean]\n        },\n\n        showSrc: {\n            default()\n            {\n                return true;\n            },\n            typre: [Boolean]\n        },\n\n        map: {\n            default()\n            {\n                return fileMap;\n            },\n            type: [Object]\n        }\n\n    },\n\n    computed: {\n\n        tempFile()\n        {\n            return this.file || this.thumb;\n        },\n\n        tempThumb()\n        {\n            return this.thumb || this.file;\n        },\n\n        fileMime()\n        {\n            return this.getFileMime();\n        },\n\n        thumbMime()\n        {\n            return this.getThumbMime();\n        },\n\n    },\n\n    data()\n    {\n        return {\n            lightbox: false, load: false\n        };\n    },\n\n    methods: {\n\n        getFileMime(fallback = null)\n        {\n            let file = Obj.get(this.tempFile, 'name',\n                this.tempFile);\n\n            if ( Any.isEmpty(file) ) {\n                return fallback;\n            }\n\n            let extension = file.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n                '$1');\n\n            Obj.each(this.map, (exts, key) => {\n                if ( Arr.has(exts, extension) ) fallback = key;\n            });\n\n            if ( global.resolveVimeo(file) ) {\n                fallback = 'video';\n            }\n\n            if ( global.resolveYoutube(file) ) {\n                fallback = 'video';\n            }\n\n            return fallback;\n        },\n\n        getThumbMime(fallback = null)\n        {\n            let file = Obj.get(this.tempThumb, 'name',\n                this.tempThumb);\n\n            if ( Any.isEmpty(file) ) {\n                return fallback;\n            }\n\n            let extension = file.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n                '$1');\n\n            Obj.each(this.map, (exts, key) => {\n                if ( Arr.has(exts, extension) ) fallback = key;\n            });\n\n            return fallback;\n        },\n\n        showLightbox()\n        {\n            this.lightbox = true;\n        },\n\n    },\n\n    renderPreview()\n    {\n        if ( ! this.preview ) {\n            return this.ctor('renderFull')();\n        }\n\n        if ( this.thumbMime === 'image' ) {\n            return (<NPreviewImage src={this.tempThumb} />);\n        }\n\n        let props = {\n            type: this.thumbMime,\n            showSrc: false,\n        }\n\n        return (<NPreviewPlain src={this.tempThumb} {...props} />);\n    },\n\n    renderFull()\n    {\n        let isObject = Any.isObject(this.tempFile);\n\n        if ( this.fileMime === 'image' ) {\n            return (<NPreviewImage src={this.tempFile} />);\n        }\n\n        if ( this.fileMime === 'video' && ! isObject ) {\n            return (<NPreviewVideo src={this.tempFile} />);\n        }\n\n        let props = {\n            type: this.thumbMime,\n            showSrc: this.showSrc,\n        }\n\n        return (<NPreviewPlain src={this.tempFile} {...props} />);\n    },\n\n    renderLightbox()\n    {\n        if ( ! this.lightbox || ! this.preview ) {\n            return null;\n        }\n\n        let slots = {\n            raw: this.ctor('renderFull')\n        }\n\n        let props = {\n            type: 'preview',\n            width: '80%',\n            height: '90%',\n        }\n\n        return (<NModal vModel={this.lightbox} {...props} v-slots={slots} />);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview',\n            'n-preview--' + this.fit\n        ];\n\n        if ( this.preview ) {\n            classList.push('n-clickable');\n        }\n\n        if ( this.fileMime ) {\n            classList.push('n-mime-' + this.fileMime);\n        }\n\n        let props = {};\n\n        if ( this.preview ) {\n            props.onClick = this.showLightbox;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { [this.ctor('renderPreview')(), this.ctor('renderLightbox')()] }\n            </div>\n        );\n    }\n\n}","import { Obj, Arr, Str, Any, Dom } from \"@kizmann/pico-js\";\n\nglobal.resolveYoutube = function(url, fallback = null) {\n\n    if ( ! Any.isString(url) ) {\n        return fallback;\n    }\n\n    let host = url.match(/^https?:\\/\\/(www\\.)?(youtube\\.com|youtu\\.be)/);\n\n    if ( ! host ) {\n        return fallback;\n    }\n\n    let id = url.match(/(\\?v=.*?)(?=&|$)/);\n\n    if ( id && id.length === 2 ) {\n        return id[0].replace(/^\\?v=/, '');\n    }\n\n    let path = url.match(/(\\.be\\/.*?)(?=\\?|$)/);\n\n    if ( path && path.length === 2 ) {\n        return path[0].replace(/^\\.be\\//, '');\n    }\n\n    let frame = url.match(/(\\/embed\\/)(.*?$)/);\n\n    if ( frame && frame.length === 3 ) {\n        return frame[0].replace(/^\\/embed\\//, '');\n    }\n\n    return fallback;\n}\n\nglobal.resolveVimeo = function(url, fallback = null) {\n\n    if ( ! Any.isString(url) ) {\n        return fallback;\n    }\n\n    let host = url.match(/^https?:\\/\\/(www\\.|player\\.)?vimeo\\.com/);\n\n    if ( ! host ) {\n        return fallback;\n    }\n\n    let path = url.match(/(\\/[0-9]+)(&|$)/);\n\n    if ( path && path.length === 3 ) {\n        return path[0].replace(/(^\\/|&$)/, '');\n    }\n\n    return fallback;\n}\n\nexport default {\n\n    name: 'NPreviewVideo',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            provider: 'plain', unique: null, tempSrc: null\n        };\n    },\n\n    mounted()\n    {\n        this.resolveType();\n    },\n\n    watch: {\n\n        'src': function () {\n            this.resolveType();\n        }\n\n    },\n\n    methods: {\n\n        resolveType()\n        {\n            this.tempSrc = null;\n\n            if ( this.resolveYoutube() ) {\n                return;\n            }\n\n            if ( this.resolveVimeo() ) {\n                return;\n            }\n\n            if ( Any.isObject(this.src) ) {\n                this.resolveData();\n            }\n\n            this.provider = 'plain';\n        },\n\n        resolveData()\n        {\n            console.log('Coming at some point (blob stream)....');\n        },\n\n        resolveYoutube()\n        {\n            let youtube = global.resolveYoutube(this.src);\n\n            if ( ! youtube ) {\n                return false;\n            }\n\n            this.provider = 'youtube';\n\n            this.$emit('resolve:youtube', this.unique = youtube);\n\n            return true;\n        },\n\n        resolveVimeo()\n        {\n            let vimeo = global.resolveVimeo(this.src);\n\n            if ( ! vimeo ) {\n                return false;\n            }\n\n            this.provider = 'vimeo';\n\n            this.$emit('resolve:vimeo', this.unique = vimeo);\n\n            return true;\n        }\n\n    },\n\n    renderYoutube()\n    {\n        let props = {\n            src: `https://www.youtube.com/embed/${this.unique}`\n        };\n\n        return (\n            <iframe {...props}></iframe>\n        );\n    },\n\n    renderVimeo()\n    {\n        let props = {\n            src: `https://player.vimeo.com/video/${this.unique}`\n        };\n\n        return (\n            <iframe {...props}></iframe>\n        );\n    },\n\n    renderPlain()\n    {\n        let src = Obj.get(this.src, 'name', this.src);\n\n        let extension = src.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n            '$1');\n\n        return (\n            <video width=\"320\" height=\"240\" controls>\n                <source src={this.tempSrc || this.src} type={`video/${extension}`} />\n            </video>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-video'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('render' + Str.ucfirst(this.provider))() }\n            </div>\n        );\n    }\n\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    cmer(classList)\n    {\n        let attrsList = {};\n\n        if ( Any.isString(classList) ) {\n            attrsList[classList] = true;\n        }\n\n        if ( Any.isArray(classList) ) {\n            Arr.each(classList, (value) => attrsList[value] = true);\n        }\n\n        if ( Any.isPlain(classList) ) {\n            Obj.assign(attrsList, classList);\n        }\n\n        if ( Any.isString(this.$attrs.class) ) {\n            attrsList[this.$attrs.class] = true;\n        }\n\n        if ( Any.isArray(this.$attrs.class) ) {\n            Arr.each(this.$attrs.class, (value) => attrsList[value] = true);\n        }\n\n        if ( Any.isPlain(this.$attrs.class) ) {\n            Obj.assign(attrsList, this.$attrs.class);\n        }\n\n        return attrsList;\n    }\n\n}\n","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport { Comment } from 'vue';\n\nexport default {\n\n    cslo(slot = 'default', props = {})\n    {\n        if ( ! this.$slots[slot] ) {\n            return false;\n        }\n\n        return this.$slots[slot](props).findIndex((o) => {\n            return o.type !== Comment;\n        }) !== -1;\n    }\n\n}\n","import { Arr, Obj, Dom, Locale } from \"@kizmann/pico-js\";\n\nimport CtorMixin from \"./mixins/src/ctor\";\nimport CmerMixin from \"./mixins/src/cmer\";\nimport CsloMixin from \"./mixins/src/cslo\";\n\nexport const Icons = {\n    handle: 'fa fa-ellipsis-v',\n    checked: 'fa fa-check',\n    circle: 'fa fa-circle',\n    intermediate: 'fa fa-minus',\n    clock: 'fa fa-clock',\n    calendar: 'fa fa-calendar',\n    times: 'fa fa-times',\n    primary: 'fa fa-info-circle',\n    success: 'fa fa-check-circle',\n    warning: 'fa fa-exclamation-circle',\n    danger: 'fa fa-times-circle',\n    info: 'fa fa-info-circle',\n    angleUp: 'fa fa-angle-up',\n    angleRight: 'fa fa-angle-right',\n    angleDown: 'fa fa-angle-down',\n    angleLeft: 'fa fa-angle-left',\n    angleDoubleLeft: 'fa fa-angle-double-left',\n    angleDoubleRight: 'fa fa-angle-double-right'\n};\n\nexport const Settings = {\n    iconPosition: 'before',\n    notifySize: 'md',\n    notifyPosition: 'bottom-start'\n};\n\nexport function Install(App, Icons = {}, Styles = {})\n{\n    /**\n     * @const global.pi\n     */\n\n    if ( typeof global.pi === 'undefined' ) {\n        return console.error('pico-js is not available.');\n    }\n\n    Obj.each(global.pi, (value, key) => {\n        App.config.globalProperties[key] = value;\n    });\n\n    App.config.globalProperties.ctor = CtorMixin.ctor;\n    App.config.globalProperties.cmer = CmerMixin.cmer;\n    App.config.globalProperties.cslo = CsloMixin.cslo;\n\n    App.config.globalProperties.trans = Locale.trans;\n    App.config.globalProperties.choice = Locale.choice;\n\n    global.nano.Icons = Obj.assign(Icons, global.nano.Icons);\n    global.nano.Settings = Obj.assign(Settings, global.nano.Settings);\n\n    require('./alert/index').default(App);\n    require('./notification/index').default(App);\n    require('./empty/index').default(App);\n    require('./config/index').default(App); //!complex 17.1\n    require('./scrollbar/index').default(App);\n    require('./virtualscroller/index').default(App);\n    require('./draggable/index').default(App);\n    require('./loader/index').default(App);\n    require('./resizer/index').default(App);\n    require('./popover/index').default(App);\n    require('./modal/index').default(App);\n    require('./button/index').default(App);\n    require('./input/index').default(App);\n    require('./input-number/index').default(App);\n    require('./textarea/index').default(App);\n    require('./select/index').default(App);\n    require('./checkbox/index').default(App);\n    require('./radio/index').default(App);\n    require('./slider/index').default(App);\n    require('./switch/index').default(App);\n    require('./confirm/index').default(App);\n    require('./cascader/index').default(App);\n    require('./datepicker/index').default(App);\n    require('./timepicker/index').default(App);\n    // require('./datetimepicker/index'); 18.1\n    require('./transfer/index').default(App);\n    require('./form/index').default(App); // check\n    require('./tabs/index').default(App);\n    require('./collapse/index').default(App);\n    require('./table/index').default(App); // 18.1 options\n    require('./paginator/index').default(App);\n    require('./info/index').default(App); //!complex 16.1\n    require('./preview/index').default(App);\n    require('./map/index').default(App);\n    require('./file/index').default(App);\n    require('./rating/index').default(App);\n\n    // SX only ez 17.1\n    // require('./file-list/index'); // SX only 17.1\n\n    // require('./chart/index'); // Ignore\n    // require('./wysiwyg/index'); // Ignore\n}\n\nexport const Nano = {\n    Icons: Icons, Settings: Settings, Install: Install\n};\n\nglobal.keyMods = [];\n\nDom.find(document).on('keydown', (event) => {\n    Arr.add(global.keyMods, event.which);\n});\n\nDom.find(document).on('keyup', (event) => {\n    Arr.remove(global.keyMods, event.which);\n});\n\nDom.find(document).on('dragstart', (event) => {\n    Arr.add(global.keyMods, event.which);\n});\n\nDom.find(document).on('dragend', (event) => {\n    global.keyMods = [];\n});\n\nif ( typeof global.nano === 'undefined' ) {\n    global.nano = Nano;\n}\n\nexport default Nano;\n","import Virtualscroller from './src/virtualscroller/virtualscroller.beta';\n\nexport default function (App) {\n    App.component(Virtualscroller.name, Virtualscroller);\n}","import Draglist from './src/draglist/draglist';\nimport DraglistItem from './src/draglist-item/draglist-item';\nimport Draggrid from './src/draggrid/draggrid';\nimport DraggridItem from './src/draggrid-item/draggrid-item';\n\nexport default function (App) {\n    App.component(Draglist.name, Draglist);\n    App.component(DraglistItem.name, DraglistItem);\n    App.component(Draggrid.name, Draggrid);\n    App.component(DraggridItem.name, DraggridItem);\n}","import { Any, Arr, Obj, Dom, Event, UUID } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTable',\n\n    provide()\n    {\n        return {\n            NTable: this\n        };\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        visible: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        expanded: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        filter: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        sortProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        sortDir: {\n            default()\n            {\n                return 'desc';\n            },\n            type: [String]\n        },\n\n        closeFilterOnEnter: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => height * 0.51;\n            }\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 38;\n            },\n            type: [Number]\n        },\n\n        itemOffset: {\n            default()\n            {\n                return 30;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderExpand: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        },\n\n    },\n\n    computed: {\n\n        checked()\n        {\n            return !!this.tempSelected.length &&\n                this.tempSelected.length === this.items.length;\n        },\n\n        intermediate()\n        {\n            return !!this.tempSelected.length &&\n                this.tempSelected.length !== this.items.length\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            elements: [],\n            tempVisible: this.visible,\n            tempVisibleProps: [],\n            tempSelected: this.selected,\n            tempSortProp: this.sortProp,\n            tempSortDir: this.sortDir,\n            tempFilter: this.filter,\n            tempFilterProps: [],\n        }\n    },\n\n    mounted()\n    {\n        this.$watch('tempVisible',\n            this.makeVisibleProps, { deep: true });\n\n        if ( !this.tempVisible.length ) {\n            Arr.each(this.elements, this.detectVisible);\n        }\n    },\n\n    watch: {\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n    },\n\n    methods: {\n\n        addColumn(column)\n        {\n            Arr.add(this.elements, column,\n                { uid: column.uid });\n        },\n\n        removeColumn(column)\n        {\n            Arr.remove(this.elements,\n                { uid: column.uid });\n        },\n\n        getColumnIndex(column)\n        {\n            if ( !Any.isString(column) ) {\n                column = column['prop'];\n            }\n\n            return Arr.findIndex(this.tempVisibleProps,\n                column);\n        },\n\n        getColumnVisiblity(column)\n        {\n            if ( !Any.isString(column) ) {\n                column = column.prop;\n            }\n\n            return Arr.has(this.tempVisible, column);\n        },\n\n        getColumnSorted(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.sortProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            if ( this.tempSortProp !== prop ) {\n                return null;\n            }\n\n            return this.tempSortDir;\n        },\n\n        getColumnFilter(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.filterProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            return Arr.find(this.tempFilter, {\n                property: prop\n            });\n        },\n\n        getColumnFiltered(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.filterProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            return Arr.has(this.tempFilterProps, prop);\n        },\n\n        detectVisible(column)\n        {\n            if ( column.detectVisibity() ) {\n                Arr.add(this.tempVisible, column.prop);\n            }\n        },\n\n        makeVisibleProps()\n        {\n            this.tempVisibleProps = Arr.intersect(\n                Arr.extract(this.elements, 'prop'), this.tempVisible);\n\n            this.$nextTick(this.$refs.scrollbar.onResize);\n        },\n\n        sortByColumn(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.sortProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n\n            let dir = this.tempSortDir;\n\n            if ( prop === this.tempSortProp && this.tempSortDir === 'desc' ) {\n                dir = 'asc';\n            }\n\n            if ( prop === this.tempSortProp && this.tempSortDir === 'asc' ) {\n                dir = 'desc';\n            }\n\n            if ( this.tempSortDir !== dir ) {\n                this.$emit('update:sortDir', this.tempSortDir = dir);\n            }\n\n            if ( this.tempSortProp !== prop ) {\n                this.$emit('update:sortProp', this.tempSortProp = prop);\n            }\n\n            this.$emit('sort', this.tempSortProp, this.tempSortDir);\n        },\n\n        replaceFilter(filter, search)\n        {\n            Arr.replace(this.tempFilter, filter, search);\n\n            let filters = Arr.filter(this.tempFilter, (filter) => {\n                return Arr.has(this.tempFilterProps, filter.property);\n            });\n\n            this.$emit('update:filter', filters);\n\n            this.$emit('filter', filters, this.tempFilterProps);\n        },\n\n        resetFilter()\n        {\n            this.tempFilter = this.tempFilterProps = [];\n\n            Event.fire('NTable:reset', this.uid);\n\n            this.$emit('update:filter', this.tempFilter);\n\n            this.$emit('filter', this.tempFilter, this.tempFilterProps);\n        },\n\n        selectAll()\n        {\n            this.$refs.draggable.selectAll();\n        },\n\n        highlightNode(value, key = null)\n        {\n            this.$refs.draggable.highlightNode(value, key);\n        },\n\n        syncCurrent()\n        {\n            return this.$refs.draggable.syncCurrent();\n        },\n\n        refreshCurrent()\n        {\n            this.$refs.draggable.refreshCurrent();\n        },\n\n    },\n\n    renderHandle()\n    {\n        if ( !this.renderHandle ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-draglist-item__handle\">\n                { /* Only used in row */}\n            </div>\n        )\n    },\n\n    renderExpand()\n    {\n        if ( !this.renderExpand ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-draglist-item__expand\">\n                { /* Only used in row */}\n            </div>\n        )\n    },\n\n    renderSelect()\n    {\n        if ( !this.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            modelValue: this.checked,\n            intermediate: this.intermediate,\n            disabled: !this.items.length,\n            onClick: this.selectAll\n        };\n\n        return (\n            <div class=\"n-draglist-item__select\">\n                <NCheckbox {...props}></NCheckbox>\n            </div>\n        );\n    },\n\n    renderBody(props)\n    {\n        let columns = Obj.each(this.elements, (column) => {\n            return column.ctor('renderBody')(props);\n        });\n\n        return Obj.values(columns);\n    },\n\n    renderContext()\n    {\n        let columns = Obj.each(this.elements, (column) => {\n            return (\n                <NCheckbox class=\"n-table__checkbox\" value={column.prop}>\n                    {column.label}\n                </NCheckbox>\n            );\n        });\n\n        return (\n            <NPopover trigger=\"context\" width={140}>\n                <NCheckboxGroup vModel={this.tempVisible} align=\"vertical\">\n                    {Obj.values(columns)}\n                </NCheckboxGroup>\n            </NPopover>\n        );\n    },\n\n    renderHead()\n    {\n        let defaultRender = [\n            this.ctor('renderHandle')(),\n            this.ctor('renderExpand')(),\n            this.ctor('renderSelect')(),\n            this.ctor('renderContext')()\n        ];\n\n        let columns = Obj.each(this.elements, (column) => {\n            return column.ctor('renderHead')();\n        });\n\n        return (\n            <div class=\"n-table__header\">\n                {defaultRender} {Obj.values(columns)}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let except = [\n            'visible', 'filter', 'sortProp',\n            'sortDir', 'closeFilterOnEnter'\n        ];\n\n        let props = Obj.except(this.$props, except, {\n            items: this.items,\n            selected: this.tempSelected,\n            overflowX: false,\n            useKeys: this.useKeys,\n            // renderNode: this.ctor('renderBody')\n        });\n\n        props['onRowClick'] = (...args) => {\n            this.$emit('row-click', ...args);\n        }\n\n        props['onRowDblclick'] = (...args) => {\n            this.$emit('row-dblclick', ...args);\n        }\n\n        props['onUpdate:items'] = (value) => {\n            this.$emit('update:items', value);\n        }\n\n        props['onUpdate:current'] = (value) => {\n            this.$emit('update:current', value);\n        }\n\n        props['onUpdate:expanded'] = (value) => {\n            this.$emit('update:expanded', value);\n        }\n\n        props['onUpdate:selected'] = (value) => {\n            this.$emit('update:selected', this.tempSelected = value);\n        }\n\n        let draggableHtml = (\n            <div class=\"n-table__body\">\n                <NDraglist ref=\"draggable\" {...props} offsetX={25}>\n                    {{ default: this.ctor('renderBody') }}\n                </NDraglist>\n            </div>\n        );\n\n        return (\n            <div class=\"n-table\">\n                <NScrollbar ref=\"scrollbar\" class=\"n-table__wrap\" fixture={true} overflowY={false}>\n                    <div class=\"n-table__inner\">\n                        {[this.ctor('renderHead')(), draggableHtml]}\n                    </div>\n                </NScrollbar>\n                {this.$slots.default && this.$slots.default()}\n            </div>\n        );\n    },\n\n}","import { Any, Arr, Obj, Str, Dom, UUID, Num, Locale } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTableColumn',\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        prop: {\n            default()\n            {\n                return UUID();\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'string';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'left';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        filter: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        visible: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean, Function]\n        },\n\n        breakpoint: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        previewProp: {\n            default()\n            {\n                return 'preview';\n            },\n            type: [String]\n        },\n\n        matrix: {\n            default()\n            {\n                return - 1;\n            },\n            type: [Number, String]\n        },\n\n        matrixProp: {\n            default()\n            {\n                return 'matrix';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Object, Array, Function]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        sortProp: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        filterProp: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        fluid: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        fixedWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        minWidth: {\n            default()\n            {\n                return 120;\n            }\n        },\n\n        maxWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        emptyText: {\n            default()\n            {\n                return '-';\n            },\n            type: [String]\n        },\n\n        undefinedText: {\n            default()\n            {\n                return Locale.trans('-');\n            },\n            type: [String]\n        },\n\n        trueText: {\n            default()\n            {\n                return Locale.trans('Yes');\n            },\n            type: [String]\n        },\n\n        falseText: {\n            default()\n            {\n                return Locale.trans('No');\n            },\n            type: [String]\n        },\n\n        datetimeFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm');\n            },\n            type: [String]\n        },\n\n        allowUncheck: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        matrixValues()\n        {\n            if ( this.type !== 'matrix' ) {\n                return;\n            }\n\n            let values = {};\n\n            if ( Any.isEmpty(this.modelValue) ) {\n                return values;\n            }\n\n            Arr.each(this.modelValue, (item) => {\n                Obj.set(values, item[this.NTable.uniqueProp],\n                    Num.matrix(item[this.matrixProp]));\n            });\n\n            return values;\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NTableColumn: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(), tempWidth: 0\n        };\n    },\n\n    methods: {\n\n        detectVisibity()\n        {\n            let visible = this.visible;\n\n            if ( this.breakpoint ) {\n                visible &= Dom.find(this.NTable.$el).width() > this.breakpoint;\n            }\n\n            return visible;\n        },\n\n        sortByColumn(event)\n        {\n            if ( !Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            if ( !Dom.find(event.target).closest('.n-table-column__filter') ) {\n                this.NTable.sortByColumn(this);\n            }\n        },\n\n    },\n\n    beforeMount()\n    {\n        this.changedStates = {};\n        this.NTable.addColumn(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NTable.removeColumn(this);\n    },\n\n    renderHead()\n    {\n        if ( !this.NTable.getColumnVisiblity(this) ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-column',\n            'n-table-column--' + this.align,\n            'n-table-column--' + this.type,\n        ];\n\n        let sortDirection = this.NTable.getColumnSorted(this);\n\n        if ( sortDirection ) {\n            classList.push('n-sorted', 'n-' + sortDirection);\n        }\n\n        if ( this.fluid || !this.width ) {\n            classList.push('n-fluid');\n        }\n\n        if ( this.fixedWidth ) {\n            classList.push('n-fixed');\n        }\n\n        if ( this.NTable.getColumnFiltered(this) ) {\n            classList.push('n-filtered');\n        }\n\n        let style = {};\n\n        if ( this.fixedWidth ) {\n            style.width = this.fixedWidth + 'px';\n        }\n\n        if ( this.width ) {\n            style.flexBasis = this.width + 'px';\n        }\n\n        let props = {\n            modelValue: this.tempWidth,\n            width:      this.width,\n            minWidth:   this.minWidth,\n            maxWidth:   this.maxWidth,\n            disabled:   !!this.fixedWidth,\n            group:      [this.NTable.uid],\n        };\n\n        props['onUpdate:modelValue'] = (value) => {\n            this.tempWidth = value;\n        }\n\n        if ( this.sort ) {\n            props.onMousedown = this.sortByColumn;\n        }\n\n        return (\n            <NResizer ref=\"column\" class={classList} style={style} {...props}>\n                {this.ctor('renderHeadSort')()}\n                {this.ctor('renderHeadLabel')()}\n                {this.ctor('renderHeadFilter')()}\n            </NResizer>\n        );\n    },\n\n    renderHeadLabel()\n    {\n        let classList = [\n            'n-table-column__label'\n        ];\n\n        let labelHtml = (\n            <div class={classList}>\n                <span>{this.label}</span>\n            </div>\n        );\n\n        if ( Any.isEmpty(this.tooltip) ) {\n            return labelHtml;\n        }\n\n        let tooltipHtml = (\n            <NPopover type=\"tooltip\">{this.tooltip}</NPopover>\n        );\n\n        return [labelHtml, tooltipHtml];\n    },\n\n    renderHeadSort()\n    {\n        if ( !this.sort ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-table-column__sort\">\n                <i>{ /* Sorting angles */}</i>\n            </div>\n        )\n    },\n\n    renderHeadFilter()\n    {\n        if ( !this.filter ) {\n            return null;\n        }\n\n        let angleHtml = (\n            <div class=\"n-table-column__filter\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n\n        let component = resolveComponent('NTableFilter' +\n            Str.ucfirst(this.type));\n\n        return [\n            angleHtml, h(component, { column: this })\n        ];\n    },\n\n    renderBody(props)\n    {\n        if ( !this.NTable.getColumnVisiblity(this) ) {\n            return null;\n        }\n\n        let uid = props.value[this.NTable.uniqueProp]\n            + this.uid;\n\n        let classList = [\n            'n-table-cell',\n            'n-table-cell--' + this.align,\n            'n-table-cell--' + this.type,\n        ];\n\n        if ( this.fluid ) {\n            classList.push('n-fluid');\n        }\n\n        if ( this.tempWidth ) {\n            classList.push('n-fixed');\n        }\n\n        let index = this.NTable.getColumnIndex(this);\n\n        let offset = 0;\n\n        if ( index === 0 ) {\n            offset = props.value.depth * this.NTable.itemOffset;\n        }\n\n        let style = {\n            width: (this.tempWidth - offset) + 'px'\n        };\n\n        if ( this.minWidth ) {\n            style.minWidth = (this.minWidth - offset) + 'px';\n        }\n\n        if ( this.maxWidth ) {\n            style.maxWidth = (this.maxWidth - offset) + 'px';\n        }\n\n        let passed = Obj.except(this.$attrs, [], {\n            ...props, uid: uid, class: classList, style: style, column: this\n        });\n\n        let component = resolveComponent('NTableCell' +\n            Str.ucfirst(this.type));\n\n        return h(component, passed);\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}","import { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        },\n\n        NDraggableItem: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        uid: {\n            required: true\n        },\n\n        column: {\n            required: true\n        },\n\n        item: {\n            required: true\n        },\n\n        value: {\n            required: true\n        },\n\n        copy: {\n            required: true\n        },\n\n        remove: {\n            required: true\n        },\n\n\n    },\n\n    computed: {\n\n        input()\n        {\n            return Obj.get(this.item, this.column.prop);\n        }\n\n    },\n\n    data()\n    {\n        return { init: false };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => this.init = true, 20);\n    },\n\n    beforeUnmount()\n    {\n        clearTimeout(this.timer);\n    },\n\n    methods: {\n\n        setFirstState(state)\n        {\n            Obj.set(this.column.changedStates,\n                this.uid, this.firstState = state);\n        }\n\n    },\n\n    render()\n    {\n        if ( this.column.$slots.default ) {\n            return this.column.$slots.default(this);\n        }\n        \n        return (\n            <div>{ this.input }</div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellString',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertString(this.input, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellBoolean',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertBoolean(this.input, this.column.trueText, this.column.falseText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellDatetime',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertDatetime(this.input, this.column.datetimeFormat, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellOption',\n\n    extends: TableCell,\n\n    renderOption(value)\n    {\n        let options = this.column.options;\n\n        if ( Any.isFunction(options) ) {\n            options = this.column.options(this);\n        }\n\n        options = Arr.each(options, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let prop = this.column.optionsValue;\n\n        let option = Arr.find(options, (item) => {\n            return Obj.get(item, prop) == value;\n        });\n\n        if ( ! option ) {\n            return [this.column.emptyText];\n        }\n\n        return Obj.get(option, this.column.optionsLabel,\n            this.column.undefinedText);\n    },\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        let input = ! Any.isObject(this.input) ?\n            [this.input] : this.input;\n\n        return (\n            <div>\n                <span>{ Arr.each(input, this.ctor('renderOption')) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellImage',\n\n    extends: TableCell,\n\n    computed: {\n\n        preview()\n        {\n            return Obj.get(this.item, this.column.previewProp);\n        }\n\n    },\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        let classList = [\n            'n-table-cell',\n            'n-table-cell--' + this.column.type\n        ];\n\n        let props = {\n            fit: 'contain',\n        }\n\n        return (\n            <div class={classList}>\n                <NPreview file={this.preview || this.input} thumb={this.input} {...props} />\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Num, Any, Obj, Arr, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellMatrix',\n\n    extends: TableCell,\n\n    beforeMount()\n    {\n        this.firstState = Obj.get(this.column.changedStates,\n            this.uid);\n    },\n\n    methods: {\n\n        toggleMatrix()\n        {\n            if ( this.column.matrix === -1 ) {\n                return this.toggleSelect();\n            }\n\n            let itemList = this.column.modelValue;\n\n            if ( itemList === null ) {\n                itemList = [];\n            }\n\n            let item = Arr.find(itemList, {\n                [this.NTable.uniqueProp]: this.value[this.NTable.uniqueProp]\n            });\n\n            if ( ! item ) {\n                item = Obj.assign({}, this.item, { [this.column.matrixProp]: 0 });\n            }\n\n            let currentMatrix = Num.int(item[this.column.matrixProp]);\n\n            let matrix = Arr.toggle(Num.matrix(currentMatrix),\n                Num.int(this.column.matrix));\n\n            item[this.column.matrixProp] = Num.combine(matrix);\n\n            Arr.replace(itemList, item, {\n                [this.NTable.uniqueProp]: item[this.NTable.uniqueProp]\n            });\n\n            this.column.$emit('update:modelValue', itemList);\n        },\n\n        toggleSelect()\n        {\n            let itemList = this.column.modelValue;\n\n            if ( itemList === null ) {\n                itemList = [];\n            }\n\n            let fallback = Obj.assign({}, this.item, {\n                [this.column.matrixProp]: this.column.matrix\n            });\n\n            let finder = {\n                [this.NTable.uniqueProp]: this.value[this.NTable.uniqueProp],\n            };\n\n            let item = Arr.find(itemList, finder);\n\n            if ( ! item ) {\n                Arr.add(itemList, fallback);\n            } else {\n                Arr.remove(itemList, finder);\n            }\n\n            this.column.$emit('update:modelValue', itemList);\n        },\n\n        isChecked()\n        {\n            let matrix = Obj.get(this.column.matrixValues,\n                this.item[this.NTable.uniqueProp]);\n\n            if ( ! matrix ) {\n                return false;\n            }\n\n            let value = Num.int(this.column.matrix);\n\n            if ( value === -1 ) {\n                return true;\n            }\n\n            return Arr.has(matrix, value);\n        },\n\n        isDisabled()\n        {\n            if ( ! Any.isFunction(this.column.disabled) ) {\n                return this.column.disabled;\n            }\n\n            return this.column.disabled(this);\n        }\n\n    },\n\n    render()\n    {\n        let checked = this.isChecked();\n\n        if ( this.firstState === null ) {\n            this.setFirstState(checked);\n        }\n\n        if ( ! this.init ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-cell--checkbox'\n        ];\n\n        if ( this.firstState !== checked ) {\n            classList.push('n-changed');\n        }\n\n        if ( checked ) {\n            classList.push('n-checked');\n        }\n\n        let isDisabled = this.isDisabled();\n\n        if ( this.column.allowUncheck ) {\n            isDisabled = isDisabled && ! checked;\n        }\n\n        if ( isDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( ! isDisabled ) {\n            props.onClick = this.toggleMatrix;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <i class={nano.Icons.checked}></i>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Num, Any, Obj, Arr } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellSelect',\n\n    extends: TableCell,\n\n    beforeMount()\n    {\n        this.firstState = Obj.get(this.column.changedStates,\n            this.uid);\n    },\n\n    methods: {\n\n        toggleSelect()\n        {\n            let item = null;\n\n            if ( ! this.isChecked() ) {\n                item = Obj.assign({}, this.item);\n            }\n\n            this.column.$emit('update:modelValue', item);\n        },\n\n        isChecked()\n        {\n            if ( Any.isEmpty(this.column.modelValue) ) {\n                return false;\n            }\n\n            return Obj.get(this.column.modelValue, this.NTable.uniqueProp) ===\n                this.value[this.NTable.uniqueProp];\n        },\n\n        isDisabled()\n        {\n            if ( ! Any.isEmpty(this.column.modelValue) ) {\n                return true;\n            }\n\n            if ( ! Any.isFunction(this.column.disabled) ) {\n                return this.column.disabled;\n            }\n\n            return this.column.disabled(this);\n        },\n\n    },\n\n    render()\n    {\n        let checked = this.isChecked();\n\n        if ( this.firstState === null ) {\n            this.setFirstState(checked);\n        }\n\n        if ( ! this.init ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-cell--checkbox'\n        ];\n\n        if ( this.firstState !== checked ) {\n            classList.push('n-changed');\n        }\n\n        if ( checked ) {\n            classList.push('n-checked');\n        }\n\n        let isDisabled = this.isDisabled();\n\n        if ( this.column.allowUncheck ) {\n            isDisabled = isDisabled && ! checked;\n        }\n\n        if ( isDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( ! isDisabled ) {\n            props.onClick = this.toggleSelect;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <i class={nano.Icons.checked}></i>\n            </div>\n        );\n    }\n\n}\n","import {Arr, Obj, Any, Dom, Event, UUID} from \"@kizmann/pico-js\";\n\nexport default {\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        column: {\n            required: true\n        }\n\n    },\n\n    computed: {\n\n        tempFilter()\n        {\n            return this.NTable.getColumnFilter(this.column);\n        },\n\n        canReset()\n        {\n            return ! this.NTable.getColumnFiltered(this.column);\n        },\n\n        canApply()\n        {\n            return ! Any.isEmpty(this.filter.value);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            filter: this.getFilterClone(), visible: false\n        };\n    },\n\n    beforeMount()\n    {\n        this.mountFilter();\n    },\n\n    mounted()\n    {\n        Event.bind('NTable:reset', \n            this.resetFilter, this._.uid);\n\n        Dom.find(document).on('keydown', \n            this.onKeydown, this._.uid);\n    },\n\n    beforeUnmount()\n    {\n        Event.unbind('NTable:reset', \n            this._.uid);\n\n        Dom.find(document).off('keydown', \n            null, this._.uid);\n    },\n\n    methods: {\n\n        getFilterClone()\n        {\n            let tempFilter = this.NTable.getColumnFilter(this.column);\n\n            if ( Any.isEmpty(tempFilter) ) {\n                return null;\n            }\n\n            return Obj.clone(tempFilter);\n        },\n\n        getFilterProp()\n        {\n            return this.column.filterProp || \n                this.column.prop;\n        },\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null,\n                property:   this.getFilterProp(), \n            };\n        },\n\n        mountFilter()\n        {\n            if ( this.filter ) {\n                return this.applyFilter();\n            }\n\n            this.filter = this.getDefaultFilter();\n\n            if ( ! this.canApply ) {\n                return;\n            }\n\n            Arr.add(this.NTable.tempFilter, this.filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        resetFilter(uid)\n        {\n            if ( this.NTable.uid !== uid ) {\n                return;\n            }\n\n            this.filter = this.getDefaultFilter();\n\n            Arr.add(this.NTable.tempFilter, this.filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        onKeydown(event)\n        {\n            if ( ! this.visible ) {\n                return;\n            }\n\n            if ( event.which === 13 && this.canApply ) {\n                this.applyFilter();\n            }\n\n            if ( event.which === 13 && ! this.canApply ) {\n                this.clearFilter();\n            }\n\n            let closeAnyway = event.which === 13 &&\n                this.NTable.closeFilterOnEnter;\n\n            if ( closeAnyway || event.which === 27 ) {\n                this.$refs.popover.close();\n            }\n        },\n\n        applyFilter()\n        {\n            let filter = Obj.clone(this.filter);\n\n            Arr.add(this.NTable.tempFilterProps, \n                this.getFilterProp());\n\n            this.NTable.replaceFilter(filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        clearFilter()\n        {\n            let filter = this.getDefaultFilter();\n\n            Arr.remove(this.NTable.tempFilterProps, \n                this.getFilterProp());\n\n            this.NTable.replaceFilter(filter, {\n                property: this.getFilterProp()\n            });\n\n            this.filter = filter;\n        }\n\n    },\n\n    renderForm()\n    {\n        return null;\n    },\n\n    renderApply()\n    {\n        let props = {\n            type: 'primary',\n            link: true,\n            size: 'xs',\n            disabled: ! this.canApply\n        };\n\n        return (\n            <NButton {...props} onClick={this.applyFilter}>\n                { this.trans('Apply') }\n            </NButton>\n        );\n    },\n\n    renderReset()\n    {\n        let props = {\n            type: 'danger',\n            link: true,\n            size: 'xs',\n            disabled: this.canReset,\n        };\n\n        return (\n            <NButton {...props} onClick={this.clearFilter}>\n                { this.trans('Reset') }\n            </NButton>\n        );\n    },\n\n    renderFooter()\n    {\n        return (\n            <div class=\"n-table-filter__footer\">\n                { this.ctor('renderReset')() }\n                { this.ctor('renderApply')() }\n            </div>\n        )\n    },\n\n    render()\n    {\n        let props = {\n            class: 'n-table-filter__popover',\n            trigger: 'click',\n            size: 'sm',\n            width: 220,\n        }\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.visible} {...props}>\n                {\n                    { default: this.ctor('renderForm'), footer: this.ctor('renderFooter') }\n                }\n            </NPopover>\n        );\n    }\n}\n","import TableFilter from \"../table-filter\";\nimport { Dom, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterString',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'li',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            li: this.trans('Includes value'),\n            nl: this.trans('Excludes value'),\n            eq: this.trans('Equal value'),\n            ne: this.trans('Except value'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NInput size=\"sm\" vModel={this.filter.value} />\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterBoolean',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'in',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            1: this.trans(this.column.trueText),\n            0: this.trans(this.column.falseText),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.value} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\n\nexport default {\n\n    name: 'NTableFilterDatetime',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'eq',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            eq: this.trans('Exact date'),\n            lt: this.trans('Before date'),\n            gt: this.trans('After date'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NDatepicker size=\"sm\" vModel={this.filter.value} format={this.column.datetimeFormat} />\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\nimport { Arr, Obj, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterOption',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type,\n                value:      [],\n                operator:   'in',\n                property:   this.getFilterProp(),\n            };\n        }\n\n    },\n\n    renderOption(value)\n    {\n        let props = {\n            value: Obj.get(value, this.column.optionsValue)\n        };\n\n        return (\n            <NCheckbox {...props}>{ Obj.get(value, this.column.optionsLabel) }</NCheckbox>\n        );\n    },\n\n    renderForm()\n    {\n        let items = this.column.options;\n\n        if ( Any.isFunction(items) ) {\n            items = this.column.options(this);\n        }\n\n        items = Arr.each(items, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let options = {\n            in: this.trans('Includes value'),\n            ni: this.trans('Excludes value'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NCheckboxGroup size=\"sm\" align=\"vertical\" vModel={this.filter.value}>\n                        { Arr.each(items, this.ctor('renderOption')) }\n                    </NCheckboxGroup>\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import Table from './src/table/table';\nimport TableColumn from './src/table-column/table-column';\nimport TableCellString from './src/table-cell/types/table-cell-string';\nimport TableCellBoolean from './src/table-cell/types/table-cell-boolean';\nimport TableCellDatetime from './src/table-cell/types/table-cell-datetime';\nimport TableCellOption from './src/table-cell/types/table-cell-option';\nimport TableCellImage from './src/table-cell/types/table-cell-image';\nimport TableCellMatrix from './src/table-cell/types/table-cell-matrix';\nimport TableCellSelect from './src/table-cell/types/table-cell-select';\nimport TableFilterString from './src/table-filter/types/table-filter-string';\nimport TableFilterBoolean from './src/table-filter/types/table-filter-boolean';\nimport TableFilterDatetime from './src/table-filter/types/table-filter-datetime';\nimport TableFilterOption from './src/table-filter/types/table-filter-option';\n\n\nexport default function (App) {\n    App.component(Table.name, Table);\n    App.component(TableColumn.name, TableColumn);\n    App.component(TableCellString.name, TableCellString);\n    App.component(TableCellBoolean.name, TableCellBoolean);\n    App.component(TableCellDatetime.name, TableCellDatetime);\n    App.component(TableCellOption.name, TableCellOption);\n    App.component(TableCellImage.name, TableCellImage);\n    App.component(TableCellMatrix.name, TableCellMatrix);\n    App.component(TableCellSelect.name, TableCellSelect);\n    App.component(TableFilterString.name, TableFilterString);\n    App.component(TableFilterBoolean.name, TableFilterBoolean);\n    App.component(TableFilterDatetime.name, TableFilterDatetime);\n    App.component(TableFilterOption.name, TableFilterOption);\n}","import { Arr, Any, Obj, Event, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInfo',\n\n    model: {\n        prop: 'item'\n    },\n\n    props: {\n\n        item: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        syncEvent: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            elements: [],\n            options: [],\n            tempValue: this.item,\n        };\n    },\n\n    watch: {\n\n        item(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.bindSyncEvent();\n    },\n\n    beforeUnmount()\n    {\n        this.unbindSyncEvent();\n    },\n\n    updated()\n    {\n        Any.delay(() => this.$refs.scrollbar.adaptHeight(), 500);\n    },\n\n    methods: {\n\n        bindSyncEvent()\n        {\n            if ( !this.syncEvent ) {\n                return;\n            }\n\n            this.options = this.syncEvent;\n\n            if ( Any.isFunction(this.options) ) {\n                this.options = this.options(this);\n            }\n\n            let syncFunction = (value, uid = null) => {\n                if ( uid === this.options[1] ) {\n                    this.setValue(value);\n                }\n            };\n\n            Event.bind(this.options[0], syncFunction,\n                this.uid);\n        },\n\n        unbindSyncEvent()\n        {\n            Event.unbind(this.options[0], this.uid);\n        },\n\n        setValue(value)\n        {\n            this.$emit('update:modelValue',\n                this.tempValue = value);\n        },\n\n        addColumn(column)\n        {\n            Arr.add(this.elements,\n                column, { uid: column.uid });\n        },\n\n        removeColumn(column)\n        {\n            Arr.remove(this.elements,\n                { uid: column.uid });\n        },\n\n    },\n\n    provide()\n    {\n        return {\n            NInfo: this\n        };\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={!this.showEmptyIcon} class=\"n-info__empty\">\n                {this.$slots.empty && this.$slots.empty() || this.trans('No entry')}\n            </NEmptyIcon>\n        );\n    },\n\n    renderBody()\n    {\n        if ( Any.isEmpty(this.tempValue) ) {\n            return this.ctor('renderEmpty')();\n        }\n\n        let elements = Obj.each(this.elements, (column) => {\n            return (\n                <div class=\"n-info__column\">\n                    {column.ctor('renderLabel')({ item: this.tempValue })}\n                    {column.ctor('renderBody')({ item: this.tempValue })}\n                </div>\n            );\n        });\n\n        return (\n            <div class=\"n-info__body\">\n                {Any.vals(elements)}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-info',\n            'n-info--' + this.type,\n            'n-info--' + this.size,\n        ];\n\n        let infoHtml = (\n            <NScrollbar ref=\"scrollbar\" relative={this.relative}>\n                {this.ctor('renderBody')()}\n            </NScrollbar>\n        );\n\n        return (\n            <div class={classList}>\n                {[infoHtml, this.$slots.default()]}\n            </div>\n        );\n    }\n}\n","import { UUID, Obj, Locale, Str } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NInfoColumn',\n\n    inject: {\n\n        NInfo: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        prop: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'string';\n            },\n            type: [String]\n        },\n\n        previewProp: {\n            default()\n            {\n                return 'preview';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Object, Array, Function]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        emptyText: {\n            default()\n            {\n                return Locale.trans('-');\n            },\n            type: [String]\n        },\n\n        trueText: {\n            default()\n            {\n                return Locale.trans('Yes');\n            },\n            type: [String]\n        },\n\n        falseText: {\n            default()\n            {\n                return Locale.trans('No');\n            },\n            type: [String]\n        },\n\n        datetimeFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm');\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID()\n        };\n    },\n\n    beforeMount()\n    {\n        this.NInfo.addColumn(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NInfo.removeColumn(this);\n    },\n\n    renderLabel()\n    {\n        if ( this.$slots.label ) {\n            return this.$slots.label();\n        }\n        \n        return (\n            <div class=\"n-info-column\">\n                <span>{this.label}</span>\n            </div>\n        );\n    },\n\n    renderBody(props)\n    {\n        let passed = Obj.except(props, [], {\n            column: this\n        });\n\n        let component = resolveComponent('NInfoField' + \n            Str.ucfirst(this.type));\n\n        if ( ! component ) {\n            return null;\n        }\n\n        passed.class = [\n            'n-info-field',\n            'n-info-field--' + this.type\n        ];\n\n         return h(component, passed);\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}\n","import { Obj } from \"@kizmann/pico-js\";\nimport CtorMixin from \"../../../mixins/src/ctor\";\n\nexport default {\n\n    inject: {\n\n        NInfo: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        column: {\n            required: true\n        },\n\n        item: {\n            required: true\n        },\n\n    },\n\n    computed: {\n\n        input()\n        {\n            return Obj.get(this.item, this.column.prop);\n        }\n\n    },\n\n    render()\n    {\n        return (\n            <div>\n                <span>{ this.input }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldString',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertString(this.input, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldBoolean',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertBoolean(this.input, this.column.trueText, this.column.falseText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldDatetime',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertDatetime(this.input, this.column.datetimeFormat, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldOption',\n\n    extends: InfoField,\n\n    renderOption(value)\n    {\n        let options = this.column.options;\n\n        if ( Any.isFunction(options) ) {\n            options = this.column.options(this);\n        }\n\n        let prop = this.column.optionsValue;\n\n        options = Arr.each(options, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let option = Arr.find(options, (item) => {\n            return Obj.get(item, prop) == value;\n        });\n\n        if ( ! option ) {\n            return [this.column.emptyText];\n        }\n\n        return Obj.get(option, this.column.optionsLabel,\n            this.column.undefinedText);\n    },\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        let input = ! Any.isObject(this.input) ?\n            [this.input] : this.input;\n\n        return (\n            <div>\n                <span>{ Arr.each(input, this.ctor('renderOption')) }</span>\n            </div>\n        );\n    }\n\n}\n","import InfoField from \"../info-field\";\nimport { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInfoFieldImage',\n\n    extends: InfoField,\n\n    computed: {\n\n        preview()\n        {\n            return Obj.get(this.item, this.column.previewProp);\n        }\n\n    },\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        let props = {\n            fit: 'contain',\n        };\n\n        return (\n            <div>\n                <NPreview file={this.preview || this.input} thumb={this.input} {...props} />\n            </div>\n        );\n    }\n\n}\n","import Info from './src/info/info';\nimport InfoColumn from './src/info-column/info-column';\nimport InfoFieldString from './src/info-field/types/info-field-string';\nimport InfoFieldBoolean from './src/info-field/types/info-field-boolean';\nimport InfoFieldDatetime from './src/info-field/types/info-field-datetime';\nimport InfoFieldOption from './src/info-field/types/info-field-option';\nimport InfoFieldImage from './src/info-field/types/info-field-image';\n\nexport default function (App) {\n    App.component(Info.name, Info);\n    App.component(InfoColumn.name, InfoColumn);\n    App.component(InfoFieldString.name, InfoFieldString);\n    App.component(InfoFieldBoolean.name, InfoFieldBoolean);\n    App.component(InfoFieldDatetime.name, InfoFieldDatetime);\n    App.component(InfoFieldOption.name, InfoFieldOption);\n    App.component(InfoFieldImage.name, InfoFieldImage);\n}","import { Arr, Any, Dom, Event, UUID } from \"@kizmann/pico-js\";\n\n\nexport default {\n\n    name: 'NPopover',\n\n    provide()\n    {\n        return {\n            NPopover: this\n        };\n    },\n\n    inject: {\n\n        NPopover: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        window: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-center';\n            },\n            type: [String]\n        },\n\n        scrollClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        multiClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        framerate: {\n            default()\n            {\n                return 15;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: false,\n            clientX: 0,\n            clientY: 0,\n            target: null,\n            prevent: false,\n        };\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            this.tempValue = this.modelValue;\n        },\n\n        tempValue()\n        {\n            Any.delay(this.refreshVisible, 50);\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.tempValue = this.modelValue;\n    },\n\n    mounted()\n    {\n        this.target = Dom.find(this.$el).previous().get(0);\n\n        if ( this.trigger === 'context' ) {\n            this.target = Dom.find(this.$el).parent().get(0);\n        }\n\n        if ( this.window ) {\n            Dom.find(document.body).append(this.$el);\n        }\n\n        if ( this.listen && this.trigger === 'hover' ) {\n            Dom.find(document.body).on('mousemove', \n                Any.framerate(this.onHover, 30), this._.uid);\n        }\n\n        if ( this.listen && this.trigger === 'click' ) {\n            Dom.find(document.body).on(this.mousedown, \n                Any.framerate(this.onClick, 30), this._.uid);\n        }\n\n        if ( this.listen && this.trigger === 'context' ) {\n            Dom.find(document.body).on('contextmenu', \n                Any.framerate(this.onContext, 30), this._.uid);\n        }\n\n        Dom.find(document.body).on(this.mousedown, \n            Any.framerate(this.onExit, 30), this._.uid);\n\n        Event.bind('NPopover:close', this.onCloseEvent, this._.uid);\n    },\n\n    beforeUnmount()\n    {\n        this.$el.remove();\n\n        Dom.find(document).off('mousemove', null, this._.uid);\n        Dom.find(document).off('mousedown', null, this._.uid);\n        Dom.find(document).off('contextmenu', null, this._.uid);\n\n        Event.unbind('NPopover:close', this._.uid);\n        \n    },\n\n    methods: {\n\n        active()\n        {\n            return this.tempValue;\n        },\n\n        open()\n        {\n            this.$emit('update:modelValue', \n                this.tempValue = true);\n        },\n\n        close(type = null)\n        {\n            if ( this.prevent ) {\n                return;\n            }\n\n            delete this.timer;\n\n            if ( ! type ) {\n                this.$emit('close');\n            }\n\n            if ( type === 'scroll' ) {\n                this.$emit('scrollClose');\n            }\n\n            if ( type === 'multi' ) {\n                this.$emit('multiClose');\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = false);\n        },\n\n        pause()\n        {\n            this.prevent = true;\n        },\n\n        unpause()\n        {\n            this.prevent = false;\n        },\n\n        onCloseEvent(uid)\n        {\n            if ( this.multiClose && this.tempValue && this._.uid !== uid ) {\n                this.close('multi');\n            }\n        },\n\n        refreshVisible()\n        {\n            Dom.find(this.$el).css(null);\n\n            if ( ! this.tempValue ) {\n                return this.stopRefreshInterval();\n            }\n\n            this.startRefreshInterval();\n\n            delete this.passedOffset;\n        },\n\n        startRefreshInterval()\n        {\n            this.refresh = setInterval(this.updatePosition, \n                1000 / this.framerate);\n\n            let onReady = () => {\n\n                if ( this.listen ) {\n                    Dom.find(this.target).addClass('n-open');\n                }\n\n                Dom.find(this.$el).addClass('n-ready');\n\n                if ( this.NPopover ) {\n                    this.NPopover.pause();\n                }\n\n                Event.fire('NPopover:close', this._.uid);\n            }\n\n            Any.delay(onReady, 100);\n        },\n\n        stopRefreshInterval()\n        {\n            clearInterval(this.refresh);\n\n            if ( this.NPopover ) {\n                this.NPopover.unpause();\n            }\n\n            if ( this.listen ) {\n                Dom.find(this.target).removeClass('n-open');\n            }\n\n            Dom.find(this.$el).removeClass('n-ready');\n        },\n\n        isSameOffset(offset)\n        {\n            if ( ! this.passedOffset ) {\n                return false;\n            }\n\n            let rainbow = Arr.each(['x', 'y'], (key) => {\n                return offset[key] === this.passedOffset[key];\n            });\n\n            return ! Arr.has(rainbow, false);\n        },\n\n        isSameSize(size)\n        {\n            if ( ! this.passedSize ) {\n                return false;\n            }\n\n            let rainbow = Arr.each(['width', 'height'], (key) => {\n                return size[key] === this.passedSize[key];\n            });\n\n            return ! Arr.has(rainbow, false);\n        },\n\n        getTargetHorizontal(position, fallback = null)\n        {\n            let targetRect = this.target.getBoundingClientRect();\n\n            if ( this.trigger === 'context' ) {\n                targetRect = {\n                    top: this.clientY, left: this.clientX, width: 2, height: 2\n                };\n            }\n\n            let windowRect = this.$el.getBoundingClientRect();\n\n            if ( this.width === -1 ) {\n                windowRect.width = targetRect.width;\n            }\n\n            let posY = {\n\n                // Set above the tagret element\n                start: targetRect.top - windowRect.height,\n                \n                // Set at bottom of target element\n                end: targetRect.top + targetRect.height,\n\n            };\n\n            let posX = {\n\n                // Set on the left of target element\n                start: targetRect.left,\n\n                // Set into the center of the target element\n                center: targetRect.left + (targetRect.width * 0.5) - \n                    (windowRect.width * 0.5),\n\n                // Set on the right of the target element\n                end: targetRect.left + targetRect.width - \n                    windowRect.width,\n\n            };\n\n            let offset = { x: 0, y: 0 };\n\n            if ( position === 'top-start' ) {\n                offset = { x: posX.start, y: posY.start };\n            }\n\n            if ( position === 'top-center' ) {\n                offset = { x: posX.center, y: posY.start };\n            }\n\n            if ( position === 'top-end' ) {\n                offset = { x: posX.end, y: posY.start };\n            }\n\n            if ( position === 'bottom-start' ) {\n                offset = { x: posX.start, y: posY.end };\n            }\n\n            if ( position === 'bottom-center' ) {\n                offset = { x: posX.center, y: posY.end };\n            }\n\n            if ( position === 'bottom-end' ) {\n                offset = { x: posX.end, y: posY.end };\n            }\n\n            let inverse = this.position;\n\n            if ( position.match(/^(top)\\-/) ) {\n                inverse = inverse.replace(/^(top)\\-/, 'bottom-');\n            }\n\n            if ( position.match(/^(bottom)\\-/) ) {\n                inverse = inverse.replace(/^(bottom)\\-/, 'top-');\n            }\n\n            let broken = offset.y + windowRect.height > \n                window.innerHeight || offset.y < 0;\n\n            if ( this.scrollClose && broken && ! fallback ) {\n                return this.getTargetHorizontal(inverse, offset);\n            }\n\n            if ( fallback && broken ) {\n                offset = fallback;\n            }\n\n            if ( offset.y < 0 ) {\n                offset.y = 0;\n            }\n        \n            if ( offset.y + windowRect.height > window.innerHeight ) {\n                offset.y = window.innerHeight - windowRect.height;\n            }\n\n            if ( offset.x < 0 ) {\n                offset.x = 0;\n            }\n        \n            if ( offset.x + windowRect.width > window.innerWidth ) {\n                offset.x = window.innerWidth - windowRect.width -\n                    (window.innerWidth - document.body.clientWidth);\n            }\n\n            return offset;\n        },\n\n        getTargetVertical(position, fallback = null)\n        {\n            let targetRect = this.target.getBoundingClientRect();\n\n            if ( this.trigger === 'context' ) {\n                targetRect = {\n                    top: this.clientY, left: this.clientX, width: 2, height: 2\n                };\n            }\n\n            let windowRect = this.$el.getBoundingClientRect();\n\n            if ( this.width === -1 ) {\n                windowRect.width = targetRect.width;\n            }\n            \n            let posY = {\n\n                // Set at top edge of the target element\n                start: targetRect.top,\n\n                // Set at the middle of the target element\n                center: targetRect.top + (targetRect.height * 0.5) - \n                    (windowRect.height * 0.5),\n\n                // Ste at the bottom of the target elemnent\n                end: targetRect.top + targetRect.height - \n                    windowRect.height,\n\n            };\n\n            let posX = {\n\n                // Set to the left of the target element\n                start: targetRect.left - windowRect.width,\n\n                // Set to the right of the target element\n                end: targetRect.left + targetRect.width,\n\n            };\n\n            let offset = { x: 0, y: 0 };\n\n            if ( position === 'left-start' ) {\n                offset = { x: posX.start, y: posY.start };\n            }\n\n            if ( position === 'left-center' ) {\n                offset = { x: posX.start, y: posY.center };\n            }\n\n            if ( position === 'left-end' ) {\n                offset = { x: posX.start, y: posY.end };\n            }\n\n            if ( position === 'right-start' ) {\n                offset = { x: posX.end, y: posY.start };\n            }\n\n            if ( position === 'right-center' ) {\n                offset = { x: posX.end, y: posY.center };\n            }\n\n            if ( position === 'right-end' ) {\n                offset = { x: posX.end, y: posY.end };\n            }\n\n            let inverse = this.position;\n\n            if ( position.match(/^(left)\\-/) ) {\n                inverse = inverse.replace(/^(left)\\-/, 'right-');\n            }\n\n            if ( position.match(/^(right)\\-/) ) {\n                inverse = inverse.replace(/^(right)\\-/, 'left-');\n            }\n\n            let broken = offset.x + windowRect.width > \n                window.innerWidth || offset.x < 0;\n\n            if ( this.scrollClose && broken && ! fallback ) {\n                return this.getTargetVertical(inverse, offset);\n            }\n\n            if ( fallback && broken ) {\n                offset = fallback;\n            }\n\n            if ( offset.y < 0 ) {\n                offset.y = 0;\n            }\n        \n            if ( offset.y + windowRect.height >  window.innerHeight ) {\n                offset.y = window.innerHeight - windowRect.height;\n            }\n\n            if ( offset.x < 0 ) {\n                offset.x = 0;\n            }\n        \n            if ( offset.x + windowRect.width > window.innerWidth ) {\n                offset.x = window.innerWidth - windowRect.width -\n                    (window.innerWidth - document.body.clientWidth);\n            }\n\n            return offset;\n        },\n\n        getTargetOffset()\n        {\n            let position = this.position;\n\n            if ( position.match(/^(top|bottom)\\-/) ) {\n                return this.getTargetHorizontal(position);\n            }\n\n            if ( position.match(/^(left|right)\\-/) ) {\n                return this.getTargetVertical(position);\n            }\n\n            return targetRect;\n        },\n\n        updatePosition()\n        {\n            let size = this.$el.getBoundingClientRect(),\n                rect = this.target.getBoundingClientRect();\n\n            let isSameSize = this.isSameSize(size);\n\n            if ( isSameSize && this.isSameOffset(rect) ) {\n                return;\n            }\n\n            if ( ! this.timer ) {\n                this.timer = Date.now();\n            }\n\n            this.passedSize = size;\n\n            if ( this.width ) {\n                Dom.find(this.$el).css({ width: this.width + 'px' });\n            }\n\n            let offset = this.getTargetOffset();\n\n            let scroll = Dom.find(document.body)\n                .scroll();\n\n            let style = {\n                'z-index':  window.zIndex++,\n                'top':      Math.round(offset.y + scroll.top) + 'px', \n                'left':     Math.round(offset.x + scroll.left) + 'px', \n            };\n\n            if ( this.width === -1 ) {\n                style.width = rect.width + 'px';\n            }\n\n            Dom.find(this.$el).css(style);\n\n            let isScrollClose = this.passedOffset && isSameSize &&\n                (Date.now() - this.timer) > 500;\n\n            if ( this.scrollClose && isScrollClose ) {\n                this.close('scroll');\n            }\n\n            this.passedOffset = rect;\n        },\n\n        onHover(event, el)\n        {\n            if ( this.disabled ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            let result = (!! target || !! source);\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            if ( ! result ) {\n                return this.$nextTick(this.close);\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onClick(event, el)\n        {\n            let keyCode = event.which === 1 ||\n                event.which === 0;\n\n            if ( this.disabled || this.tempValue || ! keyCode ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            let result = (!! target || !! source);\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onContext(event, el)\n        {\n            let keyCode = event.which === 3;\n\n            if ( this.disabled || this.tempValue || ! keyCode ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            this.clientX = event.clientX;\n            this.clientY = event.clientY;\n\n            let result = (!! target || !! source);\n\n            if ( result ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onExit(event, el)\n        {\n            if ( this.disabled || ! this.tempValue ) {\n                return;\n            }\n\n            if ( !! Dom.find(el).closest(this.$el) ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target);\n\n            if ( this.trigger !== 'context' && !! target ) {\n                return;\n            }\n\n            this.close();\n        }\n\n    },\n\n    renderBody()\n    {\n        if ( this.$slots.raw ) {\n            return this.$slots.raw();\n        }\n\n        return (\n            <div class=\"n-popover__frame\">\n                { this.$slots.header &&\n                    <div class=\"n-popover__header\">\n                        { this.$slots.header() }\n                    </div>\n                }\n                <div class=\"n-popover__body\">\n                    { this.$slots.default() }\n                </div>\n                { this.$slots.footer &&\n                    <div class=\"n-popover__footer\">\n                        { this.$slots.footer() }\n                    </div>\n                }\n            </div>\n        );\n    },\n\n    render()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let classList = [\n            'n-popover',\n            'n-popover--' + this.type,\n            'n-popover--' + this.size,\n            'n-popover--' + this.position,\n        ];\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        let viewBody = this.modelValue;\n\n        if ( Any.isNull(this.modelValue) ) {\n            viewBody = this.tempValue;\n        }\n\n        return (\n            <div class={classList}>\n                { viewBody && this.ctor('renderBody')() }\n            </div>\n        );\n    }\n\n}\n","export default {\n\n    name: 'NPopoverGroup',\n\n    inject: {\n        NPopover: {\n            default: undefined\n        }\n    },\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n\n    },\n\n    computed: {\n\n        tempSize()\n        {\n            if ( this.NPopover ) {\n                return this.NPopover.size;\n            }\n\n            return this.size;\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-popover-group',\n            'n-popover-group--' + this.tempSize,\n        ];\n\n        return (\n            <label class={classList}>\n                <span>{ this.$slots.default() }</span>\n            </label>\n        );\n    }\n\n}\n","import { Obj, Arr, Any, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPopoverOption',\n\n    inject: {\n        NPopover: {\n            default: undefined\n        }\n    },\n\n    props: {\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        focus: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        active: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'after';\n            },\n            type: [String]\n        },\n\n        image: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        imagePosition: {\n            default()\n            {\n                return 'before';\n            },\n            type: [String]\n        },\n\n        clickClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        }\n\n\n    },\n\n    computed: {\n\n        tempSize()\n        {\n            if ( this.NPopover ) {\n                return this.NPopover.size;\n            }\n\n            return this.size;\n        }\n\n    },\n\n    methods: {\n\n        onClick(event)\n        {\n            if ( this.NPopover && this.clickClose ) {\n                this.NPopover.close();\n            }\n\n            this.$emit('fakeclick', event);\n        }\n\n    },\n\n    renderImage()\n    {\n        if ( ! this.image ) {\n            return null;\n        }\n\n        let classList = [\n            'n-image',\n            'n-image--' + this.imagePosition,\n        ];\n\n        return (<img class={classList} src={this.image} />);\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        let classList = [\n            'n-icon', \n            'n-icon--' + this.iconPosition,\n        ];\n\n        classList.push(this.icon);\n\n        return (<i class={classList}></i>);\n    },\n\n    renderContent()\n    {\n        if ( this.$slots.raw ) {\n            return this.$slots.raw();\n        }\n\n        return (\n            <span>{ this.$slots.default() }</span>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-popover-option',\n            'n-popover-option--' + this.type,\n            'n-popover-option--' + this.tempSize,\n        ];\n\n        if ( this.active ) {\n            classList.push('n-active');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( ! this.disabled ) {\n            props.onClick = this.onClick;\n        }\n\n        if ( this.disabled ) {\n            props.disabled = true;\n        }\n\n        return (\n            <a class={classList} href=\"javascript:void(0)\" {...props}>\n                { this.ctor('renderImage')() }\n                { this.ctor('renderContent')() }\n                { this.ctor('renderIcon')() }\n            </a>\n        );\n    }\n\n}\n","import Popover from './src/popover/popover';\nimport PopoverGroup from './src/popover-group/popover-group';\nimport PopoverOption from './src/popover-option/popover-option';\n\nexport default function (App) {\n    App.component(Popover.name, Popover);\n    App.component(PopoverGroup.name, PopoverGroup);\n    App.component(PopoverOption.name, PopoverOption);\n}","import { UUID, Num, Arr, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NForm',\n\n    inheritAttrs: false,\n\n    model: {\n        prop: 'form'\n    },\n\n    props: {\n\n        dom: {\n            default()\n            {\n                return 'div';\n            },\n            type: [String]\n        },\n\n        form: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        errors: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'vertical';\n            },\n            type: [String]\n        },\n\n        prevent: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        forceChange: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        forceErrors: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        classList()\n        {\n            if ( ! this.$attrs.class ) {\n                return [];\n            }\n\n            return Any.isArray(this.$attrs) ? this.$attrs.class :\n                [this.$attrs.class];\n        }\n\n    },\n\n    methods: {\n\n        onSubmit(event)\n        {\n            if ( this.prevent ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            if ( Dom.find(event.target).is('input') ) {\n                this.$emit('submit', event);\n            }\n\n            return this.prevent;\n        },\n\n        addItem(item)\n        {\n            Arr.add(this.elements, item, {\n                uid: item.uid\n            });\n        },\n\n        removeItem(item)\n        {\n            Arr.remove(this.elements,{\n                uid: item.uid\n            });\n        },\n\n        emitChange(form)\n        {\n            this.$emit('change');\n        },\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            elements: []\n        };\n    },\n\n    provide()\n    {\n        return {\n            NForm: this\n        };\n    },\n\n    mounted()\n    {\n        Any.delay(this.ctor('ready'), 1000);\n    },\n\n    ready()\n    {\n        this.$watch('form', this.emitChange, { deep: true });\n    },\n\n    render()\n    {\n        let classList = [\n            'n-form',\n            'n-form--' + this.align,\n        ];\n\n        let attrs = Obj.except(this.$attrs, ['class', 'onChange', 'onSubmit'], {\n            class: this.cmer(classList)\n        });\n\n        attrs['onSubmit'] = (e) => {\n            return false;\n        }\n\n        return h(this.dom, { ...attrs }, [\n            this.$slots.default && this.$slots.default()\n        ]);\n    }\n\n}\n","export default {\n\n    name: 'NFormGroup',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            }\n        },\n\n        size: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'vertical';\n            },\n            type: [String]\n        },\n\n        collapse: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltipPosition: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        collapseGroup()\n        {\n            this.$emit('update:modelValue', this.tempValue = ! this.tempValue);\n        }\n\n    },\n\n    renderCollapse()\n    {\n        if ( ! this.collapse ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__collapse\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__icon\">\n                <i class={['n-icon', this.icon]}></i>\n            </div>\n        );\n    },\n\n    renderText()\n    {\n        let textHtml = (\n            <div class=\"n-form-group__text\">\n                <span>{ this.label }</span>\n            </div>\n        );\n\n        return (\n            <div class=\"n-form-group__label\">\n                { [this.ctor('renderIcon')(), textHtml] } \n            </div>\n        );\n    },\n\n    renderAction()\n    {\n        if ( ! this.$slots.action ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__action\">\n                { this.$slots.action() }\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        return (\n            <div class=\"n-form-group__legend\" onClick={this.collapseGroup}>\n                { this.ctor('renderCollapse')() }\n                { this.ctor('renderText')() }\n                { this.ctor('renderAction')() }\n            </div>\n        );\n    },\n\n    renderTooltip()\n    {\n        if ( ! this.tooltip ) {\n            return null;\n        }\n\n        return (\n            <NPopover type=\"tooltip\" size=\"sm\" position={this.tooltipPosition}>\n                {this.tooltip}\n            </NPopover>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-form-group__body\">\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size || this.NForm.size;\n\n        let classList = [\n            'n-form-group', \n            'n-form-group--' + size,\n            'n-form-group--' + this.type,\n            'n-form-group--' + this.align, \n        ];\n\n        if ( this.collapse ) {\n            classList.push('n-form-group--collapse');\n        }\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        if ( this.$slots.action ) {\n            classList.push('n-action');\n        }\n\n        return (\n            <fieldset class={classList}>\n                { this.ctor('renderLabel')() }\n                { this.ctor('renderTooltip')() }\n                { this.ctor('renderBody')() }\n            </fieldset>\n        );\n    }\n}\n","import { Arr, Obj, Any, Dom, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NFormItem',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        },\n\n        NTabs: {\n            default: undefined\n        },\n\n        NTabsItem: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        prop: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltipPosition: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        tooltipWindow: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    methods: {\n\n        focusInput()\n        {\n            let $input = Dom.find(this.$el).find('input');\n\n            if ( !$input.empty() ) {\n                return $input.get(0).focus();\n            }\n\n            $input = Dom.find(this.$refs.input).childs();\n\n            if ( !$input.empty() ) {\n                return $input.get(0).click();\n            }\n\n            console.log('I dont belong here :o');\n        },\n\n        gotoInput()\n        {\n            let errors = this.NForm.errors;\n\n            if ( Any.isEmpty(errors) ) {\n                return;\n            }\n\n            if ( !this.NTabs || !this.NTabsItem ) {\n                return;\n            }\n\n            let keys = Any.keys(errors);\n\n            if ( Arr.first(keys) !== this.prop ) {\n                return;\n            }\n\n            this.NTabs.changeTab(this.NTabsItem.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID()\n        };\n    },\n\n    beforeMount()\n    {\n        if ( this.NForm ) {\n            this.NForm.addItem(this);\n        }\n    },\n\n    mounted()\n    {\n        if ( this.NForm ) {\n            this.NForm.$watch('errors', this.gotoInput, { deep: true });\n        }\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NForm ) {\n            this.NForm.removeItem(this);\n        }\n    },\n\n    renderTooltip()\n    {\n        if ( !this.tooltip && !this.$slots.tooltip ) {\n            return null;\n        }\n\n        let props = {\n            size: 'sm',\n            position: this.tooltipPosition,\n        };\n\n        return (\n            <NPopover type=\"tooltip\" {...props}>\n                {this.$slots.tooltip && this.$slots.tooltip() || this.tooltip}\n            </NPopover>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( !this.label && !this.$slots.label ) {\n            return null;\n        }\n\n        let labelHtml = (\n            <div class=\"n-form-item__label\">\n                <label onClick={this.focusInput}>\n                    {this.$slots.label && this.$slots.label() || this.label}\n                </label>\n            </div>\n        );\n\n        return [\n            labelHtml, this.ctor('renderTooltip')()\n        ]\n    },\n\n    renderError()\n    {\n        if ( !this.NForm || !Obj.has(this.NForm.errors, this.prop) ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-item__error\">\n                {Obj.get(this.NForm.errors, this.prop)}\n            </div>\n        );\n    },\n\n    renderInput()\n    {\n        return (\n            <div ref=\"input\" class=\"n-form-item__input\">\n                {this.$slots.default && this.$slots.default()}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size || Obj.get(this.NForm, 'size', 'md');\n\n\n        let classList = [\n            'n-form-item',\n            'n-form-item--' + size,\n        ]\n\n        return <div class={classList}>\n            {this.ctor('renderLabel')()}\n            {this.ctor('renderInput')()}\n            {this.ctor('renderError')()}\n        </div>;\n    }\n}\n","import Form from './src/form/form';\nimport FormGroup from './src/form-group/form-group';\nimport FormItem from './src/form-item/form-item';\n\nexport default function (App) {\n    App.component(Form.name, Form);\n    App.component(FormGroup.name, FormGroup);\n    App.component(FormItem.name, FormItem);\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NConfig',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        config: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        scope: {\n            default()\n            {\n                return this;\n            },\n            type: [Object]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        solveAwait(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( Any.isString(value) && value.match(/\\$\\$scope/) ) {\n                return Obj.has({ $$scope: this.scope }, value);\n            }\n\n            if ( Any.isString(value) && value.match(/\\$\\$value/) ) {\n                return Obj.has({ $$value: this.tempValue }, value);\n            }\n\n            return false;\n        },\n\n        solveValue(value, ...args)\n        {\n            if ( Any.isFunction(value) ) {\n                return value.apply(this.scope, [this.tempValue, ...args]);\n            }\n\n            if ( Any.isString(value) && value.match(/^\\$\\$scope/) ) {\n                return Obj.get({ $$scope: this.scope }, value);\n            }\n\n            if ( Any.isString(value) && value.match(/^\\$\\$value/) ) {\n                return Obj.get({ $$value: this.tempValue }, value);\n            }\n\n            return value;\n        },\n\n        solveEvent(value)\n        {\n            let scope = Obj.assign(this.scope, {\n                $configRefs: this.$refs\n            });\n\n            if ( Any.isFunction(value) ) {\n                return (...args) => value.apply(scope, args);\n            }\n\n            return value;\n        },\n\n        solveContent(value, ...args)\n        {\n            if ( Any.isFunction(value) ) {\n                return value.apply(this.scope, [this.$render, this.tempValue, ...args]);\n            }\n\n            return value;\n        },\n\n        prepareValue(veModel)\n        {\n            if ( ! veModel.path ) {\n                return veModel.fallback;\n            }\n\n            if ( ! Obj.has(this.tempValue, veModel.path) ) {\n                this.deepSet(this.tempValue, veModel.path, veModel.fallback);\n            }\n\n            return Obj.get(this.tempValue, veModel.path);\n        },\n\n        inputClosure(veModel, closure = null)\n        {\n            if ( ! veModel.path ) {\n                return () => null;\n            }\n\n            return (value) => {\n\n                if ( closure ) {\n                    closure(value, this.tempValue);\n                }\n\n                this.deepSet(this.tempValue, veModel.path, value);\n            };\n        },\n\n        deepSet(obj, keys, val)\n        {\n            keys = (typeof keys === 'string') ?\n                keys.split('.') : keys;\n\n            let key = keys.shift();\n\n            if ( obj[key] === undefined || obj[key] === null ) {\n                Obj.set(obj, key, {});\n            }\n\n            if ( keys.length === 0 ) {\n                return Obj.set(obj, key, val);\n            }\n\n            return this.deepSet(obj[key], keys, val);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    renderLayer(source)\n    {\n        if ( ! Any.isPlain(source) ) {\n            return source;\n        }\n\n        return Arr.each(source, (setup, component) => {\n\n            component = component.replace(/:.*?$/, '');\n\n            // Set setup defaults\n            setup = Obj.assign({\n                vIf: true, vShow: true, vAwait: null, class: null, $on: {}, $props: {}, $attrs: {}\n            }, setup);\n\n            if ( ! this.solveAwait(setup.vAwait) ) {\n                return null;\n            }\n\n            if ( ! this.solveValue(setup.vIf) ) {\n                return null;\n            }\n\n            if ( ! this.solveValue(setup.vShow) ) {\n                setup.style = { display: 'none' };\n            }\n\n            // Build default model\n            let veModel = Obj.assign({\n                prop: 'modelValue', fallback: null\n            }, setup.model);\n\n            // Delete model from setup\n            delete setup.model;\n\n            // Normalize props\n            setup.$props = this.solveValue(setup.$props);\n\n            // Normalize class\n            setup.class = this.solveValue(setup.class);\n\n            // Solve props\n            Obj.map(setup.$props, (value) => this.solveValue(value));\n\n            // Normalize attrs\n            setup.$attrs = this.solveValue(setup.$attrs);\n\n            // Solve attrs\n            Obj.map(setup.$attrs, (value) => this.solveValue(value));\n\n            // Solve events\n            Obj.map(setup.$on, (value) => this.solveEvent(value));\n\n            if ( veModel.path ) {\n\n                // Override input event\n                setup['onUpdate:modelValue'] = this.inputClosure(veModel, setup.$on.input);\n\n                // Set prop in value or get fallback\n                setup.$props[veModel.prop] = this.prepareValue(veModel);\n            }\n\n            Obj.assign(setup, setup.$props);\n            delete setup.$props;\n\n            Obj.assign(setup, setup.$attrs);\n            delete setup.$attrs;\n\n            Obj.assign(setup, setup.$on);\n            delete setup.$on;\n\n            let content = setup.content;\n            delete setup.content;\n\n            delete setup.vIf;\n            delete setup.vShow;\n            delete setup.vAwait;\n\n            // Solve content if is functional\n            let slots = this.solveContent(content, setup);\n\n            let domtypes = [\n                'div', 'span', 'a'\n            ];\n\n            let resolved = component;\n\n            if ( ! Arr.has(domtypes, resolved) ) {\n                resolved = resolveComponent(component);\n            }\n\n            return h(resolved, setup, this.ctor('renderLayer')(slots));\n        });\n    },\n\n    render()\n    {\n        return this.ctor('renderLayer')(this.config)[0];\n    }\n\n}","import { Arr, Obj, Str, Any } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NConfigNext',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        config: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        scope: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue: function (value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        propAwait(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( ! Any.isArray(value) ) {\n                value = [value];\n            }\n\n            let result = Arr.each(value, (state) => {\n                return this.getState(state, true);\n            });\n\n            return ! Arr.has(result, false);\n        },\n\n        propExists(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( ! Any.isArray(value) ) {\n                value = [value];\n            }\n\n            let result = Arr.each(value, (state) => {\n                return this.getState(state, false);\n            });\n\n            return ! Arr.has(result, false);\n        },\n\n        getState(value, exists = true)\n        {\n            if ( Any.isFunction(value) ) {\n                return !! this.solveInput(value);\n            }\n\n            if ( ! Any.isString(value) ) {\n                return !! value;\n            }\n\n            if ( ! value.match(/(\\$scope|\\$model|\\$global)/) ) {\n                return !! value;\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            if ( exists ) {\n                return Obj.get(sources, value, undefined) === undefined;\n            }\n\n            return !! Obj.get(sources, value);\n        },\n\n        toPropKey(value)\n        {\n            let splits = value.replace(/^!/, '').split('-');\n\n            value = Arr.each(splits, (split) => {\n                return Str.ucfirst(split);\n            });\n\n            return Str.lcfirst(value.join(''));\n        },\n\n        toEventKey(value)\n        {\n            if ( ! value.match(/^on/) ) {\n                value = 'on-' + value;\n            }\n\n            let splits = value.split('-');\n\n            value = Arr.each(splits, (split) => {\n                return Str.ucfirst(split);\n            });\n\n            return Str.lcfirst(value.join(''));\n        },\n\n        solveInput(cb, fallback)\n        {\n            return cb.call(this.scope, this.tempValue, fallback);\n        },\n\n        solveContext(cb)\n        {\n            if ( ! Any.isFunction(cb) ) {\n                return () => console.error('Raw suffix (!) only allowed on functions');\n            }\n\n            return (...args) => cb.call(this.scope, ...args);\n        },\n\n        getProp(key, value)\n        {\n            if ( key.match(/^!/) ) {\n                return this.solveContext(value);\n            }\n\n            if ( Any.isFunction(value) ) {\n                return this.solveInput(value);\n            }\n\n            if ( ! Any.isString(value) ) {\n                return value;\n            }\n\n            if ( ! value.match(/(\\$scope|\\$model|\\$global)/) ) {\n                return value;\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            return Obj.get(sources, value);\n        },\n\n        getInput(prop, fallback)\n        {\n            if ( Any.isFunction(prop) ) {\n                return this.solveInput(prop, fallback);\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            if ( Obj.get(sources, prop, -1337) === -1337 ) {\n                Obj.set(sources, prop, fallback);\n            }\n\n            return Obj.get(sources, prop);\n        },\n\n        setInput(prop, value)\n        {\n            if ( Any.isFunction(prop) ) {\n                return console.error('NConfigNew: Bind with function is not allowed!');\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            Obj.set(sources, prop, value);\n        }\n\n    },\n\n    renderSetup(setup, alias)\n    {\n        if ( ! Any.isPlain(setup) ) {\n            return setup;\n        }\n\n        if ( ! this.propExists(setup['vIf']) ) {\n            return null;\n        }\n\n        if ( ! this.propAwait(setup['vAwait']) ) {\n            return null;\n        }\n\n        let defaults = {\n            binds: {}, props: {}, events: {}, content: {}\n        };\n\n        let defaultsBind = {\n            value: '', fallback: null\n        };\n\n        setup = Obj.assign(defaults, setup);\n\n        let binds = {};\n\n        Obj.each(setup['binds'], (value, key) => {\n\n            if ( Any.isString(value) ) {\n                value = { value: value };\n            }\n\n            binds[key] = Obj.assign(defaultsBind, value);\n        });\n\n        let events = {};\n\n        Obj.each(setup['events'], (value, key) => {\n            events[this.toEventKey(key)] = this.solveContext(value);\n        });\n\n        let props = {};\n\n        Obj.each(setup['props'], (value, key) => {\n            props[this.toPropKey(key)] = this.getProp(key, value);\n        });\n\n        props = Obj.assign(props, events);\n\n        Obj.each(binds, (value, key) => {\n\n            let updateKey = 'onUpdate:' + key;\n\n            props[this.toEventKey(updateKey)] = (input) => {\n                this.setInput(value.value, input);\n            };\n\n            props[this.toPropKey(key)] = this.getInput(value.value,\n                value.fallback);\n        });\n\n        let element = alias.replace(/:.*?$/, '');\n\n        let component = null;\n\n        try {\n            component = resolveComponent(element);\n        } catch (e) {\n            component = element;\n        }\n\n        if ( Any.isEmpty(component) ) {\n            return null;\n        }\n\n        if ( ! this.propExists(setup['vShow']) ) {\n            props.style = \"display: none;\";\n        }\n\n        return h(component, props, () => {\n            return Arr.each(setup.content, (value, key) => this.ctor('renderSetup')(value, key));\n        });\n    },\n\n    render()\n    {\n        return Arr.each(this.config, (value, key) => this.ctor('renderSetup')(value, key));\n    }\n\n}","import NConfig from \"./src/config/config\";\nimport NConfigNext from \"./src/config/config-next\";\n\nexport default function(App) {\n    App.component(NConfig.name, NConfig);\n    App.component(NConfigNext.name, NConfigNext);\n}\n","import { Obj } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NButton',\n\n    props: {\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        link: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        square: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'before';\n            },\n            type: [String]\n        },\n\n        buttonType: {\n            default()\n            {\n                return 'button';\n            },\n            type: [String]\n        },\n\n        nativeType: {\n            default()\n            {\n                return 'button';\n            },\n            type: [String]\n        }\n\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        let classList = [\n            'n-icon', \n            'n-icon--' + this.iconPosition,\n        ];\n\n        classList.push(this.icon);\n\n        return (<i class={classList}></i>);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-button',\n            'n-button--' + this.size,\n            'n-button--' + this.type,\n        ];\n\n        if ( this.icon ) {\n            classList.push('n-button--icon');\n        }\n\n        if ( this.link ) {\n            classList.push('n-button--link');\n        }\n\n        if ( this.square ) {\n            classList.push('n-button--square');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            class: classList\n        };\n\n        if ( this.disabled ) {\n            props.disabled = true;\n        }\n\n        let innerHtml = [];\n\n        if ( this.iconPosition === 'before' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        if ( this.$slots.default && ! this.square ) {\n            innerHtml.push(<span>{ this.$slots.default() }</span>);\n        }\n\n        if ( this.iconPosition === 'after' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        return h(this.nativeType, props, innerHtml);\n    }\n\n}\n","export default {\n\n    name: 'NButtonGroup',\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-button-group',\n            'n-button-group--' + this.size\n        ]\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n\n}\n","import Button from './src/button/button';\nimport ButtonGroup from './src/button-group/button-group';\n\nexport default function (App) {\n    App.component(Button.name, Button);\n    App.component(ButtonGroup.name, ButtonGroup);\n}\n","import { Str, Arr, Obj, Any, Locale, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSelect',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-center';\n            },\n            type: [String]\n        },\n\n        multiple: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        collapse: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return Locale.trans('Please select');\n            },\n            type: [String]\n        },\n\n        emptyText: {\n            default()\n            {\n                return 'No items';\n            },\n            type: [String]\n        },\n\n        undefinedText: {\n            default()\n            {\n                return 'Undefined item';\n            },\n            type: [String]\n        },\n\n        collapseText: {\n            default()\n            {\n                return '+:count item|+:count items';\n            },\n            type: [String]\n        },\n\n        allowCreate: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array, Object]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$index';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsDisabled: {\n            default()\n            {\n                return 'null';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        empty()\n        {\n            return Any.isEmpty(this.tempValue);\n        },\n\n        custom()\n        {\n            let result = Arr.filter(this.elements, (element) => {\n\n                if ( Any.isArray(this.tempValue) ) {\n                    return Arr.has(this.tempValue, element.value);\n                }\n\n                return element.value === this.tempValue;\n            });\n\n            return result.length === 0;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempClear: this.clearValue,\n            focus: false,\n            search: '',\n            index: -1,\n            elements: [],\n            searched: []\n        };\n    },\n\n    provide()\n    {\n        return {\n            NSelect: this\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( ! this.multiple && Any.isArray(value) ) {\n                value = null;\n            }\n\n            if ( this.multiple && ! Any.isArray(value) ) {\n                value = [];\n            }\n\n            this.tempValue = value;\n        },\n\n        search()\n        {\n            this.searchOptions();\n        },\n\n        focus()\n        {\n            this.$nextTick(this.scrollToClosest);\n        },\n\n    },\n\n    methods: {\n\n        clear(event = null)\n        {\n            if ( event ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            this.focusInput();\n\n            this.$emit('update:modelValue', \n                this.tempValue = Arr.clone(this.tempClear));\n        },\n\n        addOption(option)\n        {\n            Arr.add(this.elements, option, \n                { tempValue: option.tempValue });\n        },\n\n        removeOption(option)\n        {\n            Arr.remove(this.elements, \n                { tempValue: option.tempValue });\n        },\n\n        resetInput()\n        {\n            this.index = -1;\n            this.search = '';\n        },\n\n        focusInput(event = null)\n        {\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            this.$refs.input.focus();\n        },\n\n        onFocusInput()\n        {\n            if ( ! this.focus ) {\n                this.$refs.popover.open();\n            }\n            \n            clearInterval(this.refresh);\n        },\n\n        onInputInput(event)\n        {\n            this.search = event.target.value;\n        },\n\n        onKeydownInput(event)\n        {\n            if ( ! this.focus ) {\n                return this.onFocusInput();\n            }\n\n            if ( event.which === 13 ) {\n                this.createOrToggle();\n            }\n\n            if ( event.which === 38 ) {\n                this.selectPrev();\n            }\n\n            if ( event.which === 40 ) {\n                this.selectNext();\n            }\n        },\n\n        searchOptions()\n        {\n            this.index = -1;\n\n            if ( Any.isEmpty(this.search) ) {\n                return this.searched = this.elements;\n            }\n\n            let searchRegex = new RegExp(this.search, 'i');\n\n            let searched = Arr.filter(this.elements, (option) => {\n                return option.label.match(searchRegex);\n            });\n\n            this.searched = searched;\n        },\n\n        toggleOption(value, event = null)\n        {\n            if ( Any.isEmpty(value) ) {\n                return;\n            }\n\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            let tempValue = this.tempValue;\n\n            if ( this.multiple ) {\n                this.focusInput();\n            }\n\n            if ( ! this.multiple ) {\n                tempValue = value;\n            }\n\n            if ( this.multiple ) {\n                Arr.toggle(tempValue, value);\n            }\n\n            this.$refs.popover.close();\n\n            let denyUpdate = this.tempValue === tempValue;\n\n            if ( this.multiple && ! Any.isArray(this.modelValue) ) {\n                denyUpdate = false;\n            }\n\n            if ( ! this.multiple && Any.isArray(this.modelValue) ) {\n                denyUpdate = false;\n            }\n\n            if ( denyUpdate ) {\n                return;\n            }\n\n            this.$emit('update:modelValue',\n                this.tempValue = tempValue);\n        },\n\n        getOptionLabel(value)\n        {\n            let option = Arr.find(this.elements, \n                { tempValue: value });\n\n            if ( ! option && this.allowCreate ) {\n                return value;\n            }\n\n            if ( ! option && ! this.allowCreate ) {\n                return this.trans(this.undefinedText);\n            }\n\n            return option.tempLabel;\n        },\n\n        selectPrev()\n        {\n            let newIndex = this.index - 1;\n\n            if ( newIndex < 0 ) {\n                newIndex = this.searched.length - 1;\n            }\n\n            this.index = newIndex;\n\n            this.scrollToCurrent();\n        },\n\n        selectNext()\n        {\n            let newIndex = this.index + 1;\n\n            if ( newIndex > this.searched.length - 1 ) {\n                newIndex = 0;\n            }\n\n            this.index = newIndex;\n\n            this.scrollToCurrent();\n        },\n\n        createOrToggle()\n        {\n            if ( this.allowCreate && this.search ) {\n                return this.createOption();\n            }\n            \n            let selected = Arr.get(this.searched, \n                this.index);\n\n            if ( this.searched.length === 1 ) {\n                selected = Arr.first(this.searched);\n            }\n\n            if ( ! selected || selected.disabled ) {\n                return;\n            }\n\n            this.toggleOption(selected.tempValue);\n        },\n\n        createOption()\n        {\n            this.toggleOption(this.search);\n\n            this.search = '';\n        },\n\n        scrollToCurrent()\n        {\n            if ( ! this.focus ) {\n                return;\n            }\n\n            let selected = Arr.get(this.searched, \n                this.index);\n\n            if ( ! selected || ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollIntoView(\n                `[data-option=\"${selected._.uid}\"]`);\n        },\n\n        scrollToClosest()\n        {\n            if ( ! this.focus ) {\n                return;\n            }\n\n            let value = this.tempValue;\n\n            if ( Any.isArray(this.tempValue) ) {\n                value = Arr.first(this.tempValue);\n            }\n\n            if ( ! value ) {\n                return;\n            }\n\n            let target = Arr.find(this.elements, { \n                tempValue: value\n             });\n\n            if ( ! target ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollIntoView(\n                `[data-option=\"${target._.uid}\"]`, 150);\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.multiple && ! Any.isArray(this.tempValue) ) {\n            this.tempValue = [];\n        }\n\n        if ( this.multiple && ! Any.isArray(this.clearValue) ) {\n            this.tempClear = [];\n        }\n\n        this.searchOptions();\n    },\n\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clear;\n        }\n\n        return (\n            <div class=\"n-select__clear\" {...props}>\n                <i class={nano.Icons.times}></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-select__angle\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n    },\n\n    renderLabelItem(value)\n    {\n        let classList = [\n            'n-select__item'\n        ];\n\n        let props = {\n            class: nano.Icons.times,\n        };\n\n        if ( ! this.disabled ) {\n            props.onMousedown = (event) => this.toggleOption(value, event);\n        }\n\n        let labelHtml = (\n            <span>{ this.getOptionLabel(value) }</span>\n        );\n\n        return (\n            <div class={classList}>\n                { [labelHtml, <i {...props}></i>] }\n            </div>\n        );\n    },\n\n    renderLabelCollapse()\n    {\n        let first = Arr.first(this.tempValue);\n\n        if ( ! first ) {\n            return null;\n        }\n\n        let firstHtml = this.ctor('renderLabelItem')(first);\n\n        if ( this.tempValue.length === 1 ) {\n            return firstHtml;\n        }\n\n        let count = this.tempValue.length - 1;\n\n        let collapseHtml = (\n            <div class=\"n-select__item\">\n                <span>{ this.choice(this.collapseText, count) }</span>\n            </div>\n        );\n\n        return [\n            firstHtml, collapseHtml\n        ];\n    },\n\n    renderLabelItems()\n    {\n        if ( ! Any.isArray(this.tempValue) ) {\n            return null;\n        }\n\n        if ( this.collapse ) {\n            return this.ctor('renderLabelCollapse')();\n        }\n\n        return Arr.each(this.tempValue, (value) => {\n            return this.ctor('renderLabelItem')(value);\n        });\n    },\n\n    renderMultiple()\n    {\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        let props = {\n            value: this.search,\n            placeholder: this.placeholder,\n            disabled: this.disabled,\n            onFocus: this.onFocusInput,\n            onInput: this.onInputInput,\n            onKeydown: this.onKeydownInput\n        };\n\n        if ( ! this.focus ) {\n            props.value = null;\n        }\n\n        if ( ! isEmptyValue ) {\n            props.placeholder = null;\n        }\n\n        let inputHtml = (\n            <div class=\"n-select__input\">\n                <input ref=\"input\" {...props} />\n            </div>\n        );\n\n        return [\n            this.ctor('renderLabelClear')(), \n            (\n                <div class=\"n-select__items\">\n                    { [this.ctor('renderLabelItems')(), inputHtml] }\n                </div>\n            ), \n            this.ctor('renderLabelAngle')()\n        ];\n    },\n\n    renderSingle()\n    {\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        let modelLabel = this.getOptionLabel(\n            this.tempValue);\n        \n        if ( isEmptyValue ) {\n            modelLabel = null;\n        }\n\n        let props = {\n            value: this.search,\n            placeholder: this.placeholder,\n            disabled: this.disabled,\n            onFocus: this.onFocusInput,\n            onInput: this.onInputInput,\n            onKeydown: this.onKeydownInput\n        };\n\n        if ( ! this.search && this.custom ) {\n            props.value = this.tempValue;\n        }\n\n        if ( ! this.focus ) {\n            props.value = modelLabel;\n        }\n\n        if ( ! isEmptyValue ) {\n            props.placeholder = modelLabel;\n        }\n\n        return [\n            this.ctor('renderLabelClear')(), \n            (\n                <div class=\"n-select__input\">\n                    <input ref=\"input\" {...props} />\n                </div>\n            ), \n            this.ctor('renderLabelAngle')()\n        ];\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-select__display'\n        ];\n\n        if ( this.multiple ) {\n            classList.push('n-multiple');\n        }\n\n        let displayHtml = this.ctor('renderSingle');\n\n        if ( this.multiple ) {\n            displayHtml = this.ctor('renderMultiple');\n        }\n\n        return (\n            <div class={classList}>{ displayHtml() }</div>\n        );\n    },\n\n    renderItems()\n    {\n        let emptyHtml = (\n            <div class=\"n-select__empty\">\n                <NEmptyIcon>{ this.trans(this.emptyText) }</NEmptyIcon>\n            </div>\n        );\n        \n        if ( ! this.searched.length ) {\n            return emptyHtml;\n        }\n\n        let options = Obj.each(this.searched, (option, index) => {\n            return option.ctor('renderOption')(index);\n        });\n\n        let props = {\n            relative: true, size: this.size\n        }\n\n        return (\n            <NScrollbar ref=\"scrollbar\" class=\"n-select__body\" {...props}>\n                { Obj.values(options) }\n            </NScrollbar>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            class: 'n-popover--select',\n            trigger: 'click',\n            width: -1,\n            listen: true,\n            size: this.size,\n            scrollClose: true,\n            disabled: this.disabled,\n            onClose: this.resetInput\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    renderOptions()\n    {\n        if ( Any.isEmpty(this.options) ) {\n            return this.$slots.default && this.$slots.default();\n        }\n\n        let optionRender = ($value, $index) => {\n\n            let props = {\n                label: Obj.get({ $value, $index }, this.optionsLabel, null),\n                value: Obj.get({ $value, $index }, this.optionsValue, null),\n            };\n\n            return (<NSelectOption {...props}></NSelectOption>);\n        };\n\n        return Obj.values(Obj.each(this.options, optionRender));\n    },\n\n    render()\n    {\n        let classList = [\n            'n-select',\n            'n-select--' + this.type,\n            'n-select--' + this.size,\n        ];\n\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        if ( isEmptyValue ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList} onClick={this.focusInput}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n                { this.ctor('renderOptions')() }\n            </div>\n        );\n    }\n\n}\n","import { Num, Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSelectOption',\n\n    inheritAttrs: false,\n\n    inject: {\n\n        NSelect: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        value: {\n            default()\n            {\n                return '';\n            }\n        },\n\n        label: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        valueProp: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        labelProp: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    computed: {\n\n        tempValue()\n        {\n            if ( Any.isEmpty(this.valueProp) ) {\n                return this.value;\n            }\n\n            return Obj.get(this.value, this.valueProp);\n        },\n\n        tempLabel()\n        {\n            if ( Any.isEmpty(this.labelProp) ) {\n                return this.label;\n            }\n\n            return Obj.get(this.value, this.labelProp);\n        }\n\n    },\n\n    mounted()\n    {\n        this.NSelect.addOption(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NSelect.removeOption(this);\n    },\n\n    methods: {\n\n        toggleItem(event) \n        {\n            event.preventDefault();\n\n            if ( event.which !== 1 ) {\n                return;\n            }\n\n            if ( this.disabled ) {\n                return;\n            }\n\n            this.NSelect.toggleOption(this.tempValue, \n                event);\n        },\n\n    },\n\n    renderOption(index)\n    {\n\n        let classList = [];\n\n        let isMultipleActive = this.NSelect.multiple && \n            Arr.has(this.NSelect.tempValue, this.tempValue);\n\n        if ( isMultipleActive ) {\n            classList.push('n-active');\n        }\n\n        let isSingleActive = ! this.NSelect.multiple && \n            this.NSelect.tempValue === this.tempValue;\n\n        if ( isSingleActive ) {\n            classList.push('n-active');\n        }\n\n        if ( this.NSelect.index === Num.int(index) ) {\n            classList.push('n-focus');\n        }\n\n        let props = {\n            'disabled': this.disabled,\n            'onMousedown': this.toggleItem,\n            'type': this.NSelect.type,\n            'clickClose': ! this.NSelect.multiple,\n        };\n\n        if ( isSingleActive || isMultipleActive ) {\n            props.icon = nano.Icons.checked;\n        }\n\n        // Required for scrolldown\n        props['data-option'] = this._.uid;\n\n        return (\n            <NPopoverOption class={classList} {...props}>\n                { this.$slots.default && this.$slots.default() || this.tempLabel }\n            </NPopoverOption>\n        );\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Select from './src/select/select';\nimport SelectOption from './src/select-option/select-option';\n\nexport default function (App) {\n    App.component(Select.name, Select);\n    App.component(SelectOption.name, SelectOption);\n}\n","import { Arr, Obj, Any, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCheckbox',\n\n    inject: {\n\n        NCheckboxGroup: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        value: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        allowUncheck: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        intermediate: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        global: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        tempComputed()\n        {\n            return ! this.global ? this.tempChecked :\n                this.NCheckboxGroup.globalChecked;\n        },\n\n        tempIntermediate()\n        {\n            return ! this.global ? this.intermediate :\n                this.NCheckboxGroup.globalIntermediate;\n        },\n\n        tempDisabled()\n        {\n            return ! this.global ? this.disabled :\n                this.NCheckboxGroup.globalDisabled;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(), tempChecked: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempChecked ) {\n                this.tempChecked = value;\n            }\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.NCheckboxGroup ) {\n            this.tempChecked = this.NCheckboxGroup.isChecked(this.value);\n        }\n    },\n\n    mounted()\n    {\n        if ( ! this.NCheckboxGroup || this.global ) {\n            return;\n        }\n\n        this.NCheckboxGroup.addCheckbox(this);\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NCheckboxGroup && ! this.global ) {\n            this.NCheckboxGroup.removeCheckbox(this);\n        }\n    },\n\n    methods: {\n\n        toggle()\n        {\n            this.$emit('update:modelValue', this.tempChecked = ! this.tempChecked);\n        },\n\n        check()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.checkCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        uncheck()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.uncheckCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = false);\n        },\n\n        eventShiftClick()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.shiftCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        eventLocalClick(event)\n        {\n            let canClick = ! this.tempDisabled || (this.allowUncheck &&\n                this.tempChecked);\n\n            if ( ! canClick ) {\n                return;\n            }\n\n            event.preventDefault();\n\n            if ( event.shiftKey ) {\n                return this.eventShiftClick();\n            }\n            \n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.toggleCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = ! this.tempChecked);\n        },\n\n        eventGlobalClick()\n        {\n            let canClick = ! this.tempDisabled || (this.allowUncheck &&\n                this.tempChecked);\n\n            if ( ! canClick ) {\n                return;\n            }\n\n            this.NCheckboxGroup.toggleAll();\n        },\n\n        updateFromGroup()\n        {\n            let checked = this.NCheckboxGroup.isChecked(this.value);\n\n            if ( this.tempChecked === checked ) {\n                return;\n            }\n            \n            this.$emit('update:modelValue', this.tempChecked = checked);\n        }\n\n    },\n\n    renderCheckbox()\n    {\n        let interHtml = this.$slots.intermediate &&\n            this.$slots.intermediate();\n\n        if ( ! interHtml )  {\n            interHtml = (<i class={nano.Icons.intermediate}></i>);\n        }\n\n        let checkHtml = this.$slots.checked &&\n            this.$slots.checked();\n\n        if ( ! checkHtml )  {\n            checkHtml = (<i class={nano.Icons.checked}></i>);\n        }\n\n        return (\n            <div class=\"n-checkbox__checkbox\">\n                { this.tempIntermediate ? interHtml : checkHtml }\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( ! this.cslo('default') && ! this.cslo('label') ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-checkbox__label\">\n                { this.$slots.default() || this.$slots.label() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size;\n\n        if ( this.NCheckboxGroup ) {\n            size = this.NCheckboxGroup.size;\n        }\n\n        let classList = [\n            'n-checkbox',\n            'n-checkbox--' + size,\n            'n-checkbox--' + this.type,\n        ];\n\n        if ( this.allowUncheck ) {\n            classList.push('n-uncheck');\n        }\n\n        if ( this.tempComputed ) {\n            classList.push('n-checked');\n        }\n\n        if ( this.tempIntermediate ) {\n            classList.push('n-intermediate');\n        }\n\n        if ( this.tempDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.tempComputed && this.allowUncheck ) {\n            Arr.remove(classList, 'n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( this.global ) {\n            props.onMousedown = this.eventGlobalClick;\n        }\n\n        if ( ! this.global ) {\n            props.onMousedown = this.eventLocalClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { [this.ctor('renderCheckbox')(), this.ctor('renderLabel')()] }\n            </div>\n        );\n    }\n\n}\n","import { Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCheckboxGroup',\n\n    provide()\n    {\n        return {\n            NCheckboxGroup: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'horizontal';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        globalChecked()\n        {\n            let checked = Arr.filter(this.elements, (checkbox) => {\n                return checkbox.tempChecked;\n            });\n\n            return checked.length === this.elements.length &&\n                this.elements.length !== 0;\n        },\n\n        globalIntermediate()\n        {\n            let checked = this.elements.filter((checkbox) => {\n                return checkbox.tempChecked;\n            });\n\n            return checked.length !== this.elements.length &&\n                checked.length !== 0 ;\n        },\n\n        globalDisabled()\n        {\n            return this.elements.length === 0;\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            index: -1,\n            elements: []\n        }\n    },\n\n    watch: {\n\n        value()\n        {\n            if ( this.tempValue = this.modelValue ) {\n                this.tempValue = this.modelValue;\n            }\n            \n        },\n\n    },\n\n    methods: {\n\n        addCheckbox(checkbox)\n        {\n            this.index = -1;\n\n            Arr.add(this.elements, checkbox, {\n                uid: checkbox.uid\n            });\n\n            this.elements = Arr.sort(this.elements, 'sort');\n        },\n\n        removeCheckbox(checkbox)\n        {\n            this.index = -1;\n            \n            Arr.remove(this.elements, {\n                uid: checkbox.uid\n            });\n        },\n\n        toggleCheckbox(checkbox, emit = true)\n        {\n            let index = Arr.findIndex(this.elements, {\n                uid: checkbox.uid\n            });\n\n            if ( ! checkbox.tempChecked ) {\n                this.index = index;\n            }\n\n            Arr.toggle(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        checkCheckbox(checkbox, emit = true)\n        {\n            Arr.add(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        uncheckCheckbox(checkbox, emit = true)\n        {\n            Arr.remove(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        shiftCheckbox(checkbox)\n        {\n            if ( this.index === -1 ) {\n                return this.toggleCheckbox(checkbox, false);\n            }\n\n            let index = Arr.findIndex(this.elements, {\n                uid: checkbox.uid\n            });\n\n            let checkboxes = this.elements.slice(this.index, index + 1);\n\n            if ( index < this.index ) {\n                checkboxes = this.elements.slice(index, this.index + 1);\n            }\n\n            this.index = -1;\n\n            Arr.each(checkboxes, (checkbox) => {\n                this.checkCheckbox(checkbox, false);\n            });\n\n            Arr.each(checkboxes, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        toggleAll()\n        {\n            this.globalChecked ? this.uncheckAll() : this.checkAll();\n        },\n\n        checkAll()\n        {\n            Arr.each(this.elements, (checkbox) => {\n                this.checkCheckbox(checkbox, false);\n            });\n\n            Arr.each(this.elements, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        uncheckAll()\n        {\n            Arr.each(this.elements, (checkbox) => {\n                this.uncheckCheckbox(checkbox, false);\n            });\n\n            Arr.each(this.elements, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        isChecked(value)\n        {\n            return Arr.has(this.tempValue, value);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-checkbox-group',\n            'n-checkbox-group--' + this.size,\n            'n-checkbox-group--' + this.align,\n        ];\n\n        return (\n            <div class={classList}>\n                {this.$slots.default()}\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Checkbox from './src/checkbox/checkbox';\nimport CheckboxGroup from './src/checkbox-group/checkbox-group';\n\nexport default function (App) {\n    App.component(Checkbox.name, Checkbox);\n    App.component(CheckboxGroup.name, CheckboxGroup);\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRadio',\n\n    model: {\n        prop: 'checked'\n    },\n\n    inject: {\n\n        NRadioGroup: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        value: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        checked: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return this._.uid;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempChecked: this.checked\n        };\n    },\n\n    watch: {\n\n        checked()\n        {\n            if ( this.checked !== this.tempChecked ) {\n                this.tempChecked = this.checked;\n            }\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.NRadioGroup ) {\n            this.tempChecked = this.NRadioGroup.isChecked(this.value);\n        }\n    },\n\n    mounted()\n    {\n        if ( this.NRadioGroup ) {\n            this.NRadioGroup.addRadio(this);\n        }\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NRadioGroup ) {\n            this.NRadioGroup.removeRadio(this);\n        }\n    },\n\n    methods: {\n\n        check()\n        {\n            if ( this.NRadioGroup ) {\n                this.NRadioGroup.checkRadio(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        updateFromGroup()\n        {\n            let checked = this.NRadioGroup.isChecked(this.value);\n\n            if ( this.tempChecked === checked ) {\n                return;\n            }\n            \n            this.$emit('update:modelValue', this.tempChecked = checked);\n        }\n\n    },\n\n    renderRadio()\n    {\n        return (\n            <div class=\"n-radio__radio\">\n                <span></span>\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( ! this.$slots.default && ! this.$slots.label ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-radio__label\">\n                { this.$slots.default() || this.$slots.label() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-radio',\n            'n-radio--' + this.size,\n            'n-radio--' + this.type,\n        ];\n\n        if ( this.tempChecked ) {\n            classList.push('n-checked');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.check;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderRadio')() }\n                { this.ctor('renderLabel')() }\n            </div>\n        );\n    }\n\n}\n","import { Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRadioGroup',\n\n    provide()\n    {\n        return {\n            NRadioGroup: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'horizontal';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            elements: []\n        }\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        },\n\n    },\n\n    methods: {\n\n        addRadio(radio)\n        {\n            Arr.add(this.elements, radio, {\n                uid: radio.uid\n            });\n        },\n\n        removeRadio(radio)\n        {\n            Arr.remove(this.elements, {\n                uid: radio.uid\n            });\n        },\n\n        checkRadio(radio)\n        {\n            this.tempValue = radio.value;\n            \n            Arr.each(this.elements, (radio) => {\n                radio.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        isChecked(value)\n        {\n            return this.tempValue === value;\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-radio-group',\n            'n-radio-group--' + this.size,\n            'n-radio-group--' + this.align,\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default() }\n            </div>\n        );\n    }\n\n}\n","import NRadio from './src/radio/radio';\nimport NRadioGroup from './src/radio-group/radio-group';\n\nexport default function (App) {\n    App.component(NRadio.name, NRadio);\n    App.component(NRadioGroup.name, NRadioGroup);\n}\n","import { Arr, Obj, Any, Str } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCascaderPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        clearValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        hover: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        valueProp: {\n            default()\n            {\n                return 'value';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        disabledProp: {\n            default()\n            {\n                return 'disabled';\n            },\n            type: [String]\n        },\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempHover: this.hover,\n        };\n    },\n\n    watch: {\n\n        modelValue(value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n        hover(value) {\n            if ( value !== this.tempHover ) {\n                this.tempHover = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        clearCascader()\n        {\n            this.$emit('update:modelValue', this.tempHover = \n                this.tempValue = this.clearValue);\n        },\n\n        onHover(cascade)\n        {\n            return (event) => this.hoverItem(cascade, event)\n        },\n\n        onSelect(cascade)\n        {\n            return (event) => this.selectItem(cascade, event)\n        },\n\n        hoverItem(cascade, event = null)\n        {\n            // Hover intend emulation\n            clearTimeout(this.delay);\n\n            let updateHover = () => {\n                this.$emit('update:hover', \n                    this.tempHover = cascade);\n            };\n\n            this.delay = setTimeout(updateHover, 130);\n        },\n\n        selectItem(cascade, event = null)\n        {\n            clearTimeout(this.clickTimer);\n\n            if ( ! this.lastclick ) {\n                this.lastclick = 0;\n            }\n\n            this.lastclick++;\n\n            let trigger = this.touch ? 'click' : \n                this.trigger ;\n            \n            this.clickTimer = setTimeout(() => \n                this.lastclick = 0, 240);\n\n            this.hoverTimer = setTimeout(() => \n                this.hoverItem(cascade), 240);\n\n            if ( this.lastclick === 1 && trigger === 'click' ) {\n                return this.hoverItem(cascade, event);\n            }\n\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            this.clickTimer = setTimeout(() => \n                this.fireSelectItem(cascade), 50);\n        },\n\n        fireSelectItem(cascade)\n        {\n            clearTimeout(this.hoverTimer);\n\n            this.lastclick = 0;\n\n            this.$emit('update:modelValue', \n                this.tempValue = cascade);\n        }\n\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-cascader-panel',\n            'n-cascader-panel--' + this.size\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderLabel')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        )\n    },\n\n    renderOption(item, cascade = [])\n    {\n        let value = Obj.get(item, this.valueProp);\n\n        let classList = [\n            'n-popover-option'\n        ];\n\n        if ( Arr.has(this.tempValue, item[this.valueProp]) ) {\n            classList.push('n-active');\n        }\n\n        let disabled = Obj.get(item, this.disabledProp, false);\n\n        if ( disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            size: this.size,\n            type: this.type,\n            clickClose: false\n        };\n\n        if ( Arr.last(this.tempValue) === value ) {\n            props.icon = nano.Icons.checked;\n        }\n\n        let tempCascade = Arr.merge(Arr.clone(cascade), [value]);\n\n        if ( this.trigger === 'hover' ) {\n            props.onMousemove = Any.framerate(this.onHover(tempCascade), 30);\n        }\n\n        props['on' + Str.ucfirst(this.mousedown)] = this.onSelect(tempCascade);\n\n        let children = Obj.get(item, this.childProp);\n\n        if (  ! props.icon && ! Any.isEmpty(children) ) {\n            props.icon = nano.Icons.angleRight;\n        }\n\n        return (\n            <NPopoverOption class={classList} {...props}>\n                { Obj.get(item, this.labelProp) }\n            </NPopoverOption>\n        );\n    },\n\n    renderOptions(items, cascade = [])\n    {\n        if ( Any.isEmpty(items) ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-cascader-panel__items\">\n                <NScrollbar relative={true}>\n                    {\n                        Arr.each(items, (item) => {\n                            return this.ctor('renderOption')(item, cascade);\n                        })\n                    }\n                </NScrollbar>\n            </div>\n        )\n    },\n\n    renderCascade()\n    {\n        let renderList = [\n            this.ctor('renderOptions')(this.options)\n        ];\n\n        let items = this.options, cascade = [];\n\n        Arr.each(this.tempHover, (value) => {\n\n            if ( ! items ) {\n                return;\n            }\n\n            cascade.push(value);\n\n            let item = Arr.find(items, {\n                [this.valueProp]: value\n            });\n\n            items = Obj.get(item, this.childProp);\n\n            let options = this.ctor('renderOptions')\n                (items, cascade);\n\n            renderList.push(options);\n        });\n\n        return renderList;\n    },\n\n    render()\n    {\n        let classList = [\n            'n-cascader-panel',\n            'n-cascader-panel--' + this.size\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>{ this.ctor('renderCascade')() }</div>\n        );\n    }\n\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCascader',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        clearValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Please select';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        valueProp: {\n            default()\n            {\n                return 'value';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        disabledProp: {\n            default()\n            {\n                return 'disabled';\n            },\n            type: [String]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempHover: this.modelValue,\n            focus: false,\n        };\n    },\n\n    methods: {\n\n        clearCascader()\n        {\n            this.focus = true;\n\n            this.$emit('update:modelValue', \n                this.tempValue = this.tempHover = this.clearValue);\n        },\n\n        onCascaderInput(value)\n        {\n            this.focus = false;\n\n            this.$emit('update:modelValue', \n                this.tempValue = value);\n        },\n\n        onCascaderHover(value)\n        {\n            this.$emit('update:hover', \n                this.tempHover = value);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearCascader;\n        }\n\n        return (\n            <div class=\"n-cascader__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-cascader__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderLabelItems()\n    {\n        let items = this.options, renderList = [];\n\n        if ( Any.isEmpty(this.tempValue) ) {\n            return (\n                <div class=\"n-cascader__placeholder\">\n                    { this.trans(this.placeholder) }\n                </div>\n            );\n        }\n\n        Arr.each(this.tempValue, (value) => {\n\n            if ( ! items ) {\n                return;\n            }\n\n            let item = Arr.find(items, {\n                [this.valueProp]: value\n            });\n\n            items = Obj.get(item, this.childProp);\n\n            let itemLabel = (\n                <div class=\"n-cascader__item\">\n                    <span>{ Obj.get(item, this.labelProp) }</span>\n                </div>\n            );\n\n            renderList.push(itemLabel);\n        });\n\n        return (\n            <div class=\"n-cascader__items\">\n                { renderList }\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-cascader__display'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderLabelItems')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderItems()\n    {\n        let props = Obj.except(this.$props, ['modelValue'], {\n            hover: this.tempHover,\n            modelValue: this.tempValue,\n        });\n\n        props['onUpdate:hover'] = this.onCascaderHover;\n        props['onUpdate:modelValue'] = this.onCascaderInput;\n\n        return (\n            <NCascaderPanel class=\"n-cascader__body\" {...props}></NCascaderPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled,\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-cascader',\n            'n-cascader--' + this.type,\n            'n-cascader--' + this.size,\n        ];\n\n        if ( Any.isEmpty(this.tempValue) ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import CascaderPanel from './src/cascader-panel/cascader-panel';\nimport Cascader from './src/cascader/cascader';\n\nexport default function (App) {\n    App.component(CascaderPanel.name, CascaderPanel);\n    App.component(Cascader.name, Cascader);\n}","import { Arr, Str, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDatepickerPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        arrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearArrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        depart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearDepart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        minDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        maxDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        monthPanels: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        weekdays: {\n            default()\n            {\n                return [\n                    'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su',\n                ];\n            },\n            type: [Array]\n        },\n\n        months: {\n            default()\n            {\n                return [\n                    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', \n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\n                ]\n            },\n            type: [Array]\n        }\n\n    },\n\n    computed: {\n\n        yearsGrid()\n        {\n            return this.tempCache.getYears();\n        },\n\n        monthsGrid()\n        {\n            return this.tempCache.getMonths();\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        },\n\n        arrive(value)\n        {\n            if ( value !== this.tempArrive.format(this.format) ) {\n                this.tempArrive = Now.make(value);\n            }\n        },\n\n        depart(value)\n        {\n            if ( value !== this.tempDepart.format(this.format) ) {\n                this.tempDepart = Now.make(value);\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempView: 'date',\n            tempRanger: null,\n            cacheArrive: null,\n            cacheDepart: null,\n            tempValue: Now.make(this.modelValue, this.format),\n            tempCache: Now.make(this.modelValue, this.format),\n            tempArrive: Now.make(this.arrive),\n            tempDepart: Now.make(this.depart),\n        }\n    },\n\n    methods: {\n\n        gotoDate()\n        {\n            this.tempView = 'date';\n        },\n\n        gotoMonth()\n        {\n            this.tempView = 'month';\n        },\n\n        gotoYear()\n        {\n            this.tempView = 'year';\n        },\n\n        patchDate(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            // Copy now to cache\n            this.tempCache = now.clone();\n\n            // Copy now to value\n            this.tempValue = now.clone();\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        patchMonth(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            this.tempCache = now.clone();\n\n            this.gotoDate();\n        },\n\n        printRange(now)\n        {\n            this.tempRanger = now.clone();\n        },\n\n        patchYear(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            this.tempCache = now.clone();\n\n            this.gotoMonth();\n        },\n\n        patchRange(now)\n        {\n            if ( this.cacheArrive && ! this.cacheDepart ) {\n                this.cacheDepart = now.clone();\n            }\n\n            if ( ! this.cacheArrive && ! this.cacheDepart ) {\n                this.cacheArrive = now.clone();\n            }\n\n            if ( ! this.cacheArrive || ! this.cacheDepart ) {\n                return;\n            }\n\n            this.tempArrive = this.cacheArrive.clone();\n            this.tempDepart = this.cacheDepart.clone();\n\n            this.$emit('update:arrive', \n                this.tempArrive.format(this.format));\n\n            this.$emit('update:depart', \n                this.tempDepart.format(this.format));\n\n            this.cacheArrive = null;\n            this.cacheDepart = null;\n\n            this.$emit('rangeSelected', [\n                this.tempArrive.format(this.format),\n                this.tempDepart.format(this.format)\n            ]);\n        },\n\n    },\n\n    renderToolbarPrev(closure)\n    {\n        let props = {\n            type: this.type,\n            link: true,\n            icon: nano.Icons.angleLeft,\n            onClick: closure\n        };\n\n        return (<NButton {...props}></NButton>);\n    },\n\n    renderToolbarNext(closure)\n    {\n        let props = {\n            type: this.type,\n            link: true,\n            icon: nano.Icons.angleRight,\n            onClick: closure\n        };\n\n        return (<NButton {...props}></NButton>);\n    },\n\n    renderToolbarMonth()\n    {\n        let props = {\n            onClick: this.gotoMonth\n        };\n\n        let monthsHtml = [\n            this.months[this.tempCache.month()]\n        ];\n\n        let month = this.tempCache.clone()\n            .addMonths(this.monthPanels - 1);\n\n        if ( month.month() !== this.tempCache.month() ) {\n            monthsHtml.push(this.months[month.month()]);\n        }\n\n        return (\n            <span class=\"n-datepicker-panel__month\" {...props}>\n                { monthsHtml.join(' - ') }\n            </span>\n        );\n    },\n\n    renderToolbarYear()\n    {\n        let props = {\n            onClick: this.gotoYear\n        };\n\n        let yearsHtml = [\n            this.tempCache.year()\n        ];\n\n        let month = this.tempCache.clone()\n            .addMonths(this.monthPanels - 1);\n\n        if ( month.year() !== this.tempCache.year() ) {\n            yearsHtml.push(month.year());\n        }\n\n        return (\n            <span class=\"n-datepicker-panel__year\" {...props}>\n                { yearsHtml.join(' - ') }\n            </span>\n        );\n    },\n\n    renderToolbar({ prev, next })\n    {\n        return (\n            <div class=\"n-datepicker-panel__toolbar\">\n                <div class=\"n-datepicker-panel__display\">\n                    { this.ctor('renderToolbarMonth')() }\n                    { this.ctor('renderToolbarYear')() }\n                </div>\n                <div class=\"n-datepicker-panel__prev\">\n                    { this.ctor('renderToolbarPrev')(prev) }\n                </div>\n                <div class=\"n-datepicker-panel__next\">\n                    { this.ctor('renderToolbarNext')(next) }\n                </div>\n            </div>\n        );\n    },\n\n    renderDateItem(now, month)\n    {\n        let classList = [\n            'n-datepicker-panel__day'\n        ];\n\n        if ( now.equalDate() ) {\n            classList.push('n-today');\n        }\n\n        let isSelected = this.tempValue.valid() && \n            now.equalDate(this.tempValue);\n\n        if ( isSelected ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.month() === month.month() ) {\n            classList.push('n-current');\n        }\n\n        let isNotBeforeMin = ! this.minDate || \n            now.after(this.minDate) || now.equalDate(this.minDate);\n\n        let isNotAfterMax = ! this.maxDate || \n            now.before(this.maxDate) || now.equalDate(this.maxDate);\n\n        if ( ! isNotBeforeMin || ! isNotAfterMax ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( isNotBeforeMin && isNotAfterMax ) {\n            props.onClick = () => this.patchDate(now);\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('DD') }</span>\n            </div>\n        );\n    },\n\n    renderRangeDateItem(now, month)\n    {\n        let classList = [\n            'n-datepicker-panel__day'\n        ];\n\n        if ( now.equalDate('now') ) {\n            classList.push('n-today');\n        }\n\n        if ( now.month() === month.month() ) {\n            classList.push('n-current');\n        }\n\n        let viewMode = 0;\n\n        if ( !! this.cacheArrive ) {\n            viewMode++;\n        }\n\n        if ( !! this.cacheDepart ) {\n            viewMode++;\n        }\n\n        let isTempValid = this.tempArrive.valid() && \n            this.tempDepart.valid();\n\n        if ( viewMode === 0 && isTempValid ) {\n\n            if ( now.between(this.tempArrive, this.tempDepart) ) {\n                classList.push('n-between');\n                classList.push('n-selected');\n            }\n\n            let arriveFirst = this.tempArrive.before(this.tempDepart);\n\n            if ( now.equalDate(this.tempArrive) ) {\n                classList.push(arriveFirst ? 'n-arrive' : 'n-depart');\n                classList.push('n-selected');\n            }\n\n            if ( now.equalDate(this.tempDepart) ) {\n                classList.push(arriveFirst ? 'n-depart' : 'n-arrive');\n                classList.push('n-selected');\n            }\n\n        }\n\n        if ( viewMode === 1 && this.cacheArrive ) {\n\n            if ( now.between(this.cacheArrive, this.tempRanger) ) {\n                classList.push('n-between');\n            }\n\n            let arriveFirst = this.cacheArrive.before(this.tempRanger);\n\n            if ( now.equalDate(this.cacheArrive) ) {\n                classList.push(arriveFirst ? 'n-arrive' : 'n-depart');\n            }\n\n            if ( now.equalDate(this.tempRanger) ) {\n                classList.push(arriveFirst ? 'n-depart' : 'n-arrive');\n            }\n\n        }\n\n        let isNotBeforeMin = ! this.minDate || \n            now.after(this.minDate) || now.equalDate(this.minDate);\n\n        let isNotAfterMax = ! this.maxDate || \n            now.before(this.maxDate) || now.equalDate(this.maxDate);\n\n        if ( ! isNotBeforeMin || ! isNotAfterMax ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            onMouseenter: () => this.printRange(now)\n        };\n\n        if ( isNotBeforeMin && isNotAfterMax ) {\n            props.onClick = () => this.patchRange(now);\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('DD') }</span>\n            </div>\n        );\n    },\n\n    renderDate()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevMonth();\n        };\n        let next = () => {\n            this.tempCache = this.tempCache.nextMonth();\n        };\n\n        let legendHtml = (\n            Arr.each(this.weekdays, (day) => {\n                return (\n                    <div class=\"n-datepicker-panel__day\">\n                        <span>{ this.trans(day) }</span>\n                    </div>\n                );\n            })\n        );\n\n        let renderItem = this.ctor('renderDateItem');\n\n        if ( this.range ) {\n            renderItem = this.ctor('renderRangeDateItem');\n        }\n\n        let bodyHtml = (month) => (\n            Arr.each(Arr.chunk(month.getDatesGrid(), 7), (chunks) => {\n                return (\n                    <div class=\"n-datepicker-panel__week\">\n                        { Arr.each(chunks, (chunk) => renderItem(chunk, month)) }\n                    </div>\n                );\n            })\n        );\n\n        let panelHtml = (\n            Arr.each(Arr.make(this.monthPanels), (offset) => {\n\n                let month = this.tempCache.clone()\n                    .addMonths(offset - 1);\n\n                return (\n                    <div class=\"n-datepicker-panel__panel\">\n                        <div class=\"n-datepicker-panel__legend\">\n                            { legendHtml }\n                        </div>\n                        <div class=\"n-datepicker-panel__body\">\n                            { bodyHtml(month) }\n                        </div>\n                    </div>\n                );\n            })\n        );\n\n        return (\n            <div class=\"n-datepicker-panel__dateview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__panels\">\n                    { panelHtml }\n                </div>\n            </div>\n        );\n    },\n\n    renderMonthItem(now)\n    {\n        let classList = [\n            'n-datepicker-panel__month'\n        ];\n\n        if ( now.equal(this.tempCache, 'YYYYMM') ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.month() === Now.make('now').month() ) {\n            classList.push('n-current');\n        }\n\n        let props = {\n            onClick: () => this.patchMonth(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ this.trans(this.months[now.month()]) }</span>\n            </div>\n        )\n    },\n\n    renderMonth()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevYear();\n        };\n\n        let next = () => {\n            this.tempCache = this.tempCache.nextYear();\n        };\n\n        return (\n            <div class=\"n-datepicker-panel__monthview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__body\">\n                    <div class=\"n-datepicker-panel__year\">\n                        { Arr.each(this.monthsGrid, this.ctor('renderMonthItem')) }\n                    </div>\n                </div>\n                <div class=\"n-datepicker-panel__footer\">\n                    <NButton size={this.type}  size={this.size} link={true} onClick={this.gotoDate}>\n                        { this.trans('Go back') }\n                    </NButton>\n                </div>\n            </div>\n        );\n    },\n\n    renderYearItem(now)\n    {\n        let classList = [\n            'n-datepicker-panel__year'\n        ];\n\n        if ( now.equal(this.tempCache, 'YYYY') ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.year() === Now.make('now').year() ) {\n            classList.push('n-current');\n        }\n\n        let props = {\n            onClick: () => this.patchYear(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.year() }</span>\n            </div>\n        )\n    },\n\n    renderYear()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevDecade();\n        };\n\n        let next = () => {\n            this.tempCache = this.tempCache.nextDecade();\n        };\n\n        return (\n            <div class=\"n-datepicker-panel__yearview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__body\">\n                    <div class=\"n-datepicker-panel__decade\">\n                        { Arr.each(this.yearsGrid, this.ctor('renderYearItem')) }\n                    </div>\n                </div>\n                <div class=\"n-datepicker-panel__footer\">\n                    <NButton size={this.type}  size={this.size} link={true} onClick={this.gotoDate}>\n                        { this.trans('Go back') }\n                    </NButton>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-datepicker-panel',\n            'n-datepicker-panel--' + this.size,\n            'n-datepicker-panel--' + this.type\n        ]\n\n        return (\n            <div class={classList}>\n                { this.ctor('render' + Str.ucfirst(this.tempView))() }\n            </div>\n        );\n    }\n\n}","import { Obj, Now, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDatepicker',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        arrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearArrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        depart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearDepart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        minDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        maxDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        placeholder: {\n            default()\n            {\n                return Locale.trans('Select date');\n            },\n            type: [String]\n        },\n\n        placeholderArrive: {\n            default()\n            {\n                return Locale.trans('Start date');\n            },\n            type: [String]\n        },\n\n        placeholderDepart: {\n            default()\n            {\n                return Locale.trans('End date');\n            },\n            type: [String]\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        rangeSeparator: {\n            default()\n            {\n                return '-';\n            },\n            type: [String]\n        },\n\n        monthPanels: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        boundary: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm:ss');\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD');\n            },\n            type: [String]\n        },\n\n        weekdays: {\n            default()\n            {\n                return [\n                    Locale.trans('Mo'),\n                    Locale.trans('Tu'),\n                    Locale.trans('We'),\n                    Locale.trans('Th'),\n                    Locale.trans('Fr'),\n                    Locale.trans('Sa'),\n                    Locale.trans('Su'),\n                ];\n            },\n            type: [Array]\n        },\n\n        months: {\n            default()\n            {\n                return [\n                    Locale.trans('Jan'),\n                    Locale.trans('Feb'),\n                    Locale.trans('Mar'),\n                    Locale.trans('Apr'),\n                    Locale.trans('May'),\n                    Locale.trans('Jun'),\n                    Locale.trans('Jul'),\n                    Locale.trans('Aug'),\n                    Locale.trans('Sep'),\n                    Locale.trans('Oct'),\n                    Locale.trans('Nov'),\n                    Locale.trans('Dec'),\n                ];\n            },\n            type: [Array]\n        }\n\n    },\n\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        },\n\n        arrive(value)\n        {\n            if ( value !== this.tempArrive.format(this.format) ) {\n                this.tempArrive = Now.make(value);\n            }\n        },\n\n        depart(value)\n        {\n            if ( value !== this.tempDepart.format(this.format) ) {\n                this.tempDepart = Now.make(value);\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            focus: false,\n            tempValue: Now.make(this.modelValue, this.format),\n            tempArrive: Now.make(this.arrive, this.format),\n            tempDepart: Now.make(this.depart, this.format),\n        };\n    },\n\n    methods: {\n\n        clearDatepicker()\n        {\n            this.range ? this.clearRangeDatepicker() :\n                this.clearSingleDatepicker();\n        },\n\n        clearSingleDatepicker()\n        {\n            this.tempValue = Now.make(this.clearValue, \n                this.format);\n\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n\n        clearRangeDatepicker()\n        {\n            this.tempArrive = Now.make(this.clearArrive, \n                this.format);\n\n            this.$emit('update:arrive', this.clearValue);\n\n            this.tempDepart = Now.make(this.clearDepart, \n                this.format);\n\n            this.$emit('update:depart', this.clearDepart);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n        onValueInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempValue = Now.make(moment);\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        onArriveInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempArrive = Now.make(moment);\n\n            this.$emit('update:arrive', \n                this.tempArrive.format(this.format));\n        },\n\n        onDepartInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempDepart = Now.make(moment);\n\n            this.$emit('update:depart', \n                this.tempDepart.format(this.format));\n        },\n\n        onDatepickerInput(value)\n        {\n            this.focus = false;\n\n            this.tempValue = Now.make(value, \n                this.format);\n\n            this.$emit('update:modelValue', value);\n        },\n\n        onDatepickerDepart(value)\n        {\n            this.focus = false;\n\n            this.tempDepart = Now.make(value, \n                this.format);\n\n            this.$emit('update:depart', value);\n        },\n\n        onDatepickerArrive(value)\n        {\n            this.focus = false;\n\n            this.tempArrive = Now.make(value, \n                this.format);\n\n            this.$emit('update:arrive', value);\n        },\n\n    },\n\n\n    renderLabelClear()\n    {\n        let isEmpty = ! this.tempArrive.initialDate &&\n            ! this.tempDepart.initialDate;\n\n        if ( ! this.range ) {\n            isEmpty = ! this.tempValue.initialDate;\n        }\n\n        if ( ! this.clearable || isEmpty ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearDatepicker;\n        }\n\n        return (\n            <div class=\"n-datepicker__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-datepicker__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderRange()\n    {\n        let arriveProps = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholderArrive,\n            onInput: this.onArriveInput,\n        };\n\n        if ( this.tempArrive.valid() ) {\n            arriveProps.value = this.tempArrive.format(\n                this.displayFormat, true);\n        }\n\n        let departProps = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholderDepart,\n            onInput: this.onDepartInput,\n        };\n\n        if ( this.tempDepart.valid() ) {\n            departProps.value = this.tempDepart.format(\n                this.displayFormat, true);\n        }\n\n        return [\n            (\n                <div class=\"n-datepicker__input\">\n                    <input {...arriveProps}/>\n                </div>\n            ),\n            (\n                <div class=\"n-datepicker__seperator\">\n                    <span>{ this.rangeSeparator }</span>\n                </div>\n            ),\n            (\n                <div class=\"n-datepicker__input\">\n                    <input {...departProps}/>\n                </div>\n            )\n        ];\n    },\n\n    renderSingle()\n    {\n        let props = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholder,\n            onInput: this.onValueInput,\n        };\n\n        if ( this.tempValue.valid() ) {\n            props.value = this.tempValue.format(\n                this.displayFormat, true);\n        }\n\n        return (\n            <div class=\"n-datepicker__input\">\n                <input {...props}/>\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-datepicker__display'\n        ];\n\n        if ( this.range ) {\n            classList.push('n-range');\n        }\n\n        let displayHtml = this.ctor('renderSingle');\n\n        if ( this.range ) {\n            displayHtml = this.ctor('renderRange');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { displayHtml() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderItems()\n    {\n        \n        let props = Obj.except(this.$props, ['modelValue'], {\n            arrive: this.tempArrive.format(this.format) || null,\n            depart: this.tempDepart.format(this.format) || null,\n            modelValue: this.tempValue.format(this.format) || null,\n        });\n\n        props['onUpdate:arrive'] = this.onDatepickerArrive;\n        props['onUpdate:depart'] = this.onDatepickerDepart;\n        props['onUpdate:modelValue'] = this.onDatepickerInput;\n\n        return (\n            <NDatepickerPanel class=\"n-datepicker__body\" {...props}></NDatepickerPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-datepicker',\n            'n-datepicker--' + this.type,\n            'n-datepicker--' + this.size,\n        ];\n\n        let isEmpty = ! this.tempArrive.initialDate &&\n            ! this.tempDepart.initialDate;\n\n        if ( ! this.range ) {\n            isEmpty = ! this.tempValue.initialDate;\n        }\n\n        if ( isEmpty ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import DatepickerPanel from \"./src/datepicker-panel/datepicker-panel\";\nimport Datepicker from \"./src/datepicker/datepicker\";\n\nexport default function (App) {\n    App.component(DatepickerPanel.name, DatepickerPanel);\n    App.component(Datepicker.name, Datepicker);\n}","import { Arr, Obj, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTimepickerPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Select time';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return 'HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        hoursInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        minutesInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        secondsInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        hoursGrid()\n        {\n            return this.tempValue.getHours(this.hoursInterval);\n        },\n\n        minutesGrid()\n        {\n            return this.tempValue.getMinutes(this.minutesInterval);\n        },\n\n        secondsGrid()\n        {\n            return this.tempValue.getSeconds(this.secondsInterval);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: Now.make(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        eventSelect(now)\n        {\n            this.$emit('update:modelValue', \n                (this.tempValue = now.clone()).format(this.format));\n        },\n\n    },\n\n    renderToolbar()\n    {\n        return (\n            <div class=\"n-timepicker-panel__toolbar\">\n                <div class=\"n-timepicker-panel-display\">\n                    <span class=\"n-timepicker-panel__time\">\n                        { this.tempValue.format(this.displayFormat) || this.placeholder }\n                    </span>\n                </div>\n            </div>\n        )\n    },\n\n    renderHourItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.hour() === this.tempValue.hour() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('HH') }</span>\n            </div>\n        );\n    },\n\n    renderHourPanel()\n    {\n        if ( ! this.displayFormat.match('HH') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\" wrapClass=\"n-timepicker-panel__wrap\">\n                { Arr.each(this.hoursGrid, this.ctor('renderHourItem')) }\n            </NScrollbar>\n        );\n    },\n\n    renderMinuteItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.minute() === this.tempValue.minute() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('mm') }</span>\n            </div>\n        );\n    },\n\n    renderMinutePanel()\n    {\n        if ( ! this.displayFormat.match('mm') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\" wrapClass=\"n-timepicker-panel__wrap\">\n                { Arr.each(this.minutesGrid, this.ctor('renderMinuteItem')) }\n            </NScrollbar>\n        );\n    },\n\n    renderSecondItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.second() === this.tempValue.second() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('ss') }</span>\n            </div>\n        );\n    },\n\n    renderSecondPanel()\n    {\n        if ( ! this.displayFormat.match('ss') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\">\n                <div class=\"n-timepicker-panel__wrap\">\n                    { Arr.each(this.secondsGrid, this.ctor('renderSecondItem')) }\n                </div>\n            </NScrollbar>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-timepicker-panel',\n            'n-timepicker-panel--' + this.size,\n            'n-timepicker-panel--' + this.type,\n        ];\n\n        if ( this.disabled ){\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-timepicker-panel__header\">\n                    {this.ctor('renderToolbar')()}\n                </div>\n                <div class=\"n-timepicker-panel__body\">\n                    { this.ctor('renderHourPanel')() }\n                    { this.ctor('renderMinutePanel')() }\n                    { this.ctor('renderSecondPanel')() }\n                </div>\n            </div>\n        );\n    }\n\n}","import { Arr, Obj, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTimepicker',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Select time';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return 'HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        hoursInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        minutesInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        secondsInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        hoursGrid()\n        {\n            return this.tempValue.getHours(this.hoursInterval);\n        },\n\n        minutesGrid()\n        {\n            return this.tempValue.getMinutes(this.minutesInterval);\n        },\n\n        secondsGrid()\n        {\n            return this.tempValue.getSeconds(this.secondsInterval);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false,\n            tempValue: Now.make(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        clearTimepicker()\n        {\n            this.tempValue = Now.make(this.clearValue, \n                this.format);\n\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n        onValueInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                hour: value.moment.hour(), \n                minute: value.moment.minute(), \n                second: value.moment.second(),\n            });\n\n            this.tempValue = Now.make(moment);\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        onTimepickerInput(value)\n        {\n            this.tempValue = Now.make(value, \n                this.format);\n\n            this.$emit('update:modelValue', value);\n        },\n\n    },\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || ! this.tempValue.valid() ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearTimepicker;\n        }\n\n        return (\n            <div class=\"n-timepicker__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-timepicker__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderSingle()\n    {\n        let props = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.trans(this.placeholder),\n            onInput: this.onValueInput,\n        };\n\n        if ( this.tempValue.valid() ) {\n            props.value = this.tempValue.format(\n                this.displayFormat, true);\n        }\n\n        return (\n            <div class=\"n-timepicker__input\">\n                <input {...props}/>\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-timepicker__display'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderSingle')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderPanel()\n    {\n        \n        let props = Obj.except(this.$props, ['modelValue'], {\n            modelValue: this.tempValue.format(this.format) || null,\n        });\n\n        props['onUpdate:modelValue'] = this.onTimepickerInput;\n\n        return (\n            <NTimepickerPanel class=\"n-timepicker__body\" {...props}></NTimepickerPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderPanel') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-timepicker',\n            'n-timepicker--' + this.type,\n            'n-timepicker--' + this.size,\n        ];\n\n        if ( ! this.tempValue.valid() ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import TimepickerPanel from \"./src/timepicker-panel/timepicker-panel\";\nimport Timepicker from \"./src/timepicker/timepicker\";\n\nexport default function (App) {\n    App.component(TimepickerPanel.name, TimepickerPanel);\n    App.component(Timepicker.name, Timepicker);\n}","import { Arr, Dom, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTabs',\n\n    provide()\n    {\n        return {\n            NTabs: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: false,\n            elements: [], \n            width: 0, \n            offset: 0, \n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        addTab(tab)\n        {\n            Arr.add(this.elements, tab, \n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        removeTab(tab)\n        {\n            Arr.remove(this.elements, \n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        getTab(updateEvent = true)\n        {\n            let currentTab = Arr.find(this.elements, {\n                name: this.modelValue\n            });\n\n            let sorted = Arr.sort(this.elements, 'sort');\n\n            if ( ! currentTab ) {\n                currentTab = Arr.first(sorted);\n            }\n\n            let repeatNext = () => this.getTab(updateEvent);\n\n            if ( ! currentTab ) {\n                return Any.delay(repeatNext, 250);\n            }\n\n            if ( currentTab.name === this.tempValue || ! updateEvent  ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = currentTab.name);\n        },\n\n        changeTab(value)\n        {\n            if ( this.tempValue === value ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = value);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.init = true;\n        this.getTab(false);\n    },\n\n    updated()\n    {\n        let width = Dom.find(this.$el).find('.n-active')\n            .width();\n\n        this.width = width < 0 ? 0 : width;\n\n        let offset = Dom.find(this.$el).find('.n-active')\n            .offset('left', this.$el);\n\n        this.offset = offset < 0 ? 0 : offset;\n    },\n\n    renderHeaderIndicator()\n    {\n        let transform = `scaleX(${this.width / 100}) ` + \n            `translateX(${this.offset / (this.width / 100)}px)`;\n\n        return (\n            <div class=\"n-tabs__indicator\" style={{ transform }}>\n                { /* Indicator bar */ }\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( this.elements.length <= 1 ) {\n            return null;\n        }\n\n        // FIXME: As soon vue doesnt bug\n        let sorted = Arr.sort(this.elements, 'sort');\n        \n        let tabs = Arr.each(Arr.make(sorted.length), (tab, index) => {\n            return sorted[index].ctor('renderHeader')();\n        });\n\n        return (\n            <div class=\"n-tabs__header\">\n                {[tabs, this.ctor('renderHeaderIndicator')()]}\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-tabs__body\">\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-tabs', \n            'n-tabs--' + this.size, \n            'n-tabs--' + this.type\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderHeader')() }\n                { this.ctor('renderBody')() }\n            </div>\n        );\n    }\n}\n","import { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTabsItem',\n\n    inject: {\n\n        NTabs: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NTabsItem: this\n        };\n    },\n\n    props: {\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        name: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        preload: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keep: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n\n    },\n\n    methods: {\n\n        changeTab()\n        {\n            this.NTabs.changeTab(this.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            _key: null, init: false\n        }\n    },\n\n    beforeMount()\n    {\n        this.NTabs.addTab(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NTabs.removeTab(this);\n    },\n\n    renderHeaderIcon()\n    {\n        if ( ! this.$slots.icon && ! this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-tabs__tab-icon\">\n                { this.$slots.icon && this.$slots.icon() || <i class={this.icon}></i> }\n            </div>\n        );\n    },\n\n    renderHeaderLabel()\n    {\n        return (\n            <div class=\"n-tabs__tab-label\">\n                { this.$slots.label && this.$slots.label () || <span>{this.label}</span> }\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        let classList = [\n            'n-tabs__tab'\n        ];\n\n        if ( this.NTabs.tempValue === this.name ) {\n            classList.push('n-active');\n        }\n\n        let props = {\n            onClick: () => this.changeTab(this.name)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHeaderIcon')() }\n                { this.ctor('renderHeaderLabel')() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let renderBody = this.NTabs.tempValue === this.name;\n\n        if ( this.NTabs.tempValue !== this.name && this.keep ) {\n            renderBody = this.init;\n        }\n\n        if ( this.NTabs.tempValue !== this.name && this.preload ) {\n            renderBody = true;\n        }\n\n        if ( ! renderBody ) {\n            return null;\n        }\n\n        this.init = true;\n\n        let classList = [\n            'n-tabs-item'\n        ];\n\n        let style = {};\n\n        if ( this.NTabs.tempValue !== this.name ) {\n            style.display = 'none';\n        }\n\n        if ( this.$slots.raw ) {\n            return this.$slots.raw({ style });\n        }\n\n        let element = 'div';\n\n        if ( ! this.relative && ! this.NTabs.relative ) {\n            element = resolveComponent('NScrollbar');\n        }\n\n        return h(element, { class: classList, style }, this.$slots);\n    }\n}\n","import Tabs from './src/tabs/tabs';\nimport TabsItem from './src/tabs-item/tabs-item';\n\nexport default function (App) {\n    App.component(Tabs.name, Tabs);\n    App.component(TabsItem.name, TabsItem);\n}","import { Arr, Dom, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCollapse',\n\n    provide()\n    {\n        return {\n            NCollapse: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: false, elements: [], tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        addTab(tab)\n        {\n            Arr.add(this.elements, tab,\n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        removeTab(tab)\n        {\n            Arr.remove(this.elements,\n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        showTab(value)\n        {\n            if ( Arr.has(this.tempValue, value) ) {\n                return;\n            }\n\n            Arr.add(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        hideTab(value)\n        {\n            if ( ! Arr.has(this.tempValue, value) ) {\n                return;\n            }\n\n            Arr.remove(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        toggleTab(value)\n        {\n            Arr.toggle(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.init = true;\n    },\n\n    render()\n    {\n        let classList = [\n            'n-collapse',\n            'n-collapse--' + this.size,\n            'n-collapse--' + this.type\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import { Arr, Any, Dom } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NCollapseItem',\n\n    inject: {\n\n        NCollapse: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NCollapseItem: this\n        };\n    },\n\n    props: {\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        name: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        preload: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keep: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    methods: {\n\n        showTab()\n        {\n            this.NCollapse.showTab(this.name);\n        },\n\n        hideTab()\n        {\n            this.NCollapse.hideTab(this.name);\n        },\n\n        toggleTab()\n        {\n            this.NCollapse.toggleTab(this.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            _key: null, init: false, dragger: 0\n        }\n    },\n\n    beforeMount()\n    {\n        this.NCollapse.addTab(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NCollapse.removeTab(this);\n    },\n\n    renderHeaderIcon()\n    {\n        if ( !this.$slots.icon && !this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-collapse__header-icon\">\n                {this.$slots.icon && this.$slots.icon() || <i class={this.icon}></i>}\n            </div>\n        );\n    },\n\n    renderHeaderLabel()\n    {\n        return (\n            <div class=\"n-collapse__header-label\">\n                {this.$slots.label && this.$slots.label() || <span>{this.label}</span>}\n            </div>\n        );\n    },\n\n    renderHeaderAngle()\n    {\n        return (\n            <div class=\"n-collapse__header-angle\">\n                {this.$slots.angle && this.$slots.angle() || <i class={nano.Icons.angleRight}></i>}\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( !this.label && !this.$slots.label ) {\n            return null;\n        }\n\n        let classList = [\n            'n-collapse__header'\n        ];\n\n        if ( Arr.has(this.NCollapse.tempValue, this.name) ) {\n            classList.push('n-active');\n        }\n\n        let props = {\n            onClick: () => this.toggleTab(this.name)\n        };\n\n        props['onDragenter'] = (event) => {\n\n            this.dragger++;\n\n            if ( this.dragger !== 1 ) {\n                return;\n            }\n\n            this.showDelay = setTimeout(() => {\n                this.showTab(this.name);\n            }, 350);\n        };\n\n        props['onDragleave'] = (event) => {\n\n            this.dragger--;\n\n            if ( this.dragger !== 0 ) {\n                return;\n            }\n\n            clearTimeout(this.showDelay);\n        };\n\n        return (\n            <div ref=\"header\" class={classList} {...props}>\n                {this.ctor('renderHeaderIcon')()}\n                {this.ctor('renderHeaderLabel')()}\n                {this.ctor('renderHeaderAngle')()}\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        let classList = [\n            'n-collapse__body'\n        ];\n\n        let tempValue = Arr.clone(this.NCollapse.tempValue);\n\n        if ( !this.label && !this.$slots.label ) {\n            tempValue.push(this.name);\n        }\n\n        let renderBody = Arr.has(tempValue, this.name);\n\n        if ( !Arr.has(tempValue, this.name) && this.keep ) {\n            renderBody = this.init;\n        }\n\n        if ( !Arr.has(tempValue, this.name) && this.preload ) {\n            renderBody = true;\n        }\n\n        if ( !renderBody && this.label ) {\n            return null;\n        }\n\n        this.init = true;\n\n        let style = {};\n\n        if ( !Arr.has(tempValue, this.name) ) {\n            style.display = 'none';\n        }\n\n        let element = 'div';\n\n        if ( !this.relative && !this.NCollapse.relative ) {\n            element = resolveComponent('NScrollbar');\n        }\n\n        return h(element, { class: classList, style, }, this.$slots);\n    },\n\n    render()\n    {\n        return [\n            this.ctor('renderHeader')(), this.ctor('renderBody')()\n        ];\n    }\n}\n","import Collapse from './src/collapse/collapse';\nimport CollapseItem from './src/collapse-item/collapse-item';\n\nexport default function (App) {\n    App.component(Collapse.name, Collapse);\n    App.component(CollapseItem.name, CollapseItem);\n}","import { Any, Obj, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPreviewPlain',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        showSrc: {\n            default()\n            {\n                return true;\n            }\n        }\n\n    },\n\n    computed: {\n\n        tempSrc()\n        {\n            return Obj.get(this.src, 'name', this.src);\n        },\n\n        tempExt()\n        {\n            let regex = /^.*?\\.([^.?]+)(\\?.*?)?$/;\n\n            if ( Any.isEmpty(this.tempSrc) ) {\n                return null;\n            }\n\n            return this.tempSrc.replace(regex, '$1');\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-plain'\n        ];\n\n        let slots = [];\n\n        slots[0] = (\n            <li>{ this.type || Locale.trans('plain') }/{ this.tempExt || Locale.trans('none') }</li>\n        );\n\n        if ( this.showSrc ) {\n            slots[1] = (<li>{ this.tempSrc }</li>);\n        }\n\n        return (\n            <div class={classList}>\n                <ul>{ slots }</ul>\n            </div>\n        );\n    }\n\n}","import { Obj, Arr, Str, Any, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPreviewImage',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            load: false, tempSrc: null\n        };\n    },\n\n    beforeMount()\n    {\n        if ( ! window.ImageCache ) {\n            window.ImageCache = [];\n        }\n    },\n\n    mounted()\n    {\n        this.resolveLoad();\n    },\n\n    watch: {\n\n        'src': function () {\n            this.resolveLoad();\n        }\n\n    },\n\n    methods: {\n\n        resolveLoad()\n        {\n            this.tempSrc = null;\n\n            if ( Any.isObject(this.src) ) {\n                return this.resolveData();\n            }\n\n            Dom.find(this.$refs.image).loaded(() => {\n\n                /**\n                 * Add image to cache\n                 */\n                Arr.add(window.ImageCache, this.src);\n\n                /**\n                 * Mark image as loaded\n                 */\n                Any.delay(() => this.load = false, 200);\n            });\n\n            this.load = true;\n        },\n\n        resolveData()\n        {\n            let reader = new FileReader();\n\n            reader.onload = () => {\n                this.tempSrc = reader.result;\n            };\n\n            reader.readAsDataURL(this.src);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-image'\n        ];\n\n        if ( Arr.has(window.ImageCache, this.src) ) {\n            classList.push('n-cached');\n        }\n\n        if ( ! this.load ) {\n            classList.push('n-ready');\n        }\n\n        return (\n            <div class={classList}>\n                <img ref=\"image\" src={this.tempSrc || this.src} />\n            </div>\n        );\n    }\n\n}","import Preview from './src/preview/preview';\nimport PreviewPlain from './src/preview-plain/preview-plain';\nimport PreviewImage from './src/preview-image/preview-image';\nimport PreviewVideo from './src/preview-video/preview-video';\n\nexport default function (App) {\n    App.component(Preview.name, Preview);\n    App.component(PreviewPlain.name, PreviewPlain);\n    App.component(PreviewImage.name, PreviewImage);\n    App.component(PreviewVideo.name, PreviewVideo);\n}\n\n","import { Arr, Map, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NMap',\n\n    props: {\n\n        lat: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        lng: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        zoom: {\n            default()\n            {\n                return 15;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NMap: this\n        };\n    },\n\n    data()\n    {\n        return { init: false, callbacks: [], tempMap: null };\n    },\n\n    watch: {\n\n        lat()\n        {\n            Any.delay(() => this.tempMap.focusMarkers(), 100);\n        },\n\n        lng()\n        {\n            Any.delay(() => this.tempMap.focusMarkers(), 100);\n        }\n\n    },\n\n    mounted()\n    {\n        this.tempMap = new Map(this.$el, {\n            lat: this.lat, lng: this.lng, zoom: this.zoom\n        });\n\n        this.init = true;\n\n        Arr.each(this.callbacks, (callback) => callback())\n    },\n\n    methods: {\n\n        getMap()\n        {\n            return this.tempMap;\n        },\n\n        onMount(callback)\n        {\n            this.init ? callback() : this.callbacks.push(callback);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-map'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import { UUID, Obj, Num, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NMapMarker',\n\n    inject: {\n\n        NMap: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        lat: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        lng: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        drag: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        options: {\n            default()\n            {\n                return { style: 'default' };\n            },\n            type: [Object]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            id: UUID(), tempMarker: null\n        };\n    },\n\n    methods: {\n\n        importMarkerPosition()\n        {\n            this.tempMarker.marker.setPosition({\n                lat: this.lat, lng: this.lng\n            });\n        },\n\n        updateMarkerPosition()\n        {\n            this.$emit('update:lat', this.tempMarker.marker.getPosition().lat());\n            this.$emit('update:lng', this.tempMarker.marker.getPosition().lng());\n        },\n\n        initializeMarker()\n        {\n            let options = Obj.assign({\n                lat: Num.float(this.lat), lng: Num.float(this.lng), draggable: this.drag\n            }, this.options);\n\n            if ( ! Any.isEmpty(this.$slots.default) ) {\n                options.html = this.$el.innerHTML;\n            }\n\n            this.tempMarker = this.NMap.getMap().createMarker(this.id, options);\n\n            this.tempMarker.marker.addListener('position_changed',\n                Any.debounce(this.updateMarkerPosition));\n\n            this.tempMarker.marker.addListener('dragstart',\n                () => this.$emit('dragstart', this.tempMarker));\n\n            this.tempMarker.marker.addListener('dragend',\n                () => this.$emit('dragend', this.tempMarker));\n\n            this.tempMarker.marker.addListener('mouseover',\n                () => this.$emit('mouseenter', this.tempMarker));\n\n            this.tempMarker.marker.addListener('mouseout',\n                () => this.$emit('mouseleave', this.tempMarker));\n        },\n\n        setMarkerByAddress(address)\n        {\n            let successClosure = () => {\n                this.NMap.getMap().focusMarkers(null, this.NMap.zoom);\n            };\n\n            let errorClosure = () => {\n                this.Notify(this.trans('Address not found.'), 'danger');\n            };\n\n            this.NMap.getMap().setMarkerByAddress(this.id, address)\n                .then(successClosure, errorClosure);\n        }\n\n    },\n\n    watch: {\n\n        lat()\n        {\n            this.importMarkerPosition();\n        },\n\n        lng()\n        {\n            this.importMarkerPosition();\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.NMap.onMount(this.initializeMarker);\n    },\n\n    render()\n    {\n        return (\n            <div style=\"display: none;\">\n                { this.$slots.default }\n            </div>\n        );\n    }\n\n}\n","import Map from './src/map/map';\nimport MapMarker from './src/map-marker/map-marker';\n\nexport default function (App) {\n    App.component(Map.name, Map);\n    App.component(MapMarker.name, MapMarker);\n}\n\n","import { Any, Str, Obj, Dom } from \"@kizmann/pico-js\";\n\nclass AlertFrame {\n\n    el = null;\n\n    text = '';\n\n    icon = '';\n\n    type = '';\n\n    options = {\n        iconPrimary: nano.Icons.info,\n        iconSecondary: nano.Icons.info,\n        iconSuccess: nano.Icons.success,\n        iconWarning: nano.Icons.warning,\n        iconDanger: nano.Icons.danger,\n        iconInfo: nano.Icons.info\n    };\n\n    constructor(text, type = 'primary', options = {})\n    {\n        this.text = text;\n        this.type = type;\n\n        this.options = Obj.assign(this.options, options);\n\n        this.render();\n    }\n\n    getIcon()\n    {\n        return Obj.get(this.options,\n            'icon' + Str.ucfirst(this.type));\n    }\n\n    append(el = document.body)\n    {\n        this.el.appendTo(el);\n\n        Dom.find(document.body).on('keydown', (event) => {\n            if ( event.which === 27 ) {\n                this.remove();\n            }\n        }, 'n-alert');\n\n        setTimeout(() => this.el.addClass('n-active'), 100);\n    }\n\n    remove()\n    {\n        Dom.find(document.body).off('keydown', null, 'n-alert');\n\n        this.el.get(0).remove();\n    }\n\n    render()\n    {\n        let classList = [\n            'n-alert-frame',\n            'n-alert-frame--' + this.type,\n            'n-alert-frame--' + Alert.size\n        ];\n\n        this.el = Dom.make('div', {\n            classList: classList.join(' ')\n        });\n\n        let backdrop = Dom.make('div', {\n            classList: 'n-alert-backdrop', onclick: () => this.remove()\n        });\n\n        backdrop.onClick = () => {\n            this.remove();\n        };\n\n        backdrop.appendTo(this.el);\n\n        let frame = Dom.make('div', {\n            classList: 'n-alert'\n        });\n\n        frame.appendTo(this.el);\n\n        let icon = Dom.make('div', {\n            classList: 'n-alert__icon'\n        });\n\n        icon.appendTo(frame);\n\n        let iconSpan = Dom.make('span', {\n            classList: this.getIcon()\n        });\n\n        iconSpan.appendTo(icon);\n\n        let text = Dom.make('div', {\n            classList: 'n-alert__text'\n        });\n\n        text.html(this.text).appendTo(frame);\n    }\n\n}\n\nexport default class Alert {\n\n    static alias = 'Alert';\n\n    static size = nano.Settings.notifySize;\n\n    static alert = null;\n\n    static handle(...args)\n    {\n        if ( ! Any.isEmpty(Alert.alert) ) {\n            Alert.alert.remove();\n        }\n\n        Alert.alert = new AlertFrame(...args);\n\n        Alert.alert.append();\n\n        return Alert;\n    }\n\n}\n","import Alert from './src/alert/alert';\n\nexport default function (App) {\n    App.config.globalProperties[Alert.alias] = window[Alert.alias] = Alert.handle;\n}\n","import { UUID, Str, Obj, Dom } from \"@kizmann/pico-js\";\n\nclass Notification {\n\n    el = null;\n\n    text = '';\n\n    icon = '';\n\n    type = '';\n\n    options = {\n        duration: 4500,\n        iconPrimary: nano.Icons.info,\n        iconSecondary: nano.Icons.info,\n        iconSuccess: nano.Icons.success,\n        iconWarning: nano.Icons.warning,\n        iconDanger: nano.Icons.danger,\n        iconInfo: nano.Icons.info\n    };\n\n    constructor(text, type = 'primary', options = {})\n    {\n        this.text = text;\n        this.type = type;\n\n        this.options = Obj.assign(this.options, options);\n\n        this.render();\n    }\n\n    getIcon()\n    {\n        return Obj.get(this.options,\n            'icon' + Str.ucfirst(this.type));\n    }\n\n    append(el = document.body)\n    {\n        this.el.appendTo(el);\n\n        setTimeout(() => this.el.addClass('n-active'), 100);\n\n        return this;\n    }\n\n    remove()\n    {\n        this.el.get(0).remove();\n\n        return this;\n    }\n\n    render()\n    {\n        let classList = [\n            'n-notification',\n            'n-notification--' + this.type\n        ];\n\n        this.el = Dom.make('div', {\n            classList: classList.join(' '), onclick: () => this.remove()\n        });\n        \n\n        let icon = Dom.make('div', {\n            classList: 'n-notification__icon'\n        });\n\n        icon.appendTo(this.el);\n\n        let iconSpan = Dom.make('span', {\n            classList: this.getIcon()\n        });\n\n        iconSpan.appendTo(icon);\n\n        let text = Dom.make('div', {\n            classList: 'n-notification__text'\n        });\n\n        text.html(this.text).appendTo(this.el);\n    }\n\n}\n\nexport default class Notify {\n\n    static alias = 'Notify';\n\n    static size = nano.Settings.notifySize;\n\n    static position = nano.Settings.notifyPosition;\n\n    static notifications = {};\n\n    static handle(...args)\n    {\n        let uid = Notify.create(undefined, ...args);\n\n        let wrapper = Notify.getWrapper();\n\n        // Append element to dom\n        Notify.notifications[uid].append(wrapper);\n\n        // Queue remove\n        setTimeout(() => Notify.remove(uid),\n            Notify.notifications[uid].options.duration);\n\n        return uid;\n    }\n\n    static create(uid = UUID(), ...args)\n    {\n        Notify.notifications[uid] = new Notification(...args);\n\n        return uid;\n    }\n\n    static remove(uid)\n    {\n        if ( Notify.notifications[uid] === undefined ) {\n            return;\n        }\n\n        // Remove dom element\n        Notify.notifications[uid].remove();\n\n        // Remove from list\n        delete Notify.notifications[uid];\n    }\n\n    static getWrapper()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let style = {\n            'z-index': window.zIndex + 100\n        };\n\n        let classList = [\n            'n-notification-frame',\n            'n-notification-frame--' + this.size,\n            'n-notification-frame--' + this.position\n        ];\n\n        if ( Dom.find('.n-notification-frame').empty() === true ) {\n            Dom.make('div', { classList: classList.join(' ') }).appendTo(document.body);\n        }\n\n        Dom.find('.n-notification-frame').css(style);\n\n        return Dom.find('.n-notification-frame');\n    }\n\n}\n","import Notifcation from './src/notification/notification';\n\nexport default function (App) {\n    App.config.globalProperties[Notifcation.alias] = window[Notifcation.alias] = Notifcation.handle;\n}\n","export default {\n\n    name: 'NEmptyIcon',\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-empty-icon',\n            'n-empty-icon--' + this.size,\n            'n-empty-icon--' + this.type\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-empty-icon__frame\">\n                    { /* Icon  */ }\n                </div>\n                <div class=\"n-empty-icon__text\">\n                    { this.$slots.default && this.$slots.default() }\n                </div>\n            </div>\n        );\n    }\n\n}\n","import EmptyIcon from './src/empty-icon/empty-icon';\n\nexport default function (App) {\n    App.component(EmptyIcon.name, EmptyIcon);\n}\n","import { Arr, Obj, Dom, Any, Str, Event } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NScrollbar',\n\n    provide()\n    {\n        return {\n            NScrollbar: this\n        };\n    },\n\n    props: {\n\n        options: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        fixture: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        allowNative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        framerate: {\n            default()\n            {\n                return 24;\n            },\n            type: [Number]\n        },\n\n        wrapClass: {\n            default()\n            {\n                return 'n-scrollbar__wrap';\n            }\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            native: false\n        };\n    },\n\n    beforeMount()\n    {\n        this.adaptScrollBehavior();\n    },\n\n    mounted()\n    {\n        this.bindAdaptHeight();\n        this.bindAdaptWidth();\n\n        let passive = {\n            passive: true, uid: this._.uid\n        };\n\n        Event.bind('NScrollbar:resize',\n            this.onResize, this._.uid);\n\n        Event.bind('NResizer:moved',\n            this.onUpdate, this._.uid);\n\n        Dom.find(window).on('resize', \n            this.onResize, passive);\n    \n        Dom.find(this.$refs.content).on('scroll', \n            this.onScroll, passive);\n    },\n\n    updated()\n    {\n        if ( this.passedHeight || this.passedWidth ) {\n            Dom.find(this.$el).addClass('n-ready');\n        }\n    },\n\n    beforeUnmount()\n    {\n        this.unbindAdaptHeight();\n        this.unbindAdaptWidth();\n\n        let passive = {\n            passive: true, uid: this._.uid\n        };\n\n        Event.unbind('NScrollbar:resize', \n            this._.uid);\n\n        Event.unbind('NResizer:moved', \n            this._.uid);\n\n        Dom.find(window).off('resize', \n            null, passive);\n\n        Dom.find(this.$el).off('scroll', \n            null, passive);\n    },\n\n    methods: {\n\n        scrollTo(x = 0, y = 0, delay = 0)\n        {\n            Any.delay(() => this.onScrollTo(x, y), delay);\n        },\n\n        onScrollTo(x = 0, y = 0)\n        {\n            this.$refs.content.scrollTop = y;\n            this.$refs.content.scrollLeft = x;\n        },\n\n        scrollIntoView(selector, delay = 0)\n        {\n            Any.delay(() => this.onScrollIntoView(selector), delay);\n        },\n\n        onScrollIntoView(selector)\n        {\n            let $el = Dom.find(this.$el).find(selector);\n\n            let scrollTop = this.$refs.content\n                .scrollTop;\n\n            let outerHeight = this.$refs.content.\n                clientHeight;\n\n            let offsetTop = $el.offsetTop(this.$el);\n\n            if ( offsetTop < scrollTop ) {\n                this.$refs.content.scrollTop = offsetTop;\n            }\n\n            if ( offsetTop + $el.height() >= scrollTop + outerHeight ) {\n                this.$refs.content.scrollTop = offsetTop - outerHeight + $el.height();\n            }\n\n            let scrollLeft = this.$refs.content\n                .scrollLeft;\n\n            let outerWidth = this.$refs.content.\n                clientWidth;\n\n            let offsetLeft = $el.offsetLeft(this.$el);\n\n            if ( offsetLeft < scrollLeft ) {\n                this.$refs.content.scrollLeft = offsetLeft;\n            }\n\n            if ( offsetLeft + $el.width() >= scrollLeft + outerWidth ) {\n                this.$refs.content.scrollLeft = offsetLeft - outerWidth + $el.width();\n            }\n        },\n\n        adaptScrollBehavior()\n        {\n            let $dom = Dom.make('div', { classList: ['n-scrollbar-test'] })\n                .appendTo(document.body).get(0);\n\n            Dom.make('div').appendTo($dom);\n\n            this.native = $dom.clientWidth === $dom.offsetWidth ||\n                $dom.clientHeight === $dom.offsetHeight;\n\n            $dom.remove();\n        },\n\n        adaptScrollHeight()\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            // let offsetHeight = this.$refs.content.clientHeight -\n            //     this.$refs.content.offsetHeight;\n            //\n            // let offsetWidth = this.$refs.content.clientWidth -\n            //     this.$refs.content.offsetWidth;\n\n            let outerHeight = this.$refs.content.\n                clientHeight|| 0;\n\n            // if ( offsetHeight === 0 && this.overflowX ) {\n            //     outerHeight -= 15;\n            // }\n\n            let innerHeight = this.$refs.content\n                .scrollHeight || 0;\n\n            // if ( offsetHeight === 0 && this.overflowX ) {\n            //     innerHeight -= 15;\n            // }\n\n            let isSameOld = outerHeight === this.outerHeight && \n                innerHeight === this.innerHeight;\n\n            if ( isSameOld ) {\n                return;\n            }\n\n            this.outerHeight = outerHeight;\n            this.innerHeight = innerHeight;\n\n            let height = (outerHeight / innerHeight) \n                * outerHeight;\n\n            let barHeight = Math.max(height, 50);\n\n            let maxHeight = Math.ceil((outerHeight / innerHeight) * \n                (innerHeight - outerHeight));\n        \n            this.heightRatio = (maxHeight - (barHeight - height) \n                - this.offsetY) / maxHeight;\n\n            Dom.find(this.$refs.vbar).css({\n                height: (this.barHeight = Math.ceil(barHeight)) + 'px'\n            });\n\n            // let hasNativeBar = offsetWidth !== 0 && this.overflowY;\n            //\n            // if ( hasNativeBar ) {\n            //     Dom.find(this.$el).addClass('has-native-vbar');\n            // }\n            //\n            // if ( hasNativeBar && this.overflowX ) {\n            //     Dom.find(this.$el).addClass('has-native-hbar');\n            // }\n\n            let hasVtrack = outerHeight && outerHeight < innerHeight;\n\n            if ( hasVtrack ) {\n                Dom.find(this.$el).addClass('has-vtrack');\n            }\n\n            if ( ! hasVtrack ) {\n                Dom.find(this.$el).removeClass('has-vtrack');\n            }\n\n            // if ( hasVtrack && ! hasNativeBar ) {\n            //     Event.fire('NScrollbar:native');\n            // }\n\n            this.adaptScrollPosition();\n        },\n\n        adaptScrollWidth()\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            // let offsetWidth = this.$refs.content.clientWidth -\n            //     this.$refs.content.offsetWidth;\n            //\n            // let offsetHeight = this.$refs.content.clientHeight -\n            //     this.$refs.content.offsetHeight;\n\n            let outerWidth = this.$refs.content.\n                clientWidth || 0;\n                \n            // if ( offsetWidth === 0 && this.overflowY ) {\n            //     outerWidth -= 15;\n            // }\n\n            let innerWidth = this.$refs.content\n                .scrollWidth || 0;\n\n            // if ( offsetWidth === 0 && this.overflowY ) {\n            //     innerWidth -= 15;\n            // }\n\n            let isSameOld = outerWidth === this.outerWidth && \n                innerWidth === this.innerWidth;\n\n            if ( isSameOld ) {\n                return;\n            }\n\n            this.outerWidth = outerWidth;\n            this.innerWidth = innerWidth;\n\n            let width = (outerWidth / innerWidth) \n                * outerWidth;\n\n            let barWidth = Math.max(width, 50);\n\n            let maxWidth = Math.ceil((outerWidth / innerWidth) * \n                (innerWidth - outerWidth));\n        \n            this.widthRatio = (maxWidth - (barWidth - width) \n                - this.offsetX) / maxWidth;\n\n            Dom.find(this.$refs.hbar).css({\n                width: (this.barWidth = Math.ceil(barWidth)) + 'px'\n            });\n\n            // let hasNativeBar = offsetHeight && this.overflowX;\n    \n            // if ( hasNativeBar ) {\n            //     Dom.find(this.$el).addClass('has-native-hbar');\n            // }\n            //\n            // if ( hasNativeBar && this.overflowY ) {\n            //     Dom.find(this.$el).addClass('has-native-vbar');\n            // }\n\n            let hasHtrack = outerWidth && outerWidth < innerWidth;\n\n            if ( hasHtrack ) {\n                Dom.find(this.$el).addClass('has-htrack');\n            }\n\n            if ( ! hasHtrack ) {\n                Dom.find(this.$el).removeClass('has-htrack');\n            }\n\n            // if ( hasHtrack && ! hasNativeBar ) {\n            //     Event.fire('NScrollbar:native');\n            // }\n\n            this.adaptScrollPosition();\n        },\n\n        adaptScrollPosition(scroll = {})\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            if ( ! scroll.top ) {\n                scroll.top = this.$refs.content.scrollTop;\n            }\n\n            if ( ! scroll.left ) {\n                scroll.left = this.$refs.content.scrollLeft;\n            }\n\n            let vbarTop= Math.ceil((this.outerHeight / this.innerHeight) * \n                scroll.top * this.heightRatio) || 0;\n\n            if ( ! this.vbarTop || vbarTop !== this.vbarTop ) {\n\n                Dom.find(this.$refs.vbar).css({\n                    transform: `translateY(${vbarTop}px) translateZ(0)`\n                });\n\n                this.vbarTop = vbarTop;\n            }\n\n            let hbarLeft =  Math.ceil((this.outerWidth / this.innerWidth) * \n                scroll.left * this.widthRatio) || 0;\n\n            if ( ! this.hbarLeft || hbarLeft !== this.hbarLeft ) {\n\n                Dom.find(this.$refs.hbar).css({\n                    transform: `translateX(${hbarLeft}px) translateZ(0)`\n                });\n                \n                this.hbarLeft = hbarLeft;\n            }\n        },\n\n        adaptHeight()\n        {\n            if ( ! this.cacheChildEl ) {\n                this.cacheChildEl = Dom.find(this.$refs.content).child();\n            }\n\n            let height = this.cacheChildEl\n                .height();\n\n            if ( ! this.cacheWindwoEl ) {\n                this.cacheWindwoEl = Dom.find(this.$el);\n            }\n\n            let window = this.cacheWindwoEl\n                .innerHeight();\n\n            if ( height === this.passedHeight && window === this.windowCache ) {\n                return;\n            }\n\n            this.windowCache = window;\n\n            if ( this.overflowY ) {\n                this.adaptScrollHeight();\n            }\n\n            if ( window ) {\n                this.passedHeight = height;\n            }\n\n            let style = {\n                height: (height + 1) + 'px'\n            };\n\n            if ( ! this.relative ) {\n                return Any.delay(this.onSizechange, 100);\n            }\n\n            Dom.find(this.$refs.spacer).child().css(style);\n        },\n\n        bindAdaptHeight()\n        {\n            this.refreshHeight = setInterval(this.adaptHeight, \n                1000 / this.framerate);\n        },\n\n        unbindAdaptHeight()\n        {\n            clearInterval(this.refreshHeight);\n        },\n\n        adaptWidth()\n        {\n            if ( this.resizeTimer ) {\n                return;\n            }\n\n            let width = Dom.find(this.$refs.content)\n                .child().width();\n\n            let window = Dom.find(this.$el)\n                .innerWidth();\n\n            if ( width === this.passedWidth ) {\n                return;\n            }\n\n            if ( this.overflowX ) {\n                this.adaptScrollWidth();\n            }\n\n            if ( window ) {\n                this.passedWidth = width;\n            }\n\n            let style = {\n                width: width + 'px'\n            };\n\n            if ( this.fixture ) {\n                this.onUpdate();\n            }\n\n            if ( ! this.relative ) {\n                return Any.delay(this.onSizechange, 100);\n            }\n\n            Dom.find(this.$refs.spacer).child().css(style);\n        },\n\n        bindAdaptWidth()\n        {\n            this.refreshWidth = setInterval(this.adaptWidth, \n                1000 / this.framerate);\n        },\n\n        unbindAdaptWidth()\n        {\n            clearInterval(this.refreshWidth);\n        },\n\n        onScroll(event)\n        {\n            let scroll = {\n                top: this.$refs.content.scrollTop,\n                left: this.$refs.content.scrollLeft\n            };\n\n            let scrollUpdate = () => {\n                this.$emit('scrollupdate', scroll.top, scroll.left);\n            }\n            \n            this.$nextTick(scrollUpdate);\n            this.adaptScrollPosition(scroll);\n        },\n\n        onSizechange(event)\n        {\n            let height = Dom.find(this.$el).height();\n            let width = Dom.find(this.$el).width();\n\n            if ( ! height || ! width ) {\n                return;\n            }\n\n            if ( this.passedHeight || this.passedWidth ) {\n                Dom.find(this.$el).addClass('is-ready');\n            }\n\n            this.$emit('sizechange', height, width, this.$el);\n        },\n\n        onResize()\n        {\n            if ( ! this.fixture ) {\n                return;\n            }\n\n            Dom.find(this.$refs.content)\n                .child().css(null);\n\n            clearTimeout(this.resizeTimer);\n\n            this.resizeTimer = setTimeout(\n                this.onUpdate, 500);\n            \n            Dom.find(this.$el).fire('resized');\n        },\n\n        onUpdate()\n        {\n            if ( ! this.fixture ) {\n                return;\n            }\n\n            let $inner = Dom.find(this.$refs.content)\n                .child();\n\n            let height = $inner.actual(() => {\n                return $inner.scrollHeight();\n            });\n\n            if ( height !== this.passedHeight ) {\n                $inner.css({ height: height + 'px' });\n            }\n\n            let width = $inner.actual(() => {\n                return $inner.scrollWidth();\n            });\n\n            if ( width !== this.passedWidth ) {\n                $inner.css({ width: width + 'px' });\n            }\n\n            delete this.resizeTimer;\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onVbarMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.stopPropagation();\n\n            Dom.find(document).on(this.mousemove, \n                this.onVbarMousemove, this._.uid);\n\n            Dom.find(document).on(this.mouseup, \n                this.onVbarMouseup, this._.uid);\n\n            this.scrollTop = this.$refs.content\n                .scrollTop;\n\n            this.clientY = this.getTouchEvent(event)\n                .clientY;\n        },\n\n        onVbarMousemove(event)\n        {\n            let clientY = this.getTouchEvent(event)\n                .clientY;\n\n            let top = (this.outerHeight / this.innerHeight) * \n                this.scrollTop * this.heightRatio;\n\n            let offset = (clientY - this.clientY) + top;\n\n            let height = (this.outerHeight - \n                    this.barHeight - this.offsetY);\n\n            this.$refs.content.scrollTop = offset / height * \n                (this.innerHeight - this.outerHeight);\n        },\n\n        onVbarMouseup(event)\n        {\n            Dom.find(document).off(this.mousemove, \n                null, this._.uid);\n\n            Dom.find(document).off(this.mouseup, \n                null, this._.uid);\n        },\n\n        onHbarMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n            \n            event.stopPropagation();\n\n            Dom.find(document).on(this.mousemove, \n                this.onHbarMousemove, this._.uid);\n\n            Dom.find(document).on(this.mouseup, \n                this.onHbarMouseup, this._.uid);\n\n            this.scrollLeft = this.$refs.content\n                .scrollLeft;\n\n            this.clientX = event.clientX;\n        },\n\n        onHbarMousemove(event)\n        {\n            let top = (this.outerWidth / this.innerWidth) * \n                this.scrollLeft * this.widthRatio;\n\n            let offset = (event.clientX - this.clientX) + top;\n\n            let width = (this.outerWidth - \n                    this.barWidth - this.offsetX);\n\n            this.$refs.content.scrollLeft = offset / width * \n                (this.innerWidth - this.outerWidth);\n        },\n\n        onHbarMouseup(event)\n        {\n            Dom.find(document).off(this.mousemove, \n                null, this._.uid);\n\n            Dom.find(document).off(this.mouseup, \n                null, this._.uid);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-scrollbar'\n        ];\n\n        if ( this.native ) {\n            classList.push('n-scrollbar--native');\n        }\n\n        if ( this.touch ) {\n            classList.push('n-scrollbar--touch');\n        }\n\n        if ( window.WIN ) {\n            classList.push('n-windows');\n        }\n\n        if ( this.overflowY ) {\n            classList.push('n-overflow-y');\n        }\n\n        if ( this.overflowX ) {\n            classList.push('n-overflow-x');\n        }\n\n        let vbarProps = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.onVbarMousedown\n        };\n\n        let hbarProps = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.onHbarMousedown\n        };\n\n        return (\n            <div class={classList} {...Obj.except(this.$attrs, ['class'])}>\n                <div class=\"n-scrollbar-content\" ref=\"content\">\n                    <div class={this.wrapClass}>\n                        { this.$slots.default && this.$slots.default() }\n                    </div>\n                </div>\n                <div class=\"n-scrollbar-spacer\" ref=\"spacer\">\n                    <div class={this.wrapClass}>\n                        { /* Adapt inner height */ }\n                    </div>\n                </div>\n                <div ref=\"hbar\" class=\"n-scrollbar-h\" {...hbarProps}></div>\n                <div ref=\"vbar\" class=\"n-scrollbar-v\" {...vbarProps}></div>\n            </div>\n        );\n    }\n\n}\n","import Scrollbar from './src/scrollbar/scrollbar.next';\n\nexport default function (App) {\n    App.component(Scrollbar.name, Scrollbar);\n}","import { UUID, Num, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NLoader',\n\n    inject: {\n\n        NLoader: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NLoader: this\n        };\n    },\n\n    props: {\n\n        visible: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        minimum: {\n            default()\n            {\n                return 300;\n            },\n            type: [Number]\n        },\n\n        debounce: {\n            default()\n            {\n                return 300;\n            },\n            type: [Number]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempVisible: this.visible\n        };\n    },\n\n    methods: {\n\n        applyTimer()\n        {\n            this.timing = Date.now();\n\n            if ( this.visible) {\n                return this.tempVisible = this.visible;\n            }\n\n            this.startTimer();\n        },\n\n        startTimer()\n        {\n            let timing = Date.now() - this.timing;\n\n            if ( timing < this.minimum ) {\n                return this.restartTimer(timing);\n            }\n\n            this.timeout = setTimeout(() => this.tempVisible = false, \n                this.debounce);\n        },\n\n        restartTimer(timing = 0) {\n            Any.delay(this.startTimer, this.minimum - timing + 10);\n        }\n\n    },\n\n    watch: {\n\n        visible()\n        {\n            this.applyTimer();\n        }\n\n    },\n\n    mounted()\n    {\n        this.applyTimer();\n    },\n\n    render()\n    {\n        let classList = [\n            'n-loader', \n            'n-loader--' + this.size, \n            'n-loader--' + this.type\n        ];\n\n        if ( this.tempVisible ) {\n            classList.push('n-load');\n        }\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import Loader from './src/loader/loader';\n\nexport default function (App) {\n    App.component(Loader.name, Loader);\n}\n","import { UUID, Arr, Obj, Dom, Any, Str, Locale, Event, Num } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NResizer',\n\n    inject: {\n\n        NScrollbar: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        minWidth: {\n            default()\n            {\n                return 60;\n            },\n            type: [Number]\n        },\n\n        maxWidth: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        group: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        position: {\n            default()\n            {\n                return 'right';\n            },\n            type: [String]\n        },\n\n        resizerWidth: {\n            default()\n            {\n                return 6;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            sizeFixed: false,\n            tempValue: this.modelValue,\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n    },\n\n    mounted()\n    {\n        if ( ! this.modelValue ) {\n            this.updateWidth();\n        }\n\n        if ( this.NScrollbar ) {\n            this.bindSizechange();\n        }\n\n        Event.bind('NResizer:move', \n            this.forceWidth, this._.uid);\n\n        Dom.find(window).on('resize', \n            Any.debounce(this.onResize, 500), this._.uid);\n    },\n\n    updated()\n    {\n        this.updateWidth();\n    },\n\n    unmounted()\n    {\n        if ( this.NScrollbar ) {\n            this.unbindSizechange();\n        }\n\n        Event.unbind('NResizer:move', \n            this._.uid);\n        \n        Dom.find(window).off('resize', \n            null, this._.uid);\n    },\n\n    methods: {\n\n        forceWidth(group)\n        {\n            if ( ! Arr.has(group, this.group) ) {\n                return;\n            }\n            \n            if ( ! this.tempValue || ! this.group.length ) {\n                return;\n            }\n\n            this.sizeFixed = true;\n\n            let style = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(style);\n        },\n\n        updateWidth()\n        {\n            let width = Dom.find(this.$el)\n                .width();\n\n            if ( width === this.tempValue ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = width);\n            \n            this.updateHandle();\n        },\n\n        updateHandle()\n        {\n            let style = {};\n\n            if ( this.position === 'left' ) {\n                style.transform =`translateX(-${this.tempValue - this.resizerWidth}px)`\n            }\n    \n            if ( this.position === 'right' ) {\n                style.transform = `translateX(${this.tempValue - this.resizerWidth}px)`\n            }\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        bindSizechange()\n        {\n            Dom.find(this.NScrollbar.$el).on('resized', \n                Any.debounce(this.updateWidth, 50), this._.uid);\n        },\n\n        unbindSizechange()\n        {\n            Dom.find(this.NScrollbar.$el)\n                .off('resized', null, this._.uid);\n        },\n\n\n        onResize()\n        {\n            if ( this.NScrollbar ) {\n                return;\n            }\n\n            this.updateWidth();\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onLeftMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:move', this.group);\n            }\n\n            Dom.find(this.$el).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onLeftMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onLeftMousemove, 60), this._.uid);\n        },\n\n        onLeftMousemove(event)\n        {\n            this.clientX = (window.innerWidth - \n                this.getTouchEvent(event).clientX);\n\n            let offsetX = Dom.find(this.$el)\n                .offset('right');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('right');\n\n            let targetWidth = (this.clientX + scrollX - offsetX) -\n                (this.resizerWidth / 2);\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth,\n                    this.minWidth - this.resizerWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth,\n                    this.maxWidth - this.resizerWidth);\n            }\n\n            let style = {\n                transform: `translateX(-${targetWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        onLeftMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n\n            if ( ! this.clientX ) {\n                return;\n            }\n\n            let offsetX = Dom.find(this.$el)\n                .offset('right');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('right');\n\n            let targetWidth = this.clientX + scrollX - offsetX;\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth, this.minWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth, this.maxWidth);\n            }\n\n            this.tempValue = Math.round(targetWidth);\n\n            Dom.find(this.$el).removeClass('n-move');\n\n            let style = {\n                transform: `translateX(-${targetWidth - this.resizerWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n\n            let frameStyle = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(frameStyle);\n\n            delete this.clientX;\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:moved', this.group);\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        onRightMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:move', this.group);\n            }\n\n            Dom.find(this.$el).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onRightMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onRightMousemove, 60), this._.uid);\n        },\n\n        onRightMousemove(event)\n        {\n            this.clientX = this.getTouchEvent(event).clientX;\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('left');\n\n            let targetWidth = (this.clientX + scrollX - offsetX) -\n                (this.resizerWidth / 2);\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth,\n                    this.minWidth - this.resizerWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth,\n                    this.maxWidth - this.resizerWidth);\n            }\n\n            let style = {\n                transform: `translateX(${targetWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        onRightMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n\n            if ( ! this.clientX ) {\n                return;\n            }\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('left');\n\n            let targetWidth = this.clientX + scrollX - offsetX;\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth, this.minWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth, this.maxWidth);\n            }\n\n            this.tempValue = Math.round(targetWidth);\n\n            Dom.find(this.$el).removeClass('n-move');\n\n            let style = {\n                transform: `translateX(${targetWidth - this.resizerWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n\n            let frameStyle = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(frameStyle);\n\n            delete this.clientX;\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:moved', this.group);\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        }\n\n    },\n\n    renderHandle()\n    {\n        if ( this.disabled ) {\n            return null;\n        }\n        \n        let classList = [\n            'n-resizer__handle',\n        ];\n\n        let props = {};\n\n        if ( this.position === 'right' ) {\n            props['on' + Str.ucfirst(this.mousedown)] = this.onRightMousedown;\n        }\n\n        if ( this.position === 'left' ) {\n            props['on' + Str.ucfirst(this.mousedown)] = this.onLeftMousedown;\n        }\n\n        if ( this.resizerWidth ) {\n            props.width = this.resizerWidth + 'px';\n        }\n\n        return (\n            <div ref=\"handle\" class={classList} {...props}/>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-resizer',\n            'n-resizer--' + this.position,\n        ];\n\n        let style = {};\n\n        if ( this.width && ! this.tempValue ) {\n            style['width'] = this.width + 'px';\n        }\n\n        if ( this.width ) {\n            style['flex-basis'] = this.width + 'px';\n        }\n\n        if ( this.minWidth ) {\n            style['min-width'] = this.minWidth + 'px';\n        }\n\n        if ( this.maxWidth ) {\n            style['max-width'] = this.maxWidth + 'px';\n        }\n\n        return (\n            <div class={classList} style={style}>\n                { [this.$slots.default(), this.ctor('renderHandle')()] }\n            </div>\n        );\n    }\n\n}\n","import Resizer from './src/resizer/resizer';\n\nexport default function (App) {\n    App.component(Resizer.name, Resizer);\n}\n","import { UUID, Num, Arr, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NModal',\n\n    inject: {\n\n        NScrollbar: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        update: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        selector: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        width: {\n            default()\n            {\n                return '50%';\n            },\n            type: [String]\n        },\n\n        height: {\n            default()\n            {\n                return 'auto';\n            },\n            type: [String]\n        },\n\n        title: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'center-center';\n            },\n            type: [String]\n        },\n\n        closable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        renderClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n        tempValue()\n        {\n            this.startRefreshTimeout();\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NModal: this\n        };\n    },\n\n    data()\n    {\n        return {\n            target: null, tempValue: false\n        };\n    },\n\n    mounted()\n    {\n        this.target = Dom.find(this.selector || this.$el)\n            .previous().get(0);\n\n        Dom.find(document.body).on('mousedown',\n            this.eventClick, this._.uid);\n\n        Dom.find(document.body).on('keydown',\n            this.eventKeydown, this._.uid);\n\n        let showModal = () => {\n            this.tempValue = true;\n        };\n\n        if ( this.modelValue ) {\n            Any.delay(showModal, 100);\n        }\n\n        Dom.find(document.body).append(this.$el);\n    },\n\n    beforeUnmount()\n    {\n        this.$el.remove();\n    },\n\n    unmounted()\n    {\n        Dom.find(document.body).off('mousedown',\n            null, this._.uid);\n\n        Dom.find(document.body).off('keydown',\n            null, this._.uid);\n    },\n\n    methods: {\n\n        openModal(force = false, source = null)\n        {\n            if ( this.tempValue ) {\n                return;\n            }\n\n            if ( this.closable || force ) {\n                this.tempValue = true;\n            }\n\n            this.$emit('update:modelValue', true, source);\n        },\n\n        closeModal(force = false, source = null)\n        {\n            if ( ! this.tempValue ) {\n                return;\n            }\n\n            if ( ! this.update ) {\n                return this.$emit('close', source);\n            }\n\n            if ( this.closable || force ) {\n                this.tempValue = false;\n            }\n\n            this.$emit('update:modelValue', false, source);\n        },\n\n        stopRefreshTimeout()\n        {\n            clearTimeout(this.refresh);\n\n            Dom.find(this.$el).removeClass('n-ready');\n        },\n\n        startRefreshTimeout()\n        {\n            if ( ! this.tempValue ) {\n                return this.stopRefreshTimeout();\n            }\n\n            window.zIndex += 1;\n\n            Dom.find(this.$el).attr('data-modal',\n                window.zIndex);\n\n            Dom.find(this.$el).css({\n                'z-index': window.zIndex\n            });\n\n            this.queueRefreshTimeout();\n        },\n\n        queueRefreshTimeout()\n        {\n            if ( ! this.tempValue ) {\n                return this.stopRefreshTimeout();\n            }\n\n            this.refresh = setTimeout(() => {\n                Dom.find(this.$el).addClass('n-ready');\n            }, 100);\n        },\n\n        eventClick(event, el)\n        {\n            if ( this.disabled || event.which !== 1 ) {\n                return;\n            }\n\n            let result = !! Dom.find(el).closest(this.target);\n\n            if ( ! result && ! this.tempValue ) {\n                return;\n            }\n\n            if ( this.tempValue && this.closable ) {\n                result = ! Dom.find(el).closest(this.$refs.backdrop);\n            }\n\n            if ( result === this.tempValue ) {\n                return;\n            }\n\n            if ( ! result ) {\n                return this.closeModal(false, 'escape');\n            }\n\n            if ( this.listen ) {\n                this.openModal(true, 'selector');\n            }\n        },\n\n        eventKeydown(event, el)\n        {\n            if ( ! this.tempValue || event.which !== 27 ) {\n                return;\n            }\n\n            let extractIndex = (modal) => {\n                return Dom.find(modal).attr('data-modal');\n            };\n\n            let indexes = Dom.find('.n-modal:not(.n-hidden)')\n                .each(extractIndex);\n\n            let index = Dom.find(this.$el).attr('data-modal');\n\n            if ( Arr.last(indexes.sort()) !== index ) {\n                return;\n            }\n\n            this.closeModal(false, 'escape');\n        },\n\n    },\n\n    renderClose()\n    {\n        if ( ! this.renderClose || ! this.closable ) {\n            return null;\n        }\n\n        let props = {\n            onClick: () => this.closeModal(false, 'escape')\n        };\n\n        return (\n            <div class=\"n-modal__close\" {...props}>\n                <span class={nano.Icons.times}></span>\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( ! this.$slots.header && ! this.title ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-modal__header\">\n                { [this.$slots.header && this.$slots.header({ closeModal: this.closeModal }) || this.title, this.ctor('renderClose')()] }\n            </div>\n        );\n    },\n\n    renderFooter()\n    {\n        if ( ! this.$slots.footer ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-modal__footer\">\n                { this.$slots.footer({ closeModal: this.closeModal }) }\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        let bodyHtml = (\n            <NScrollbar ref=\"scrollbar\" relative={true} wrapClass=\"n-modal__wrap\">\n                { this.$slots.default && this.$slots.default({ closeModal: this.closeModal }) }\n            </NScrollbar>\n        );\n\n        if ( this.$slots.body ) {\n            bodyHtml = this.$slots.body({ closeModal: this.closeModal });\n        }\n\n        return (\n            <div class=\"n-modal__body\">\n                { bodyHtml }\n            </div>\n        );\n    },\n\n    renderFrame()\n    {\n        if ( ! this.tempValue ) {\n            return null;\n        }\n\n        let style = {\n            width: this.width, height: this.height\n        };\n\n        let innerHtml = [\n            this.ctor('renderHeader')(),\n            this.ctor('renderBody')(),\n            this.ctor('renderFooter')(),\n        ]\n\n        return (\n            <div class=\"n-modal__frame\" style={style}>\n                { this.$slots.raw ? this.$slots.raw() : innerHtml }\n            </div>\n        );\n    },\n\n    renderBackdrop()\n    {\n        return (\n            <div ref=\"backdrop\" class=\"n-modal__backdrop\"></div>\n        );\n    },\n\n    render()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let classList = [\n            'n-modal',\n            'n-modal--' + this.size,\n            'n-modal--' + this.type,\n            'n-modal--' + this.position\n        ];\n\n        if ( this.tempValue ) {\n            this.queueRefreshTimeout();\n        }\n\n        if ( this.renderClose ) {\n            classList.push('n-closable');\n        }\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        let innerHtml = null;\n\n        if ( this.tempValue ) {\n            innerHtml = this.ctor('renderFrame')();\n        }\n\n        return (\n            <div class={classList}>\n                { [innerHtml, this.ctor('renderBackdrop')()] }\n            </div>\n        );\n    }\n\n}\n","import Modal from './src/modal/modal';\n\nexport default function (App) {\n    App.component(Modal.name, Modal);\n}\n","import { h } from \"vue\";\nimport { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInput',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        }\n\n    },\n\n    inheritAttrs: false,\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'after';\n            },\n            type: [String]\n        },\n\n        iconDisabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        nativeType: {\n            default()\n            {\n                return 'text';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false, tempValue: this.modelValue || ''\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        onIconClick(event)\n        {\n            if ( event.clientX || event.clientY ) {\n                this.$emit('icon-click', event);\n            }\n        },\n\n        onInput(event)\n        {\n            this.$emit('update:modelValue',\n                this.tempValue = event.target.value);\n        },\n\n        onKeydown(event)\n        {\n            if ( event.which !== 13 ) {\n                return;\n            }\n\n            event.preventDefault();\n\n            if ( ! this.NForm ) {\n                return;\n            }\n\n            this.NForm.onSubmit(event);\n        },\n\n        onFocus(event)\n        {\n            this.focus = true;\n        },\n\n        onBlur(event)\n        {\n            this.focus = false;\n        }\n\n    },\n\n    renderIcon()\n    {\n        if ( !this.icon ) {\n            return null;\n        }\n\n        let disabled = this.disabled ||\n            this.iconDisabled;\n\n        let props = {\n            type: 'input',\n            icon: this.icon,\n            size: this.size,\n            square: true,\n            disabled: disabled,\n        };\n\n        if ( !disabled ) {\n            props.onClick = this.onIconClick;\n        }\n\n        return (<NButton {...props} />);\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs, [\n            'class', 'style'\n        ]);\n\n        Obj.assign(props, {\n            value: this.tempValue,\n            type: this.nativeType,\n            disabled: this.disabled,\n            placeholder: this.placeholder,\n            onInput: this.onInput,\n            onFocus: this.onFocus,\n            onBlur: this.onBlur,\n            onKeydown: this.onKeydown\n        });\n\n        return h('input', props);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-input',\n            'n-input--' + this.size,\n            'n-input--' + this.type,\n        ];\n\n        if ( this.icon ) {\n            classList.push('n-input--icon');\n            classList.push('n-input--icon-' + this.iconPosition);\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        let props = Obj.only(this.$attrs, ['style'], {\n            class: this.cmer(classList)\n        });\n\n        let innerHtml = [];\n\n        if ( this.iconPosition === 'before' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        innerHtml.push(this.ctor('renderInput')());\n\n        if ( this.iconPosition === 'after' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        return h('div', props, innerHtml);\n    }\n\n}\n","import Input from './src/input/input';\n\nexport default function (App) {\n    App.component(Input.name, Input);\n}\n","import { Arr, Obj, Num, Now, Any, Dom, Locale } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NInputNumber',\n\n    inheritAttrs: false,\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        min: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return Number.MAX_VALUE;\n            },\n            type: [Number]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        stepSize: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        precision: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        format: {\n            default()\n            {\n                return ':count';\n            },\n            type: [String]\n        },\n\n        decimals: {\n            default()\n            {\n                return Locale.trans('.');\n            },\n            type: [String]\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = Num.float(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false, tempValue: Num.float(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        clear()\n        {\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n        getDisplayValue()\n        {\n            if ( Any.isNull(this.modelValue) ) {\n                return null;\n            }\n\n            let value = Num.format(this.tempValue,\n                this.decimals, ' ', this.precision);\n\n            return Locale.trans(this.format, { count: value });\n        },\n\n        nextStep()\n        {\n            if ( isNaN(this.tempValue) ) {\n                this.tempValue = 0;\n            }\n\n            let value = this.tempValue + this.stepSize;\n\n            if ( this.max < value ) {\n                return;\n            }\n\n            value = Num.float(value).toFixed(this.precision);\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n        },\n\n        onNextDown()\n        {\n            this.nextStep();\n\n            this.nextTimeout = setTimeout(() => {\n                this.nextInterval = setInterval(this.nextStep, 100);\n            }, 400);\n\n            Dom.find(document).on('mouseup', this.onNextUp,\n                this._.uid);\n        },\n\n        onNextUp()\n        {\n            clearTimeout(this.nextTimeout);\n            clearInterval(this.nextInterval);\n\n            Dom.find(document).off('mouseup', null,\n                this._.uid);\n        },\n\n        prevStep()\n        {\n            if ( isNaN(this.tempValue) ) {\n                this.tempValue = 0;\n            }\n\n            let value = this.tempValue - this.stepSize;\n\n            if ( this.min > value ) {\n                return;\n            }\n\n            value = Num.float(value).toFixed(this.precision);\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n        },\n\n        onPrevDown()\n        {\n            this.prevStep();\n\n            this.prevTimeout = setTimeout(() => {\n                this.prevInterval = setInterval(this.prevStep, 100);\n            }, 400);\n\n            Dom.find(document).on('mouseup', this.onPrevUp,\n                this._.uid);\n        },\n\n        onPrevUp()\n        {\n            clearTimeout(this.prevTimeout);\n            clearInterval(this.prevInterval);\n\n            Dom.find(document).off('mouseup', null,\n                this._.uid);\n        },\n\n        onKeydown(event)\n        {\n            if ( event.which === 13 ) {\n                this.onInput(event);\n            }\n        },\n\n        onFocus(event)\n        {\n            this.focus = true;\n        },\n\n        onBlur(event)\n        {\n            this.onInput(event);\n\n            this.focus = false;\n        },\n\n        onInput(event)\n        {\n            let value = event.target.value;\n\n            let format = this.format.replace(':count',\n                `([0-9\\\\,\\\\.\\\\-\\\\s]+)`);\n\n            let regex = new RegExp(`^${format}$`);\n\n            let match = value.match(regex);\n\n            if ( ! match ) {\n                return event.target.value = this.getDisplayValue();\n            }\n\n            value = match[1].replace(',', '.')\n                .replace(/\\s/, '');\n\n            value = Num.float(value).toFixed(this.precision);\n\n            if ( value < this.min ) {\n                value = this.min;\n            }\n\n            if ( value > this.max ) {\n                value = this.max;\n            }\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n\n            event.target.value = this.getDisplayValue();\n        }\n\n    },\n\n    renderPrev()\n    {\n        let disabled = this.disabled ||\n            this.tempValue <= this.min;\n\n        let props = {\n            type:       'input-number',\n            size:       this.size,\n            icon:       'fa fa-minus',\n            square:     true,\n            disabled:   disabled,\n            onMousedown:    this.onPrevDown,\n        };\n\n        return (<NButton {...props} />);\n    },\n\n    renderNext()\n    {\n        let disabled = this.disabled ||\n            this.tempValue >= this.max;\n\n        let props = {\n            type:       'input-number',\n            size:       this.size,\n            icon:       'fa fa-plus',\n            square:     true,\n            disabled:   disabled,\n            onMousedown:    this.onNextDown,\n        };\n\n        return (<NButton {...props} />);\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs,\n            ['class', 'style']);\n\n        Obj.assign(props, {\n            disabled:       this.disabled,\n            placeholder:    this.placeholder,\n            onKeydown:      this.onKeydown,\n            onFocus:         this.onFocus,\n            onBlur:         this.onBlur,\n        });\n\n        if ( this.modelValue !== null ) {\n            props.value = this.getDisplayValue();\n        }\n\n        return h('input', props);\n    },\n\n    renderClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clear;\n        }\n\n        return (\n            <div class=\"n-input-number__clear\" {...props}>\n                <i class={nano.Icons.times}></i>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-input-number',\n            'n-input-number--' + this.type,\n            'n-input-number--' + this.size,\n        ];\n\n        if ( Any.isEmpty(this.modelValue) ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderPrev')() }\n                { this.ctor('renderInput')() }\n                { this.ctor('renderClear')() }\n                { this.ctor('renderNext')() }\n            </div>\n        );\n    }\n\n}","import InputNumber from \"./src/input-number/input-number\";\n\nexport default function (App) {\n    App.component(InputNumber.name, InputNumber);\n}","import { h } from \"vue\";\nimport {Obj, Any, UUID} from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTextarea',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        autoRows: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        maxRows: {\n            default()\n            {\n                return 12;\n            },\n            type: [Number]\n        },\n\n        minRows: {\n            default()\n            {\n                return 4;\n            },\n            type: [Number]\n        },\n\n        maxLength: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        eventInput(event)\n        {\n            this.$emit('update:modelValue', \n                this.tempValue = event.target.value);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue || ''\n        };\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs, ['class', 'style']);\n\n        Obj.assign(props, {\n            value:          this.tempValue,\n            rows:           this.minRows,\n            disabled:       this.disabled,\n            placeholder:    this.placeholder,\n            onInput:        this.eventInput,\n        });\n\n        if ( this.maxLength !== 0 ) {\n            props.maxLength = this.maxLength;\n        }\n\n        let currentRows = (this.tempValue.match(/\\n/g) || []).length + 1;\n\n        if ( this.autoRows && props.rows < currentRows ) {\n            props.rows = currentRows <= this.maxRows ? currentRows : this.maxRows;\n        }\n\n        return h('textarea', props);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-textarea',\n            'n-textarea--' + this.size,\n            'n-textarea--' + this.type,\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.only(this.$attrs, ['style'], {\n            class: this.cmer(classList)\n        });\n\n        return h('div', props, [this.ctor('renderInput')()]);\n    }\n\n}\n","import Textarea from './src/textarea/textarea';\n\nexport default function (App) {\n    App.component(Textarea.name, Textarea);\n}","import { Obj, Arr, Any, Num, Dom, Event } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSlider',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        steps: {\n            default()\n            {\n                return 1;\n            }\n        },\n\n        labels: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        min: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return 100;\n            },\n            type: [Number]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            index: 0, width: null, tempValue: [null, null]\n        };\n    },\n\n    computed: {\n\n        selector()\n        {\n            return `[data-index=\"${this.index}\"]`;\n        },\n\n        fixmin()\n        {\n            return Any.isArray(this.steps) ? Arr.first(this.steps) : this.min;\n        },\n\n        fixmax()\n        {\n            return Any.isArray(this.steps) ? Arr.last(this.steps) : this.max;\n        },\n\n        minmax()\n        {\n            return this.fixmax - this.fixmin;\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            this.getPseudoValue();\n        }\n\n    },\n\n    mounted()\n    {\n        Dom.find(window).on('resize',\n            Any.debounce(this.onResize, 500), this._.uid);\n\n        this.onResize();\n        this.getPseudoValue();\n    },\n\n    unmounted()\n    {\n        Dom.find(window).off('resize',\n            null, this._.uid);\n    },\n\n    methods: {\n\n        onResize()\n        {\n            this.width = Dom.find(this.$el).width();\n        },\n\n        getPseudoValue()\n        {\n            let value = this.modelValue;\n\n            if ( Any.isNull(value) ) {\n                value = this.fixmax;\n            }\n            if ( ! Any.isArray(value) ) {\n                value = [this.fixmin, value];\n            }\n\n            return this.tempValue = value;\n        },\n\n        setModelValue()\n        {\n            let value = this.tempValue;\n\n            if ( ! this.range ) {\n                value = this.tempValue[1];\n            }\n\n            this.$emit('update:modelValue', value);\n        },\n\n        getValPos(value)\n        {\n            return Num.fixed(this.width / this.minmax * (value - this.fixmin), 2) + 'px';\n        },\n\n        getValStyle(value)\n        {\n            return 'transform: translateX(' + this.getValPos(value) + ');';\n        },\n\n        getBarPos()\n        {\n            return Num.fixed(this.width / this.minmax * (this.tempValue[0] - this.fixmin), 2) + 'px';\n        },\n\n        getBarWidth()\n        {\n            return Num.fixed(this.width / this.minmax * (this.tempValue[1] - this.tempValue[0]), 2) + 'px';\n        },\n\n        getBarStyle()\n        {\n            return 'max-width: ' + this.getBarWidth() + '; ' +\n                'transform: translateX(' + this.getBarPos() + ');';\n        },\n\n        getClosestValue(width)\n        {\n            if ( Any.isNumber(this.steps) ) {\n                return Num.round(width / this.steps) * this.steps;\n            }\n\n            let range = Arr.last(this.steps) -\n                Arr.first(this.steps);\n\n            let diff = Arr.each(this.steps, (step) => {\n                return Math.abs((range / 100 * width) - step + this.fixmin);\n            });\n\n            let index = Arr.findIndex(diff, Math.min(...diff));\n\n            return this.steps[index];\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(this.$el).find(this.selector).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onMousemove, 60), this._.uid);\n        },\n\n        onMousemove(event)\n        {\n            this.clientX = this.getTouchEvent(event).clientX;\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let relativeWidth = (this.clientX - offsetX) / this.width * 100;\n\n            let closestValue = this.getClosestValue(relativeWidth);\n\n            if ( closestValue < this.fixmin ) {\n                closestValue = this.fixmin;\n            }\n\n            if ( closestValue > this.fixmax ) {\n                closestValue = this.fixmax;\n            }\n\n            let stepMin = this.tempValue[0] + this.steps;\n\n            if ( this.index === 1 && closestValue < stepMin ) {\n                closestValue = stepMin;\n            }\n\n            let stepMax = this.tempValue[1] - this.steps;\n\n            if ( this.index === 0 && closestValue > stepMax ) {\n                closestValue = stepMax;\n            }\n\n            this.tempValue[this.index] = closestValue;\n        },\n\n        onMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n\n            Dom.find(this.$el).find(this.selector).removeClass('n-move');\n            Dom.find(document.body).removeClass('n-move');\n\n            this.setModelValue();\n        },\n\n    },\n\n    renderHandle(value, index)\n    {\n        let handleProps = {\n            'data-value': value,\n            'data-index': index,\n            style: this.getValStyle(value)\n        };\n\n        handleProps['onMousedown'] = (event) => {\n            this.onMousedown(event, this.index = index);\n        };\n\n        let key = Arr.findIndex(this.steps, value);\n\n        return (\n            <div class=\"n-slider__handle\" {...handleProps}>\n                <span>{ Obj.get(this.labels, key, value) }</span>\n            </div>\n        );\n    },\n\n    renderHandles()\n    {\n        let values = Arr.clone(this.tempValue);\n\n        if ( ! this.range ) {\n            delete values[0];\n        }\n\n        return Arr.each(values, (value, index) => {\n            return this.ctor('renderHandle')(value, index);\n        });\n    },\n\n    renderBar()\n    {\n        let barProps = {\n            style: this.getBarStyle()\n        };\n\n        return (\n            <div class=\"n-slider__bar\">\n                <div class=\"n-slider__range\" {...barProps}></div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-slider',\n            'n-slider--' + this.size\n        ];\n\n        if ( this.range ) {\n            classList.push('n-range');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderBar')() }\n                { this.ctor('renderHandles')() }\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Slider from './src/slider/slider';\n\nexport default function (App) {\n    App.component(Slider.name, Slider);\n}","import { Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSwitch',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        onValue: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        offValue: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        onType: {\n            default()\n            {\n                return 'primary';\n            }\n        },\n\n        offType: {\n            default()\n            {\n                return 'default';\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        eventClick()\n        {\n            let tempValue = this.onValue;\n\n            if ( this.tempValue === this.onValue ) {\n                tempValue = this.offValue;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = tempValue);\n        }\n\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        }\n\n    },\n\n    renderSwitch()\n    {\n        let classList = [\n            'n-switch__switch'\n        ];\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.eventClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span></span>\n            </div>\n        )\n    },\n\n    renderLabel()\n    {\n        if ( ! this.$slots.default ) {\n            return null;\n        }\n\n        let classList = [\n            'n-switch__label',\n        ];\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.eventClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { this.$slots.default() }\n            </div>\n        )\n    },\n\n    render()\n    {\n        let classList = [\n            'n-switch',\n            'n-switch--' + this.size\n        ];\n\n        if ( this.tempValue === this.onValue ) {\n            classList.push('n-switch--' + this.onType);\n        }\n\n        if ( this.tempValue === this.offValue) {\n            classList.push('n-switch--' + this.offType);\n        }\n\n        if ( this.tempValue === this.onValue ) {\n            classList.push('n-on');\n        }\n\n        if ( this.tempValue === this.offValue ) {\n            classList.push('n-off');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderSwitch')() }\n                { this.ctor('renderLabel')() }\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Switch from './src/switch/switch';\n\nexport default function (App) {\n    App.component(Switch.name, Switch);\n}","import { Obj, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NConfirm',\n\n    props: {\n\n        visible: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        update: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        selector: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        width: {\n            default()\n            {\n                return 'auto';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'center-center';\n            },\n            type: [String]\n        },\n\n        closable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        confirmText: {\n            default()\n            {\n                return Locale.trans('Confirm');\n            },\n            type: [String]\n        },\n\n        abortText: {\n            default()\n            {\n                return Locale.trans('Abort');\n            },\n            type: [String]\n        }\n\n    },\n\n    watch: {\n\n        visible()\n        {\n            if ( this.visible !== this.tempVisible ) {\n                this.tempVisible = this.visible;\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempVisible: this.visible\n        };\n    },\n\n    methods: {\n\n        abort(event)\n        {\n            this.$refs.modal.closeModal(true, 'self');\n            this.$emit('abort');\n        },\n\n        confirm(event)\n        {\n            this.$refs.modal.closeModal(true, 'self');\n            this.$emit('confirm');\n        },\n\n        eventInput(value, source)\n        {\n            if ( ! value && source !== 'self' ) {\n                this.$emit('abort');\n            }\n\n            this.$emit('update:visible', this.tempVisible = value);\n        }\n\n    },\n\n    renderIcon()\n    {\n        return (\n            <div class=\"n-confirm__icon\">\n                <span class={nano.Icons[this.type]}></span>\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-confirm__body\">\n                { this.$slots.default && this.$slots.default() || this.trans('Are you sure?') }\n            </div>\n        );\n    },\n\n    renderAction()\n    {\n        let classList = [\n            'n-confirm__action'\n        ];\n\n        if ( window.WIN ) {\n            classList.push('n-reverse');\n        }\n\n        return (\n            <div class={classList}>\n                <NButton size={this.size} type={this.type} link={true} onClick={this.abort}>\n                    { this.abortText }\n                </NButton>\n                <NButton size={this.size} type={this.type} link={false} onClick={this.confirm}>\n                    { this.confirmText }\n                </NButton>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-confirm',\n            'n-confirm--' + this.type,\n            'n-confirm--' + this.size\n        ];\n\n        let props = {\n            type: 'default',\n            selector: this.selector,\n            listen: this.listen,\n            update: this.update,\n            width: this.width,\n            position: this.position,\n            closable: this.closable,\n            modelValue: this.tempVisible,\n        };\n\n        // Override input listener\n        props['onUpdate:modelValue'] = this.eventInput;\n\n        let innerHtml = {\n            raw: () => (\n                <div class={classList}>\n                    { this.ctor('renderIcon')() }\n                    { this.ctor('renderBody')() }\n                    { this.ctor('renderAction')() }\n                </div>\n            )\n        };\n\n        return (\n            <NModal ref=\"modal\" {...props}>\n                { innerHtml }\n            </NModal>\n        );\n    }\n\n}\n","import Confirm from './src/confirm/confirm';\n\nexport default function (App) {\n    App.component(Confirm.name, Confirm);\n}\n","import { Str, Arr, Obj, Any, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTransfer',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        sourceLabel: {\n            default()\n            {\n                return 'Source';\n            },\n            type: [String]\n        },\n\n        targetLabel: {\n            default()\n            {\n                return 'Target';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        sourceChecked()\n        {\n            return !! this.selectedSource.length && \n                this.selectedSource.length === this.tempSource.length;\n        },\n\n        sourceIntermediate()\n        {\n            return !! this.selectedSource.length && \n                this.selectedSource.length !== this.tempSource.length;\n        },\n\n        targetChecked()\n        {\n            return !! this.selectedTarget.length && \n                this.selectedTarget.length === this.tempTarget.length;\n        },\n\n        targetIntermediate()\n        {\n            return !! this.selectedTarget.length && \n                this.selectedTarget.length !== this.tempTarget.length;\n        },\n\n        tempSource()\n        {\n            let source = Arr.filter(this.options, (item) => {\n                return ! Arr.find(this.tempValue, { [this.uniqueProp]: item[this.uniqueProp] });\n            });\n\n            if ( Any.isEmpty(this.sourceSearch) ) {\n                return Arr.clone(source);\n            }\n\n            let searchPattern = new RegExp(this.sourceSearch, 'i');\n\n            source = Arr.filter(source, (item) => {\n                return item[this.labelProp].match(searchPattern);\n            });\n\n            return Arr.clone(source);\n        },\n\n        tempTarget()\n        {\n            let target = Arr.filter(this.options, (item) => {\n                return !! Arr.find(this.tempValue, { [this.uniqueProp]: item[this.uniqueProp] });\n            });\n\n            if ( Any.isEmpty(this.targetSearch) ) {\n                return Arr.clone(target);\n            }\n\n            let searchPattern = new RegExp(this.targetSearch, 'i');\n\n            target = Arr.filter(target, (item) => {\n                return item[this.labelProp].match(searchPattern);\n            });\n\n            return Arr.clone(target);\n        }\n\n    },\n    data()\n    {\n        return {\n            uid: UUID(),\n            tempValue: this.modelValue,\n            sourceSearch: '',\n            targetSearch: '',\n            selectedSource: [],\n            selectedTarget: []\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        moveItemsTarget(options)\n        {\n            Arr.each(options, (source) => {\n\n                let item = Arr.find(this.options, {\n                    [this.uniqueProp]: source\n                });\n\n                Arr.add(this.tempValue, item, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.$emit('input', this.tempValue);\n        },\n\n        moveItemsSource(options)\n        {\n            Arr.each(options, (source) => {\n\n                Arr.remove(this.tempValue, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.$emit('input', this.tempValue);\n        },\n\n        moveRowTarget(node)\n        {\n            // Get node unique\n            let target = node.value[this.uniqueProp];\n\n            // Remove item from selected list\n            Arr.remove(this.selectedTarget, target);\n\n            this.tempValue = Arr.remove(this.tempValue, {\n                [this.uniqueProp]: target\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveRowSource(node)\n        {\n            // Get node unique\n            let source = node.value[this.uniqueProp];\n\n            // Remove item from selected list\n            Arr.remove(this.selectedSource, source);\n\n            Arr.add(this.tempValue, node.item, source, {\n                [this.uniqueProp]: source\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveToSource()\n        {\n            Arr.each(this.selectedTarget, (target) => {\n\n                Arr.remove(this.tempValue, {\n                    [this.uniqueProp]: target\n                });\n\n            });\n\n            this.selectedTarget = [];\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveToTarget()\n        {\n            Arr.each(this.selectedSource, (source) => {\n\n                let item = Arr.find(this.options, {\n                    [this.uniqueProp]: source\n                });\n\n                Arr.add(this.tempValue, item, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.selectedSource = [];\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        updateSelectedSource(selected)\n        {\n            this.selectedSource = selected;\n        },\n\n        updateSelectedTarget(selected)\n        {\n            this.selectedTarget = selected;\n        }\n\n    },\n\n    renderSourceSelect()\n    {\n        let props = {\n            modelValue: this.sourceChecked,\n            size: this.size,\n            type: this.type,\n            intermediate: this.sourceIntermediate,\n            disabled: ! this.tempSource.length\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.$refs.source.selectAll();\n        };\n\n        return (\n            <div class=\"n-transfer__select\">\n                <NCheckbox {...props} />\n            </div>\n        );\n    },\n\n    renderSourceTitle()\n    {\n        let labelHtml = (\n            <span class=\"n-transfer__item-title\">\n                { this.sourceLabel }\n            </span>\n        );\n\n        let counterHtml = (\n            <span class=\"n-transfer__item-count\">\n                { this.tempSource.length }\n            </span>\n        );\n\n        return (\n            <div class=\"n-transfer__title\">\n                { [labelHtml, counterHtml] }\n            </div>\n        );\n    },\n\n    renderSourceHeader()\n    {\n        return (\n            <div class=\"n-transfer__header\">\n                { this.ctor('renderSourceSelect')() }\n                { this.ctor('renderSourceTitle')() }\n            </div>\n        );\n    },\n\n    renderSourceSearch()\n    {\n        let props = {\n            placeholder: this.trans('Search item'),\n            size: this.size,\n            type: this.type,\n            icon: nano.Icons.times,\n            iconDisabled: ! this.sourceSearch\n        };\n\n        props['onIconClick'] = () => {\n            this.sourceSearch = '';\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.selectedSource = [];\n        };\n\n        return (\n            <div class=\"n-transfer__search\">\n                <NInput vModel={this.sourceSearch} {...props} />\n            </div>\n        )\n    },\n\n    renderSourceBody()\n    {\n        let props = {\n            group: [this.uid + 'source'],\n            allowGroups: [this.uid + 'target'],\n            items: this.tempSource,\n            size: this.size,\n            type: this.type,\n            renderSelect: true,\n            selected: this.selectedSource,\n            safezone: () => -10,\n            disableMove: true,\n            renderNode: this.ctor('renderNode'),\n            onMove: this.moveItemsSource,\n            'onRowDblclick': this.moveRowSource,\n            'onUpdate:selected': this.updateSelectedSource\n        };\n\n        return (\n            <NDraglist ref=\"source\" class=\"n-transfer__body\" {...props} />\n        );\n    },\n\n    renderTargetSelect()\n    {\n        let props = {\n            modelValue: this.targetChecked,\n            size: this.size,\n            type: this.type,\n            intermediate: this.targetIntermediate,\n            disabled: ! this.tempTarget.length\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.$refs.target.selectAll();\n        };\n\n        return (\n            <div class=\"n-transfer__select\">\n                <NCheckbox {...props} />\n            </div>\n        );\n    },\n\n    renderTargetTitle()\n    {\n        let labelHtml = (\n            <span class=\"n-transfer__item-title\">\n                { this.targetLabel }\n            </span>\n        );\n\n        let counterHtml = (\n            <span class=\"n-transfer__item-count\">\n                { this.tempTarget.length }\n            </span>\n        );\n\n        return (\n            <div class=\"n-transfer__title\">\n                { [labelHtml, counterHtml] }\n            </div>\n        );\n    },\n\n    renderTargetHeader()\n    {\n        return (\n            <div class=\"n-transfer__header\">\n                { this.ctor('renderTargetSelect')() }\n                { this.ctor('renderTargetTitle')() }\n            </div>\n        );\n    },\n\n    renderTargetSearch()\n    {\n        let props = {\n            placeholder: this.trans('Search item'),\n            size: this.size,\n            type: this.type,\n            icon: nano.Icons.times,\n            iconDisabled: ! this.targetSearch\n        };\n\n        props['onIconClick'] = () => {\n            this.targetSearch = '';\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.selectedTarget = [];\n        };\n\n        return (\n            <div class=\"n-transfer__search\">\n                <NInput vModel={this.targetSearch} {...props} />\n            </div>\n        )\n    },\n\n    renderTargetBody()\n    {\n        let props = {\n            group: [this.uid + 'target'],\n            allowGroups: [this.uid + 'source'],\n            items: this.tempTarget,\n            size: this.size,\n            type: this.type,\n            renderSelect: true,\n            selected: this.selectedTarget,\n            safezone: () => -1,\n            disableMove: true,\n            renderNode: this.ctor('renderNode'),\n            onMove: this.moveItemsTarget,\n            'onRowDblclick': this.moveRowTarget,\n            'onUpdate:selected': this.updateSelectedTarget\n        };\n\n        return (\n            <NDraglist ref=\"target\" class=\"n-transfer__body\" {...props} />\n        );\n    },\n\n    renderNode(props)\n    {\n        if ( this.$slots.default ) {\n            return this.$slots.default(props);\n        }\n\n        return (\n            <div class=\"n-transfer__item\">\n                { Obj.get(props.item, this.labelProp) }\n            </div>\n        );\n    },\n\n    renderMoveSource()\n    {\n        let props = {\n            disabled: ! this.selectedSource.length,\n            size: this.size,\n            type: this.type,\n            square: true, \n            icon: nano.Icons.angleRight,\n            onClick: this.moveToTarget\n        };\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderMoveTarget()\n    {\n        let props = {\n            disabled: ! this.selectedTarget.length,\n            size: this.size,\n            type: this.type,\n            square: true, \n            icon: nano.Icons.angleLeft,\n            onClick: this.moveToSource\n        };\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    render($render)\n    {\n        let classList = [\n            'n-transfer',\n            'n-transfer--' + this.size,\n            'n-transfer--' + this.type,\n        ]\n\n        return (\n            <div class={classList}>\n                <div class=\"n-transfer__panel\">\n                    { this.ctor('renderSourceHeader')() }\n                    { this.ctor('renderSourceSearch')() }\n                    { this.ctor('renderSourceBody')() }\n                </div>\n                <div class=\"n-transfer__controls\">\n                    { this.ctor('renderMoveSource')() }\n                    { this.ctor('renderMoveTarget')() }\n                </div>\n                <div class=\"n-transfer__panel\">\n                    { this.ctor('renderTargetHeader')() }\n                    { this.ctor('renderTargetSearch')() }\n                    { this.ctor('renderTargetBody')() }\n                </div>\n            </div>\n        );\n    }\n\n}","import Transfer from \"./src/transfer/transfer\";\n\nexport default function (App) {\n    App.component(Transfer.name, Transfer);\n}","import { Str, Num, Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPaginator',\n\n    props: {\n\n        page: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        limit: {\n            default()\n            {\n                return 100;\n            },\n            type: [Number]\n        },\n\n        limitOptions: {\n            default()\n            {\n                return [25, 50, 100, 500, 1000, 2500];\n            },\n        },\n\n        total: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        maxPages: {\n            default()\n            {\n                return 5;\n            },\n            type: [Number]\n        },\n\n        layout: {\n            default()\n            {\n                return [\n                    'limit', 'count', 'spacer', 'goto', 'pages'\n                ]\n            },\n            type: [Array]\n        }\n\n    },\n\n    computed: {\n\n        pages()\n        {\n            return Num.ceil(this.total / this.tempLimit);\n        },\n\n        pageOptions()\n        {\n            return Arr.make(this.pages || 1);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempPage: this.page, \n            tempLimit: this.limit,\n        }\n    },\n\n    methods: {\n\n        forcePage(page)\n        {\n            if ( page !== this.tempPage ) {\n                this.tempPage = page;\n            }\n        },\n\n        updatePaginate()\n        {\n            let paginate = {\n                page: this.tempPage, limit: this.tempLimit\n            };\n\n            this.$emit('paginate', paginate);\n        },\n\n        onPrevPage()\n        {\n            this.onPageInput(this.tempPage - 1);\n        },\n\n        onNextPage()\n        {\n            this.onPageInput(this.tempPage + 1);\n        },\n\n        onFirstPage()\n        {\n            this.onPageInput(1);\n        },\n\n        onLastPage()\n        {\n            this.onPageInput(this.pages);\n        },\n\n        onPageInput(value)\n        {\n            this.$emit('update:page', this.tempPage = value);\n\n            this.updatePaginate();\n        },\n\n        onLimitInput(value)\n        {\n            this.$emit('update:limit', this.tempLimit = value);\n\n            if ( this.pages < this.tempPage ) {\n                this.$emit('update:page', this.tempPage = 1);\n            }\n\n            this.updatePaginate();\n        },\n\n    },\n\n    watch: {\n\n        page(value)\n        {\n            if ( value !== this.tempPage ) {\n                this.tempPage = value;\n            }\n        },\n\n        limit(value)\n        {\n            if ( value !== this.tempLimit ) {\n                this.tempLimit = value;\n            }\n        }\n\n    },\n\n    renderLimit()\n    {\n        let props = {\n            modelValue:     this.tempLimit,\n            size:           this.size,\n            type:           this.type,\n            optionsValue:  '$value.value',\n            optionsLabel:  '$value.label',\n        };\n\n        props.options = Arr.each(this.limitOptions, (limit) => {\n            return {\n                value: limit, label: this.choice(':count items', limit)\n            };\n        });\n\n        props['onUpdate:modelValue'] = this.onLimitInput;\n\n        return (\n            <div class=\"n-paginator__limit\">\n                <NSelect {...props} />\n            </div>\n        );\n    },\n\n    renderCount()\n    {\n        return (\n            <div class=\"n-paginator__count\">\n                { this.choice('No items|Total :count item|Total :count items', this.total) }\n            </div>\n        );\n    },\n\n    renderSpacer()\n    {\n        return (\n            <div class=\"n-paginator__spacer\">\n                { /* Nothing :( */ }\n            </div>\n        );\n    },\n\n    renderGoto()\n    {\n        let props = {\n            modelValue:     this.tempPage,\n            size:           this.size,\n            type:           this.type,\n            undefinedText:  '?',\n            optionsValue:   '$value.value',\n            optionsLabel:   '$value.label',\n        };\n\n        props.options = Arr.reduce(this.pageOptions, (merge, index) => {\n            return Arr.push(merge, {\n                value: index, label: index\n            });\n        }, []);\n\n        props['onUpdate:modelValue'] = this.onPageInput;\n\n        return (\n            <div class=\"n-paginator__goto\">\n                <NSelect {...props} />\n            </div>\n        );\n    },\n\n    renderPrev()\n    {\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleLeft,\n            onClick: this.onPrevPage\n        };\n\n        if ( this.tempPage - 1 < 1 ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderNext()\n    {\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleRight,\n            onClick: this.onNextPage\n        };\n\n        if ( this.tempPage + 1 > this.pages ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderFirst()\n    {\n        if ( this.pages < this.maxPages ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleDoubleLeft,\n            onClick: this.onFirstPage\n        };\n\n        if ( this.tempPage - 1 < 1 ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderLast()\n    {\n        if ( this.pages < this.maxPages ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleDoubleRight,\n            onClick: this.onLastPage\n        };\n\n        if ( this.tempPage + 1 > this.pages ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderPage(index)\n    {\n        let page = this.tempPage;\n\n        let pages = Math.abs(this.maxPages / 2);\n\n        if ( page < pages ) {\n            page = pages;\n        }\n\n        let global = Array(this.pages).length;\n\n        if ( page > global - pages ) {\n            page = global - pages;\n        }\n\n        let current = Num.int(index);\n\n        if ( current < page - pages ) {\n            return null;\n        }\n\n        if ( current > Math.max(1, page + pages) ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            size: this.size,\n        };\n\n        if ( current === this.tempPage ) {\n            props.disabled = true;\n        }\n\n        props.onClick = () => {\n            this.onPageInput(current);\n        };\n\n        return (\n            <NButton {...props}>{ current }</NButton>\n        );\n    },\n\n    renderPages()\n    {\n        let pages = Arr.each(this.pageOptions, (index) => {\n            return this.ctor('renderPage')(index);\n        });\n\n        return (\n            <div class=\"n-paginator__pages\">\n                { this.ctor('renderFirst')() }\n                { this.ctor('renderPrev')() }\n                { ...pages }\n                { this.ctor('renderNext')() }\n                { this.ctor('renderLast')() }\n            </div>\n        );\n    },\n\n    renderSlot(view)\n    {\n        let renderFunction = this.ctor('render' + \n            Str.ucfirst(view));\n\n        if ( Any.isFunction(renderFunction) ) {\n            return renderFunction();\n        }\n\n        return this.$slots[view] && this.$slots[view]();\n    },\n\n    render()\n    {\n        let className = [\n            'n-paginator',\n            'n-paginator--' + this.size,\n            'n-paginator--' + this.type\n        ];\n\n        return <div class={className}>\n            {\n                Arr.each(this.layout, (view) => {\n                    return this.ctor('renderSlot')(view);\n                })\n            }\n        </div>;\n    }\n}\n","import Paginator from './src/paginator/paginator';\n\nexport default function (App) {\n    App.component(Paginator.name, Paginator);\n}","import { Arr, Obj, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NFile',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        multiple: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        clearable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        clearableIcon: {\n            default()\n            {\n                return nano.Icons.times;\n            },\n            type: [String]\n        },\n\n        buttonText: {\n            default()\n            {\n                return Locale.trans('Select file');\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.value\n        };\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        }\n\n    },\n\n    methods: {\n\n        openContext()\n        {\n            this.$refs.input.click();\n        },\n\n        updateFile()\n        {\n            let tempValue = [\n                ...this.$refs.input.files\n            ];\n\n            if ( ! this.multiple ) {\n                tempValue = tempValue[0];\n            }\n\n            this.$emit('update:modelValue', this.tempValue = tempValue);\n        },\n\n        clearFile()\n        {\n            this.$emit('update:modelValue', null);\n        }\n\n    },\n\n    renderInput()\n    {\n        let props = {\n            size: this.size,\n            disabled: true,\n            iconDisabled: Any.isEmpty(this.tempValue)\n        };\n\n        props['onIconClick'] = this.clearFile;\n\n        if ( ! this.multiple ) {\n            props.modelValue = Obj.get(this.tempValue, 'name');\n        }\n\n        if ( this.multiple ) {\n            props.modelValue = Locale.choice(':count File|:count Files',\n                this.tempValue.length);\n        }\n\n        if ( this.clearable ) {\n            props.icon = this.clearableIcon;\n        }\n\n        return (\n            <NInput {...props}>\n                { /* Input field for text */ }\n            </NInput>\n        );\n    },\n\n    renderButton()\n    {\n        let props = {\n            size: this.size,\n            disabled: this.disabled,\n            icon: this.icon,\n            onClick: this.openContext\n        };\n\n        return (\n            <NButton {...props}>{this.buttonText}</NButton>\n        );\n    },\n\n    renderHidden()\n    {\n        let props = {\n            'onInput': this.updateFile\n        };\n\n        return (\n            <div class=\"n-file__input\">\n                <input ref=\"input\" type=\"file\" multiple={this.multiple} {...props}></input>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-file'\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderInput')() }\n                { this.ctor('renderButton')() }\n                { this.ctor('renderHidden')() }\n            </div>\n        )\n    }\n\n}\n","import File from './src/file/file';\n\nexport default function (App) {\n    App.component(File.name, File);\n}\n\n","import { Num, Arr, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRating',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        steps: {\n            default()\n            {\n                return 0.5;\n            },\n            type: [Number]\n        },\n\n        fixed: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return 5;\n            },\n            type: [Number]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        choice: {\n            default()\n            {\n                return ':count';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    computed: {\n\n        virtualValue()\n        {\n            return Num.fixed(1 / this.max * this.modelValue * 5, this.fixed);\n        },\n\n    },\n\n    renderStars()\n    {\n        let stars = [\n            1, 2, 3, 4, 5\n        ];\n\n        return Arr.each (stars, (rate) => {\n\n            let className = 'is-null';\n\n            if ( this.virtualValue >= rate - 0.5 ) {\n                className = 'is-half';\n            }\n\n            if ( this.virtualValue >= rate ) {\n                className = 'is-full';\n            }\n\n            return (\n                <span class={className}></span>\n            );\n        });\n    },\n\n    renderValue()\n    {\n        let vars = {\n            value: Num.format(this.modelValue, '.', '', this.fixed)\n        };\n\n        if ( this.$slots.default ) {\n            return this.$slots.default(vars);\n        }\n\n        return Locale.choice(this.choice, this.modelValue, vars);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-rating',\n            'n-rating--' + this.size,\n            'n-rating--' + this.type\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-rating__stars\">\n                    {this.ctor('renderStars')()}\n                </div>\n                <div class=\"n-rating__value\">\n                    {this.ctor('renderValue')()}\n                </div>\n            </div>\n        );\n    }\n\n}\n","import Rating from './src/rating/rating';\n\nexport default function (App) {\n    App.component(Rating.name, Rating);\n}\n"],"sourceRoot":""}
         | 
| 1 | 
            +
            {"version":3,"sources":["webpack://Nano/webpack/universalModuleDefinition","webpack://Nano/webpack/bootstrap","webpack://Nano/external {\"root\":\"pi\",\"commonjs2\":\"@kizmann/pico-js\",\"commonjs\":\"@kizmann/pico-js\",\"amd\":\"@kizmann/pico-js\"}","webpack://Nano/external {\"root\":\"Vue\",\"commonjs2\":\"vue\",\"commonjs\":\"vue\",\"amd\":\"vue\"}","webpack://Nano/(webpack)/buildin/global.js","webpack://Nano/./src/draggable/src/draghandler/draghandler.js","webpack://Nano/./src/mixins/src/ctor.js","webpack://Nano/./src/virtualscroller/src/virtualscroller/virtualscroller.beta.js","webpack://Nano/./src/draggable/src/draglist/draglist.js","webpack://Nano/./src/draggable/src/draglist-item/draglist-item.js","webpack://Nano/./src/draggable/src/draggrid/draggrid.js","webpack://Nano/./src/draggable/src/draggrid-item/draggrid-item.js","webpack://Nano/./src/preview/src/preview/preview.js","webpack://Nano/./src/preview/src/preview-video/preview-video.js","webpack://Nano/./src/mixins/src/cmer.js","webpack://Nano/./src/mixins/src/cslo.js","webpack://Nano/./src/index.js","webpack://Nano/./src/virtualscroller/index.js","webpack://Nano/./src/draggable/index.js","webpack://Nano/./src/table/src/table/table.js","webpack://Nano/./src/table/src/table-column/table-column.js","webpack://Nano/./src/table/src/table-cell/table-cell.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-string.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-boolean.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-datetime.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-option.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-image.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-matrix.js","webpack://Nano/./src/table/src/table-cell/types/table-cell-select.js","webpack://Nano/./src/table/src/table-filter/table-filter.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-string.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-boolean.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-datetime.js","webpack://Nano/./src/table/src/table-filter/types/table-filter-option.js","webpack://Nano/./src/table/index.js","webpack://Nano/./src/info/src/info/info.js","webpack://Nano/./src/info/src/info-column/info-column.js","webpack://Nano/./src/info/src/info-field/info-field.js","webpack://Nano/./src/info/src/info-field/types/info-field-string.js","webpack://Nano/./src/info/src/info-field/types/info-field-boolean.js","webpack://Nano/./src/info/src/info-field/types/info-field-datetime.js","webpack://Nano/./src/info/src/info-field/types/info-field-option.js","webpack://Nano/./src/info/src/info-field/types/info-field-image.js","webpack://Nano/./src/info/index.js","webpack://Nano/./src/popover/src/popover/popover.js","webpack://Nano/./src/popover/src/popover-group/popover-group.js","webpack://Nano/./src/popover/src/popover-option/popover-option.js","webpack://Nano/./src/popover/index.js","webpack://Nano/./src/form/src/form/form.js","webpack://Nano/./src/form/src/form-group/form-group.js","webpack://Nano/./src/form/src/form-item/form-item.js","webpack://Nano/./src/form/index.js","webpack://Nano/./src/config/src/config/config.js","webpack://Nano/./src/config/src/config/config-next.js","webpack://Nano/./src/config/index.js","webpack://Nano/./src/button/src/button/button.js","webpack://Nano/./src/button/src/button-group/button-group.js","webpack://Nano/./src/button/index.js","webpack://Nano/./src/select/src/select/select.js","webpack://Nano/./src/select/src/select-option/select-option.js","webpack://Nano/./src/select/index.js","webpack://Nano/./src/checkbox/src/checkbox/checkbox.js","webpack://Nano/./src/checkbox/src/checkbox-group/checkbox-group.js","webpack://Nano/./src/checkbox/index.js","webpack://Nano/./src/radio/src/radio/radio.js","webpack://Nano/./src/radio/src/radio-group/radio-group.js","webpack://Nano/./src/radio/index.js","webpack://Nano/./src/cascader/src/cascader-panel/cascader-panel.js","webpack://Nano/./src/cascader/src/cascader/cascader.js","webpack://Nano/./src/cascader/index.js","webpack://Nano/./src/datepicker/src/datepicker-panel/datepicker-panel.js","webpack://Nano/./src/datepicker/src/datepicker/datepicker.js","webpack://Nano/./src/datepicker/index.js","webpack://Nano/./src/timepicker/src/timepicker-panel/timepicker-panel.js","webpack://Nano/./src/timepicker/src/timepicker/timepicker.js","webpack://Nano/./src/timepicker/index.js","webpack://Nano/./src/tabs/src/tabs/tabs.js","webpack://Nano/./src/tabs/src/tabs-item/tabs-item.js","webpack://Nano/./src/tabs/index.js","webpack://Nano/./src/collapse/src/collapse/collapse.js","webpack://Nano/./src/collapse/src/collapse-item/collapse-item.js","webpack://Nano/./src/collapse/index.js","webpack://Nano/./src/preview/src/preview-plain/preview-plain.js","webpack://Nano/./src/preview/src/preview-image/preview-image.js","webpack://Nano/./src/preview/index.js","webpack://Nano/./src/map/src/map/map.js","webpack://Nano/./src/map/src/map-marker/map-marker.js","webpack://Nano/./src/map/index.js","webpack://Nano/./src/alert/src/alert/alert.js","webpack://Nano/./src/alert/index.js","webpack://Nano/./src/notification/src/notification/notification.js","webpack://Nano/./src/notification/index.js","webpack://Nano/./src/empty/src/empty-icon/empty-icon.js","webpack://Nano/./src/empty/index.js","webpack://Nano/./src/scrollbar/src/scrollbar/scrollbar.next.js","webpack://Nano/./src/scrollbar/index.js","webpack://Nano/./src/loader/src/loader/loader.js","webpack://Nano/./src/loader/index.js","webpack://Nano/./src/resizer/src/resizer/resizer.js","webpack://Nano/./src/resizer/index.js","webpack://Nano/./src/modal/src/modal/modal.js","webpack://Nano/./src/modal/index.js","webpack://Nano/./src/input/src/input/input.js","webpack://Nano/./src/input/index.js","webpack://Nano/./src/input-number/src/input-number/input-number.js","webpack://Nano/./src/input-number/index.js","webpack://Nano/./src/textarea/src/textarea/textarea.js","webpack://Nano/./src/textarea/index.js","webpack://Nano/./src/slider/src/slider/slider.js","webpack://Nano/./src/slider/index.js","webpack://Nano/./src/switch/src/switch/switch.js","webpack://Nano/./src/switch/index.js","webpack://Nano/./src/confirm/src/confirm/confirm.js","webpack://Nano/./src/confirm/index.js","webpack://Nano/./src/transfer/src/transfer/transfer.js","webpack://Nano/./src/transfer/index.js","webpack://Nano/./src/paginator/src/paginator/paginator.js","webpack://Nano/./src/paginator/index.js","webpack://Nano/./src/file/src/file/file.js","webpack://Nano/./src/file/index.js","webpack://Nano/./src/rating/src/rating/rating.js","webpack://Nano/./src/rating/index.js"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","global","dragMods","NDragCounter","$el","Dom","make","classList","appendTo","document","body","event","count","update","html","Locale","choice","dataTransfer","setData","setDragImage","keyMods","Arr","has","push","attr","join","DragCounter","NDragIndicator","parent","safezone","el","strategy","rect","getBoundingClientRect","clientY","y","height","find","hasClass","show","hide","offsetTop","style","top","css","Obj","map","item","remove","NDraghandler","rootNode","frame","DragIndicator","DragCache","bindDragstart","on","onDragenterRoot","onDragoverRoot","onDragleaveRoot","onDragendRoot","onDragdropRoot","Event","uid","bindDragend","bindDragdrop","off","unbind","preventDefault","target","closest","cacheNodes","length","frames","Date","now","allowDrop","Any","isFunction","rainbow","each","node","addClass","removeClass","fire","moveNodes","group","cache","allowGroups","JSON","parse","stringify","dragcount","dropNodes","tempSelected","$emit","removeNode","clone","items","unlinkNodes","removeNodes","isSelected","id","virtuals","uniqueProp","route","clientHeight","resolve","targetNode","isInSelf","cascade","childNodes","unbindNode","$handle","handle","onDragstartNode","onDragenterNode","onDragoverNode","onDragleaveNode","onDragendNode","onDragdropNode","transformDrop","insertNode","moveNodesRoot","moveNodesInto","moveNodesBefore","moveNodesAfter","sources","eventName","set","prop","filter","childProp","disableMove","targetRoute","children","replace","index","splice","except","UUID","props","reduce","merge","reduceItem","Num","depth","cascades","unique","tempCascade","virtual","last","isEmpty","childRoute","ctor","fallback","$options","split","args","apply","DEBUG_NVSCROLL","inject","NDraggable","default","undefined","model","itemHeight","itemWidth","renderNode","deathzone","type","Number","overflowY","Boolean","overflowX","offsetY","offsetX","threshold","framerate","useKeys","data","state","start","end","grid","buffer","width","load","watch","updateRender","beforeMount","scrollTop","mounted","bindAdaptScroll","beforeUnmount","unbindAdaptScroll","methods","refreshScroll","setInterval","onScrollupdate","clearInterval","isIndexRendered","scrollIntoView","$refs","scrollbar","scrollToIndex","selector","total","Math","ceil","floor","targetTop","scrollTo","x","clearState","delay","content","async","refreshDriver","offset","offsetHeight","inner","scrollHeight","onSizechange","queue","timer","clearTimeout","to","setTimeout","bufferItems","round","startItem","endItem","isEqual","renderItem","passed","topOffset","renderFunction","$slots","renderRows","slice","renderGridRows","counter","chunk","renderGrid","chunks","renderItems","empty","render","totalHeight","DEBUG_NDLIST","draggable","size","String","current","selected","expanded","Array","lazyload","showEmptyIcon","itemOffset","scrollTopOnChange","renderCurrent","renderHandle","renderSelect","renderExpand","allowSelect","allowDrag","keyEvents","highlightTimeout","provide","modifier","visible","highlight","firstSelected","lastSelected","tempCurrent","tempExpanded","drag","watchModifierDown","_uid","watchModifierUp","virtualscroller","bindRoot","$watch","watchSelected","deep","refreshVirtuals","unbindRoot","filterVirtuals","add","which","updateNode","findVirtual","console","log","contains","getIndex","findIndex","getCurrentIndex","isDraggable","canDrag","isHighlight","highlightNode","refresh","recursive","$nextTick","scrollToHighlight","first","isCurrent","setCurrent","setRawCurrent","setNextCurrent","setPrevCurrent","reset","syncCurrent","isDisabled","canSelect","hasChildren","getChildren","isExpanded","expandItem","toggle","expandCurrent","isTotalSelected","isInterSelected","toggleSingleNode","toggleRangeNode","indexies","reversed","selectItem","selectAll","unselectAll","bindKeydown","onKeydown","unbindKeydown","stopPropagation","renderEmpty","trans","only","$props","onMouseenter","onMouseleave","NDraggableItem","required","computed","touch","navigator","msMaxTouchPoints","mousedown","mousemove","mouseup","init","bindNode","copy","copyNode","onClick","onDblclick","renderElement","renderSpacer","nano","Icons","Str","ucfirst","angleRight","checked","fileMap","image","video","font","text","application","file","thumb","fit","preview","typre","showSrc","tempFile","tempThumb","fileMime","getFileMime","thumbMime","getThumbMime","lightbox","extension","exts","resolveVimeo","resolveYoutube","showLightbox","renderPreview","renderFull","isObject","renderLightbox","slots","raw","url","isString","host","match","path","src","provider","tempSrc","resolveType","resolveData","youtube","vimeo","renderYoutube","renderVimeo","renderPlain","cmer","attrsList","isArray","isPlain","assign","$attrs","cslo","slot","Comment","circle","intermediate","clock","calendar","times","primary","success","warning","danger","info","angleUp","angleDown","angleLeft","angleDoubleLeft","angleDoubleRight","Settings","iconPosition","notifySize","notifyPosition","Install","App","pi","error","config","globalProperties","CtorMixin","CmerMixin","CsloMixin","Nano","component","Virtualscroller","Draglist","DraglistItem","Draggrid","DraggridItem","NTable","sortProp","sortDir","closeFilterOnEnter","elements","tempVisible","tempVisibleProps","tempSortProp","tempSortDir","tempFilter","tempFilterProps","makeVisibleProps","detectVisible","addColumn","column","removeColumn","getColumnIndex","getColumnVisiblity","getColumnSorted","getColumnFilter","filterProp","getColumnFiltered","detectVisibity","intersect","extract","onResize","sortByColumn","dir","replaceFilter","search","filters","resetFilter","refreshCurrent","modelValue","disabled","renderBody","columns","values","renderContext","label","renderHead","defaultRender","draggableHtml","tooltip","align","sort","breakpoint","previewProp","matrix","matrixProp","options","optionsValue","optionsLabel","fluid","fixedWidth","minWidth","maxWidth","emptyText","undefinedText","trueText","falseText","datetimeFormat","allowUncheck","matrixValues","NTableColumn","tempWidth","changedStates","sortDirection","flexBasis","onMousedown","renderHeadLabel","labelHtml","renderHeadSort","renderHeadFilter","angleHtml","resolveComponent","h","class","input","setFirstState","firstState","extends","TableCell","convertString","convertBoolean","convertDatetime","renderOption","$value","$index","option","toggleMatrix","toggleSelect","itemList","currentMatrix","combine","finder","isChecked","canReset","canApply","getFilterClone","mountFilter","_","getFilterProp","getDefaultFilter","applyFilter","clearFilter","popover","close","renderForm","renderApply","link","renderReset","renderFooter","trigger","footer","TableFilter","operator","li","nl","eq","ne","1","0","lt","gt","in","ni","Table","TableColumn","TableCellString","TableCellBoolean","TableCellDatetime","TableCellOption","TableCellImage","TableCellMatrix","TableCellSelect","TableFilterString","TableFilterBoolean","TableFilterDatetime","TableFilterOption","syncEvent","relative","tempValue","bindSyncEvent","unbindSyncEvent","updated","adaptHeight","setValue","NInfo","vals","infoHtml","renderLabel","InfoField","Info","InfoColumn","InfoFieldString","InfoFieldBoolean","InfoFieldDatetime","InfoFieldOption","InfoFieldImage","NPopover","listen","position","scrollClose","multiClose","clientX","prevent","refreshVisible","previous","append","onHover","onContext","onExit","onCloseEvent","active","open","pause","unpause","stopRefreshInterval","startRefreshInterval","passedOffset","updatePosition","isSameOffset","isSameSize","passedSize","getTargetHorizontal","targetRect","left","windowRect","posY","posX","center","inverse","broken","innerHeight","innerWidth","clientWidth","getTargetVertical","getTargetOffset","scroll","zIndex","isScrollClose","source","result","keyCode","header","viewBody","isNull","tempSize","focus","icon","imagePosition","clickClose","renderImage","renderIcon","renderContent","Popover","PopoverGroup","PopoverOption","inheritAttrs","dom","form","errors","ignore","forceChange","forceErrors","blocked","NForm","ready","emitChange","resetChange","onSubmit","is","addItem","removeItem","timeout","prevState","nextState","attrs","collapse","tooltipPosition","collapseGroup","renderCollapse","renderText","textHtml","renderAction","action","renderTooltip","NTabs","NTabsItem","tooltipWindow","focusInput","$input","childs","click","gotoInput","keys","changeTab","renderError","renderInput","Form","FormGroup","FormItem","scope","solveAwait","$$scope","$$value","solveValue","solveEvent","$configRefs","solveContent","$render","prepareValue","veModel","deepSet","inputClosure","closure","obj","val","shift","renderLayer","setup","vIf","vShow","vAwait","$on","display","resolved","propAwait","getState","propExists","exists","solveInput","$scope","$model","$global","toPropKey","splits","lcfirst","toEventKey","cb","solveContext","getProp","getInput","setInput","renderSetup","alias","defaultsBind","binds","events","updateKey","element","NConfig","NConfigNext","square","buttonType","nativeType","innerHtml","Button","ButtonGroup","clearValue","multiple","clearable","placeholder","collapseText","allowCreate","optionsDisabled","custom","tempClear","searched","NSelect","searchOptions","scrollToClosest","clear","addOption","removeOption","resetInput","onFocusInput","onInputInput","onKeydownInput","createOrToggle","selectPrev","selectNext","searchRegex","RegExp","toggleOption","denyUpdate","getOptionLabel","tempLabel","newIndex","scrollToCurrent","createOption","renderLabelClear","renderLabelAngle","renderLabelItem","renderLabelCollapse","firstHtml","renderLabelItems","renderMultiple","isEmptyValue","isNumber","onFocus","onInput","inputHtml","renderSingle","modelLabel","renderDisplay","displayHtml","emptyHtml","renderPopover","onClose","renderOptions","valueProp","labelProp","toggleItem","isMultipleActive","isSingleActive","Select","SelectOption","NCheckboxGroup","tempComputed","globalChecked","tempChecked","tempIntermediate","globalIntermediate","tempDisabled","globalDisabled","addCheckbox","removeCheckbox","check","checkCheckbox","uncheck","uncheckCheckbox","eventShiftClick","shiftCheckbox","eventLocalClick","shiftKey","toggleCheckbox","eventGlobalClick","toggleAll","updateFromGroup","renderCheckbox","interHtml","checkHtml","checkbox","emit","checkboxes","uncheckAll","checkAll","Checkbox","CheckboxGroup","NRadioGroup","addRadio","removeRadio","checkRadio","renderRadio","radio","NRadio","hover","disabledProp","tempHover","clearCascader","hoverItem","onSelect","updateHover","clickTimer","lastclick","hoverTimer","fireSelectItem","onMousemove","renderCascade","renderList","onCascaderInput","onCascaderHover","onPopoverInput","itemLabel","CascaderPanel","Cascader","arrive","clearArrive","depart","clearDepart","minDate","maxDate","range","monthPanels","format","weekdays","months","yearsGrid","tempCache","getYears","monthsGrid","getMonths","Now","tempArrive","tempDepart","tempView","tempRanger","cacheArrive","cacheDepart","gotoDate","gotoMonth","gotoYear","patchDate","patchMonth","printRange","patchYear","patchRange","renderToolbarPrev","renderToolbarNext","renderToolbarMonth","monthsHtml","month","addMonths","renderToolbarYear","yearsHtml","year","renderToolbar","prev","next","renderDateItem","equalDate","valid","isNotBeforeMin","after","isNotAfterMax","before","renderRangeDateItem","viewMode","isTempValid","between","arriveFirst","renderDate","legendHtml","day","bodyHtml","getDatesGrid","panelHtml","prevMonth","nextMonth","renderMonthItem","equal","renderMonth","prevYear","nextYear","renderYearItem","renderYear","prevDecade","nextDecade","placeholderArrive","placeholderDepart","rangeSeparator","boundary","displayFormat","clearDatepicker","clearRangeDatepicker","clearSingleDatepicker","onValueInput","moment","isValid","date","onArriveInput","onDepartInput","onDatepickerInput","onDatepickerDepart","onDatepickerArrive","initialDate","renderRange","arriveProps","departProps","DatepickerPanel","Datepicker","hoursInterval","minutesInterval","secondsInterval","hoursGrid","getHours","minutesGrid","getMinutes","secondsGrid","getSeconds","eventSelect","renderHourItem","hour","renderHourPanel","renderMinuteItem","minute","renderMinutePanel","renderSecondItem","second","renderSecondPanel","clearTimepicker","onTimepickerInput","renderPanel","TimepickerPanel","Timepicker","addTab","tab","$forceUpdate","removeTab","getTab","updateEvent","currentTab","sorted","repeatNext","renderHeaderIndicator","transform","renderHeader","tabs","preload","keep","_key","renderHeaderIcon","renderHeaderLabel","Tabs","TabsItem","NCollapse","showTab","hideTab","toggleTab","NCollapseItem","dragger","renderHeaderAngle","angle","showDelay","Collapse","CollapseItem","tempExt","ImageCache","resolveLoad","loaded","reader","FileReader","onload","readAsDataURL","Preview","PreviewPlain","PreviewImage","PreviewVideo","lat","lng","zoom","NMap","callbacks","tempMap","focusMarkers","Map","callback","getMap","onMount","tempMarker","importMarkerPosition","marker","setPosition","updateMarkerPosition","getPosition","initializeMarker","innerHTML","createMarker","addListener","debounce","setMarkerByAddress","address","then","Notify","MapMarker","AlertFrame","iconPrimary","iconSecondary","iconSuccess","iconWarning","iconDanger","iconInfo","Alert","backdrop","onclick","getIcon","alert","Notification","duration","wrapper","getWrapper","notifications","Notifcation","EmptyIcon","NScrollbar","fixture","allowNative","wrapClass","native","adaptScrollBehavior","bindAdaptHeight","bindAdaptWidth","passive","onUpdate","onScroll","passedHeight","passedWidth","unbindAdaptHeight","unbindAdaptWidth","onScrollTo","scrollLeft","onScrollIntoView","outerHeight","outerWidth","offsetLeft","$dom","offsetWidth","adaptScrollHeight","barHeight","max","maxHeight","heightRatio","vbar","hasVtrack","adaptScrollPosition","adaptScrollWidth","scrollWidth","barWidth","widthRatio","hbar","hasHtrack","vbarTop","hbarLeft","cacheChildEl","child","cacheWindwoEl","windowCache","spacer","refreshHeight","adaptWidth","resizeTimer","refreshWidth","$inner","actual","getTouchEvent","touches","changedTouches","onVbarMousedown","onVbarMousemove","onVbarMouseup","onHbarMousedown","onHbarMousemove","onHbarMouseup","WIN","vbarProps","hbarProps","Scrollbar","NLoader","minimum","applyTimer","timing","startTimer","restartTimer","Loader","resizerWidth","sizeFixed","updateWidth","bindSizechange","forceWidth","unmounted","unbindSizechange","flex","updateHandle","onLeftMousedown","onLeftMouseup","onLeftMousemove","scrollX","targetWidth","min","frameStyle","onRightMousedown","onRightMouseup","onRightMousemove","Resizer","title","closable","renderClose","startRefreshTimeout","NModal","eventClick","eventKeydown","openModal","force","closeModal","stopRefreshTimeout","queueRefreshTimeout","indexes","modal","renderFrame","renderBackdrop","Modal","iconDisabled","onIconClick","onBlur","Input","MAX_VALUE","stepSize","precision","decimals","getDisplayValue","nextStep","isNaN","toFixed","onNextDown","nextTimeout","nextInterval","onNextUp","prevStep","onPrevDown","prevTimeout","prevInterval","onPrevUp","regex","renderPrev","renderNext","renderClear","InputNumber","autoRows","maxRows","minRows","maxLength","eventInput","rows","currentRows","Textarea","steps","labels","fixmin","fixmax","minmax","getPseudoValue","setModelValue","getValPos","fixed","getValStyle","getBarPos","getBarWidth","getBarStyle","getClosestValue","diff","step","abs","onMouseup","relativeWidth","closestValue","stepMin","stepMax","handleProps","renderHandles","renderBar","barProps","Slider","onValue","offValue","onType","offType","renderSwitch","Switch","confirmText","abortText","abort","confirm","Confirm","sourceLabel","targetLabel","sourceChecked","selectedSource","tempSource","sourceIntermediate","targetChecked","selectedTarget","tempTarget","targetIntermediate","sourceSearch","searchPattern","targetSearch","moveItemsTarget","moveItemsSource","moveRowTarget","moveRowSource","moveToSource","moveToTarget","updateSelectedSource","updateSelectedTarget","renderSourceSelect","renderSourceTitle","counterHtml","renderSourceHeader","renderSourceSearch","renderSourceBody","onMove","renderTargetSelect","renderTargetTitle","renderTargetHeader","renderTargetSearch","renderTargetBody","renderMoveSource","renderMoveTarget","Transfer","page","limit","limitOptions","maxPages","layout","pages","tempLimit","pageOptions","tempPage","forcePage","updatePaginate","paginate","onPrevPage","onPageInput","onNextPage","onFirstPage","onLastPage","onLimitInput","renderLimit","renderCount","renderGoto","renderFirst","renderLast","renderPage","renderPages","renderSlot","view","className","Paginator","clearableIcon","buttonText","openContext","updateFile","files","clearFile","renderButton","renderHidden","File","virtualValue","renderStars","rate","renderValue","vars","Rating"],"mappings":"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","file":"nano-ui.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@kizmann/pico-js\"), require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@kizmann/pico-js\", \"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Nano\"] = factory(require(\"@kizmann/pico-js\"), require(\"vue\"));\n\telse\n\t\troot[\"Nano\"] = factory(root[\"pi\"], root[\"Vue\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { Arr, Obj, Num, Any, Dom, Event, Locale, UUID } from \"@kizmann/pico-js\";\n\nglobal.dragMods = [];\n\nclass NDragCounter\n{\n\n    $el = null;\n\n    constructor()\n    {\n        this.$el = Dom.make('div', {\n            classList: ['n-draggable__counter']\n        });\n\n        this.$el.appendTo(document.body);\n    }\n\n    get(event, count)\n    {\n        // Update dragover color/type\n        this.update();\n\n        this.$el.html(\n            `<span>${Locale.choice(':count Item|:count Items', count)}</span>`\n        );\n\n        // Fix data transfer\n        event.dataTransfer.setData('text/plain', '');\n\n        if ( typeof event.dataTransfer.setDragImage !== 'function' ) {\n            return;\n        }\n\n        // Set finally the drop image\n        event.dataTransfer.setDragImage(this.$el.get(0), 0, 0);\n    }\n\n    update()\n    {\n        global.dragMods = global.keyMods;\n\n        let classList = [\n            'n-draggable__counter'\n        ];\n\n        if ( Arr.has(global.dragMods, 18) ) {\n            classList.push('n-modify--alt');\n        }\n\n        if ( Arr.has(global.dragMods, 17) ) {\n            classList.push('n-modify--ctrl');\n        }\n\n        if ( Arr.has(global.dragMods, 91) ) {\n            classList.push('n-modify--meta');\n        }\n\n        this.$el.attr('class', classList.join(' '));\n    }\n\n}\n\nglobal.DragCounter = new NDragCounter;\n\nclass NDragIndicator\n{\n\n    $el = null;\n\n    parent = null;\n\n    constructor(parent)\n    {\n        this.$el = Dom.make('div', {\n            classList: ['n-draggable__indicator']\n        });\n\n        this.$el.appendTo(this.parent = parent);\n    }\n\n    resolve(event, safezone, el, strategy = 'inner')\n    {\n        let rect = el.getBoundingClientRect();\n\n        if ( event.clientY < rect.y + safezone ) {\n            strategy = 'before';\n        }\n\n        if ( event.clientY > rect.y + rect.height - safezone ) {\n            strategy = 'after';\n        }\n\n        if ( Dom.find(el).hasClass('n-expanded') ) {\n            strategy = strategy === 'after' ? 'inner' : strategy;\n        }\n\n        Arr.has(['before', 'after'], strategy) ?\n            this.show(el, strategy) : this.hide();\n\n\n        return strategy;\n    }\n\n    show(el, strategy)\n    {\n        let offsetTop = Dom.find(el).offsetTop(this.parent);\n\n        let style = {\n            top: offsetTop || 1\n        };\n\n        if ( strategy === 'after' ) {\n            style.top = offsetTop + Dom.find(el).height();\n        }\n\n        this.$el.css(Obj.map(style, (item) => item + 'px'));\n    }\n\n    hide()\n    {\n        this.$el.css(null);\n    }\n\n    destroy()\n    {\n        this.$el.get(0).remove();\n    }\n\n}\n\nclass NDraghandler\n{\n\n    uid = null;\n\n    rootNode = null;\n    childNodes = {};\n\n    dropNodes = [];\n    cacheNodes = [];\n\n    strategy = 'nodrop';\n    frames = 0;\n    timeout = 0;\n    dragcount = {};\n\n    constructor(rootNode)\n    {\n        this.rootNode = rootNode;\n    }\n\n    bindRoot(frame = null)\n    {\n        this.DragIndicator = new NDragIndicator(frame || this.rootNode.$el);\n\n        if ( global.DragCache ) {\n            this.bindDragstart.call(this, ...global.DragCache);\n        }\n\n        Dom.find(this.rootNode.$el).on('dragenter', (event) => {\n            this.onDragenterRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragover', (event) => {\n            this.onDragoverRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragleave', (event) => {\n            this.onDragleaveRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragend', (event) => {\n            this.onDragendRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('drop', (event) => {\n            this.onDragdropRoot(event);\n        });\n\n        Dom.find(this.rootNode.$el).on('dragdrop', (event) => {\n            this.onDragdropRoot(event);\n        });\n\n        Event.bind('NDrag:start', this.bindDragstart.bind(this),\n            this.rootNode.uid);\n\n        Event.bind('NDrag:end', this.bindDragend.bind(this),\n            this.rootNode.uid);\n\n        Event.bind('NDrag:drop', this.bindDragdrop.bind(this),\n            this.rootNode.uid);\n    }\n\n    unbindRoot()\n    {\n        let events = [\n            'dragstart',\n            'dragenter',\n            'dragover',\n            'dragleave',\n            'dragend',\n            'drop',\n            'dragdrop',\n        ];\n\n        Dom.find(this.rootNode.$el).off(events);\n\n        Event.unbind('NDrag:start', this.rootNode.uid);\n        Event.unbind('NDrag:end', this.rootNode.uid);\n        Event.unbind('NDrag:drop', this.rootNode.uid);\n    }\n\n    onDragenterRoot(event)\n    {\n        event.preventDefault();\n    }\n\n    onDragoverRoot(event)\n    {\n        let isNode = Dom.find(event.target)\n            .closest('.n-draglist-item');\n\n        if ( isNode || !this.cacheNodes.length ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        if ( this.frames && Date.now() - this.frames < 135 ) {\n            return;\n        }\n\n        let allowDrop = this.rootNode.allowDrop;\n\n        if ( !Any.isFunction(allowDrop) ) {\n            allowDrop = () => this.rootNode.allowDrop;\n        }\n\n        let rainbow = Arr.each(this.cacheNodes, (node) => {\n            return !!allowDrop(node, null, this.strategy);\n        });\n\n        this.strategy = 'root';\n\n        if ( Arr.has(rainbow, false) ) {\n            this.strategy = 'nodrop';\n        }\n\n        this.DragIndicator.hide();\n\n        if ( this.strategy !== 'nodrop' ) {\n            Dom.find(this.rootNode.$el).addClass('n-dragover');\n        } else {\n            Dom.find(this.rootNode.$el).removeClass('n-dragover');\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            Dom.find(this.rootNode.$el).addClass('n-nodrop');\n        } else {\n            Dom.find(this.rootNode.$el).removeClass('n-nodrop');\n        }\n\n        this.frames = Date.now();\n    }\n\n    onDragleaveRoot(event)\n    {\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n    }\n\n    onDragendRoot(event)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n\n        if ( this.strategy !== 'root' ) {\n            return;\n        }\n\n        Event.fire('NDrag:end');\n    }\n\n    onDragdropRoot(event)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(this.rootNode.$el)\n            .removeClass('n-dragover n-nodrop');\n\n        if ( this.strategy !== 'root' ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        this.moveNodes(null, this.strategy);\n\n        Event.fire('NDrag:drop');\n    }\n\n    bindDragstart(group, cache)\n    {\n        if ( Arr.has(this.rootNode.allowGroups, group) ) {\n            this.cacheNodes = JSON.parse(JSON.stringify(cache));\n        }\n    }\n\n    bindDragend()\n    {\n        this.dragcount = {};\n\n        this.cacheNodes = this.dropNodes = [];\n    }\n\n    bindDragdrop(...args)\n    {\n        if ( !this.dropNodes.length ) {\n            return;\n        }\n\n        this.rootNode.tempSelected = [];\n\n        this.rootNode.$emit('update:selected',\n            this.rootNode.tempSelected);\n\n        if ( !this.rootNode.removeNode ) {\n            return;\n        }\n\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        this.unlinkNodes(clone);\n        this.removeNodes(clone);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    onDragstartNode(event, node)\n    {\n        if ( !this.rootNode.isSelected(node) ) {\n            this.rootNode.$emit('update:selected',\n                this.rootNode.tempSelected = [node.uid]);\n        }\n\n        let cache = Arr.each(this.rootNode.tempSelected, (id) => {\n            return Arr.find(this.rootNode.virtuals, { [this.rootNode.uniqueProp]: id });\n        });\n\n        global.DragCounter.get(event, cache.length);\n\n        Arr.map(cache, (value) => {\n            return { value, item: Obj.get(this.rootNode, value.route) };\n        });\n\n        Event.fire('NDrag:start', this.rootNode.group,\n            this.dropNodes = cache);\n\n        global.DragCache = [\n            this.rootNode.group, this.dropNodes\n        ];\n\n        this.dragcount[node.uid] = 0;\n    }\n\n    onDragenterNode(event, node)\n    {\n        event.preventDefault();\n\n        if ( !this.dragcount[node.uid] ) {\n            this.dragcount[node.uid] = 0;\n        }\n\n        this.dragcount[node.uid] ++;\n    }\n\n    onDragoverNode(event, node)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        if ( this.frames && Date.now() - this.frames < 45 ) {\n            return;\n        }\n\n        let safezone = this.rootNode\n            .safezone(node.$el.clientHeight);\n\n        this.strategy = this.DragIndicator\n            .resolve(event, safezone, node.$el);\n\n        let targetNode = {\n            value: node.value, item: node.item\n        };\n\n        let allowDrop = this.rootNode.allowDrop;\n\n        if ( !Any.isFunction(allowDrop) ) {\n            allowDrop = () => this.rootNode.allowDrop;\n        }\n\n        let rainbow = Arr.each(this.cacheNodes, (node) => {\n            return !!allowDrop(node, targetNode, this.strategy);\n        });\n\n        let isInSelf = Arr.has(node.value.cascade,\n            this.rootNode.tempSelected);\n\n        rainbow.push(!isInSelf);\n\n        if ( Arr.has(rainbow, false) ) {\n            this.strategy = 'nodrop';\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            this.DragIndicator.hide();\n        }\n\n        if ( this.strategy !== 'nodrop' ) {\n            Dom.find(node.$el).addClass('n-dragover');\n            Dom.find(node.$el).removeClass('n-nodrop');\n        }\n\n        if ( this.strategy === 'nodrop' ) {\n            Dom.find(node.$el).removeClass('n-dragover');\n            Dom.find(node.$el).addClass('n-nodrop');\n        }\n\n        this.frames = Date.now();\n    }\n\n    onDragleaveNode(event, node)\n    {\n        this.dragcount[node.uid] --;\n\n        if ( this.dragcount[node.uid] !== 0 ) {\n            return;\n        }\n\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n    }\n\n    onDragendNode(event, node)\n    {\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        Event.fire('NDrag:end');\n\n        global.DragCache = null;\n    }\n\n    onDragdropNode(event, node)\n    {\n        if ( !this.cacheNodes.length ) {\n            return;\n        }\n\n        Dom.find(node.$el).removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        if ( this.strategy === 'nodrop' ) {\n            return;\n        }\n\n        event.preventDefault();\n\n        this.moveNodes(node, this.strategy);\n\n        Event.fire('NDrag:drop');\n    }\n\n    bindNode(node)\n    {\n        if ( this.childNodes[node.uid] ) {\n            this.unbindNode(node);\n        }\n\n        let $handle = Dom.find(node.$el);\n\n        if ( this.rootNode.handle ) {\n            $handle = $handle.find('[draggable]');\n        }\n\n        let $el = Dom.find(node.$el);\n\n        $handle.on('dragstart', (event) => {\n            this.onDragstartNode(event, node);\n        });\n\n        $el.on('dragenter', (event) => {\n            this.onDragenterNode(event, node);\n        });\n\n        $el.on('dragover', (event) => {\n            this.onDragoverNode(event, node);\n        });\n\n        $el.on('dragleave', (event) => {\n            this.onDragleaveNode(event, node);\n        });\n\n        $el.on('dragend', (event) => {\n            this.onDragendNode(event, node);\n        });\n\n        $el.on('drop', (event) => {\n            this.onDragdropNode(event, node);\n        });\n\n        $el.on('dragdrop', (event) => {\n            this.onDragdropNode(event, node);\n        });\n\n        this.childNodes[node.uid] = node;\n    }\n\n    unbindNode(node)\n    {\n        let $handle = Dom.find(node.$el);\n\n        if ( this.rootNode.handle ) {\n            $handle = $handle.find('[draggable]');\n        }\n\n        $handle.off('dragstart');\n\n        let $el = Dom.find(node.$el);\n\n        $el.off([\n            'dragenter',\n            'dragover',\n            'dragleave',\n            'dragend',\n            'drop',\n            'dragdrop',\n        ]);\n\n        $el.removeClass('n-dragover n-nodrop');\n\n        this.DragIndicator.hide();\n\n        delete this.childNodes[node.uid];\n    }\n\n    moveNodes(target, strategy)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        if ( this.rootNode.removeNode ) {\n            this.unlinkNodes(clone);\n        }\n\n        if ( !this.dropNodes.length ) {\n            Arr.each(this.cacheNodes, (value, key) => {\n                this.cacheNodes[key]['item'] = this.rootNode.transformDrop(value.item);\n            });\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'root' ) {\n            clone = this.moveNodesRoot(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'inner' ) {\n            clone = this.moveNodesInto(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'before' ) {\n            clone = this.moveNodesBefore(clone, target);\n        }\n\n        if ( this.rootNode.insertNode && strategy === 'after' ) {\n            clone = this.moveNodesAfter(clone, target);\n        }\n\n        if ( this.rootNode.removeNode ) {\n            clone = this.removeNodes(clone);\n        }\n\n        let sources = Arr.each(this.cacheNodes, (node) => {\n            return node.item[this.rootNode.uniqueProp];\n        });\n\n        this.dropNodes = this.rootNode.tempSelected = [];\n\n        let eventName = 'move';\n\n        if ( Arr.has(global.dragMods, 18) ) {\n            eventName = 'moveAlt';\n        }\n\n        if ( Arr.has(global.dragMods, 17) ) {\n            eventName = 'moveCtrl';\n        }\n\n        if ( Arr.has(global.dragMods, 91) ) {\n            eventName = 'moveMeta';\n        }\n\n        this.rootNode.$emit(eventName, sources,\n            Obj.get(target, 'uid'), strategy);\n\n        this.rootNode.$emit(eventName + 'Raw',\n            this.cacheNodes, target, strategy);\n\n        this.rootNode.$emit('update:selected',\n            this.rootNode.tempSelected);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    unlinkNodes(clone)\n    {\n        Arr.each(this.dropNodes, (node) => {\n            Obj.set(clone, node.value.route, null);\n        });\n    }\n\n    removeNodes(clone, prop = 'items')\n    {\n        clone[prop] = Arr.filter(clone[prop], (node) => {\n            return !!node;\n        });\n\n        Arr.map(clone[prop], (node) => {\n\n            if ( !node[this.rootNode.childProp] ) {\n                return node;\n            }\n\n            return this.removeNodes(node,\n                this.rootNode.childProp);\n        });\n\n        return clone;\n    }\n\n    moveNodesRoot(clone)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        Arr.each(this.cacheNodes, (node) => {\n            clone.items.push(node.item);\n        });\n\n        return clone;\n    }\n\n    moveNodesInto(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = [\n            target.value.route,\n            this.rootNode.childProp\n        ].join('.');\n\n        let children = Obj.get(clone,\n            targetRoute, []);\n\n        Arr.each(this.cacheNodes, (node) => {\n            children.push(node.item);\n        });\n\n        Obj.set(clone, targetRoute, children);\n\n        return clone;\n    }\n\n    moveNodesBefore(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = target.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        Arr.each(this.cacheNodes, (node, index) => {\n            items.splice(target.value.index + index, 0, node.item);\n        });\n\n        Obj.set(clone, targetRoute, items);\n\n        return clone;\n    }\n\n    moveNodesAfter(clone, target)\n    {\n        if ( this.rootNode.disableMove ) {\n            return clone;\n        }\n\n        let targetRoute = target.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        Arr.each(this.cacheNodes, (node, index) => {\n            items.splice(target.value.index + index + 1, 0, node.item);\n        });\n\n        Obj.set(clone, targetRoute, items);\n\n        return clone;\n    }\n\n    copyNode(node)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        let targetRoute = node.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        let target = Obj.except(node.item, [], {\n            [this.rootNode.uniqueProp]: UUID()\n        });\n\n        items.splice(node.value.index + 1,\n            0, target);\n\n        Obj.set(clone, targetRoute, items);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    removeNode(node)\n    {\n        let clone = {\n            items: Obj.clone(this.rootNode.items)\n        };\n\n        let targetRoute = node.value.route\n            .replace(/\\.[0-9]+$/, '');\n\n        let items = Obj.get(clone, targetRoute);\n\n        items.splice(node.value.index, 1);\n\n        Obj.set(clone, targetRoute, items);\n\n        this.rootNode.$emit('update:items', clone.items);\n    }\n\n    reduce(items, ...props)\n    {\n        return Arr.reduce(items, (merge, item, index) =>\n            this.reduceItem(merge, item, Num.int(index), ...props), []);\n    }\n\n    reduceItem(merge, item, index, depth = 0, route = 'items', cascades = [])\n    {\n        // Get a unique id\n        let unique = Obj.get(item,\n            this.rootNode.uniqueProp, UUID());\n\n        // Add unique to cascader\n        let tempCascade = Arr.merge(cascades,\n            [unique]);\n\n        let virtual = {\n            index: index,\n            depth: depth,\n            route: [route, index].join('.'),\n            parent: Arr.last(cascades),\n            cascade: tempCascade,\n        };\n\n        virtual[this.rootNode.uniqueProp] = unique;\n\n        let children = Obj.get(item,\n            this.rootNode.childProp, []);\n\n        if ( Any.isEmpty(children) ) {\n            return Arr.merge(merge, [virtual]);\n        }\n\n        let childRoute = [\n            route, index,\n            this.rootNode.childProp\n        ].join('.');\n\n        let props = [\n            depth + 1, childRoute, tempCascade\n        ]\n\n        return Arr.merge(merge, [virtual],\n            this.reduce(children, ...props));\n    }\n\n}\n\nexport default NDraghandler;","import { Arr, Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    ctor(key, fallback = null)\n    {\n        let ctor = Obj.get(this.$options, key.split('.'), -1);\n\n\n\n        //console.log(this.$options, ctor);\n\n        // console.log(ctor);\n\n        // if ( ctor === -1 ) {\n        //     ctor = Obj.get(this.$vnode.componentOptions.Ctor,\n        //         Arr.merge(['options'], key.split('.')), -1);\n        // }\n\n        if ( ctor === -1 ) {\n            ctor = fallback;\n        }\n\n        if ( typeof ctor !== 'function' ) {\n            return ctor;\n        }\n\n        return (...args) => ctor.apply(this, args);\n    }\n\n}\n","import { Arr, Obj, Any, Dom } from \"@kizmann/pico-js\";\n\nglobal.DEBUG_NVSCROLL = false;\n\nexport default {\n\n    name: 'NVirtualscroller',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n\n    },\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 34;\n            }\n        },\n\n        itemWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        deathzone: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        framerate: {\n            default()\n            {\n                return 65;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        let state = {\n            start: 0, end: 0, grid: 1\n        };\n\n        return {\n            state, buffer: [], width: 0, height: 0, load: true\n        };\n    },\n\n    watch: {\n\n        'items': function () {\n            this.updateRender();\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.scrollTop = 0;\n    },\n\n    mounted()\n    {\n\n        this.bindAdaptScroll()\n    },\n\n\n    beforeUnmount()\n    {\n        this.unbindAdaptScroll()\n    },\n\n    methods: {\n\n        bindAdaptScroll()\n        {\n            this.refreshScroll = setInterval(this.onScrollupdate,\n                1000 / this.framerate);\n        },\n\n        unbindAdaptScroll()\n        {\n            clearInterval(this.refreshScroll);\n        },\n\n        isIndexRendered(index)\n        {\n            if ( ! this.itemHeight ) {\n                return true;\n            }\n\n            return this.state.start < index &&\n                this.state.end > index;\n        },\n\n        scrollIntoView(index)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            if ( index === -1 || index >= this.items.length ) {\n                index = this.items.length;\n            }\n\n            if ( ! this.isIndexRendered(index) ) {\n                return this.scrollToIndex(index);\n            }\n\n            let selector = `[data-index=\"${index}\"]`;\n\n            this.$refs.scrollbar.scrollIntoView(selector);\n        },\n\n        scrollToIndex(index)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            let total = Math.ceil(this.items.length /\n                this.state.grid);\n\n            index = Math.floor(index / this.state.grid);\n\n            if ( index === -1 || index >= total ) {\n                index = total;\n            }\n\n            let targetTop = index * this.itemHeight;\n\n            if ( this.scrollTop > targetTop ) {\n                return this.scrollTo(0, targetTop);\n            }\n\n            targetTop = targetTop - this.height + \n                this.itemHeight;\n\n            this.scrollTo(0, targetTop);\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollTo(x, y);\n        },\n\n        clearState()\n        {\n            this.state = { start: 0, end: 0 };\n        },\n\n        updateRender()\n        {\n            if ( ! this.$refs.scrollbar ) {\n                return Any.delay(this.updateRender);\n            }\n\n            this.scrollTop = this.$refs.scrollbar.\n                $refs.content.scrollTop;\n\n            Any.async(this.refreshDriver);\n        },\n\n        onScrollupdate()\n        {\n            if ( ! this.threshold ) {\n                return;\n            }\n\n            let scrollTop = this.$refs.scrollbar.\n                $refs.content.scrollTop;\n\n            if ( scrollTop === this.scrollTop ) {\n                return;\n            }\n\n            this.scrollTop = scrollTop;\n\n            let offset = this.$refs.scrollbar.$el.offsetHeight -\n                this.$refs.scrollbar.$el.clientHeight;\n\n            let isOutOfRange = scrollTop < 0 || scrollTop + this.height\n                > this.$refs.inner.scrollHeight + offset;\n\n            if ( isOutOfRange ) {\n                return;\n            }\n\n            Any.async(this.refreshDriver);\n        },\n\n        onSizechange(height, width, el)\n        {\n            this.width = width;\n            this.height = height;\n\n            Any.async(this.refreshDriver);\n        },\n\n\n        refreshDriver(queue = true)\n        {\n            if ( Any.isEmpty(this.timer) ) {\n                this.timer = Date.now();\n            }\n\n            if ( Date.now() - this.timer > 20 ) {\n                queue = false;\n            }\n\n            clearTimeout(this.to);\n\n            this.to = setTimeout(() => {\n                this.refreshDriver(false);\n            }, 25);\n\n            if ( queue ) {\n                return;\n            }\n\n            clearTimeout(this.to);\n\n            let grid = 1;\n\n            if ( this.itemWidth ) {\n                grid = Math.floor((this.width - this.deathzone) /\n                    this.itemWidth) || 1;\n            }\n\n            if ( ! this.threshold || this.threshold > this.items.length ) {\n                return this.state = { start: 0, end: 0, grid };\n            }\n\n            let total = Math.ceil(this.items.length\n                / grid);\n\n            let bufferItems = Math.round((this.height /\n                this.itemHeight) * 0.6);\n\n            let startItem = Math.round(this.scrollTop /\n                this.itemHeight);\n\n            let endItem = Math.round((this.scrollTop + \n                this.height) / this.itemHeight);\n\n            let start = (startItem - bufferItems);\n\n            if ( start < 0 ) {\n                start = 0;\n            }\n\n            let end = endItem + bufferItems;\n\n            if ( end > total ) {\n                end = total;\n            }\n\n            let state = { start, end, grid };\n\n            if ( Any.isEqual(this.state, state) ) {\n                return;\n            }\n\n            this.state = state;\n        },\n\n    },\n\n    renderItem(passed)\n    {\n        passed.index = (passed.index +\n            this.state.start);\n\n        let topOffset = Math.round(this.itemHeight * \n            passed.index);\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.renderNode ) {\n            renderFunction = this.renderNode;\n        }\n\n        let props = {\n            'data-index': passed.index\n        };\n\n        if ( this.NDraggable && this.useKeys ) {\n            props.key = passed.value[this.NDraggable.uniqueProp];\n        }\n\n        let style = {};\n\n        let isLazy = this.threshold && this.threshold <=\n            this.items.length;\n\n        if ( isLazy && this.state.grid === 1 ) {\n            style.top = topOffset + 'px';\n        }\n\n        if ( this.itemHeight ) {\n            style.height = this.itemHeight + 'px';\n        }\n\n        if ( this.state.grid !== 1 ) {\n            style.width = this.itemWidth + 'px';\n        }\n        \n        return (\n            <div class=\"n-virtualscroller__item\" style={style} {...props}>\n                { renderFunction(passed) }\n            </div>\n        );\n    },\n\n    renderRows()\n    {\n        let items = Arr.slice(this.items, this.state.start,\n            this.state.end);\n\n        if ( ! this.threshold || this.threshold > this.items.length ) {\n            items = this.items;\n        }\n\n        return Arr.each(items, (value, index) => {\n            return this.ctor('renderItem')({ value, index });\n        });\n    },\n\n    renderGridRows(passed)\n    {\n        let topOffset = Math.round(this.itemHeight *\n            (passed.index + this.state.start));\n\n        let style = {};\n\n        if ( this.threshold && this.threshold <= this.items.length ) {\n            style.top = topOffset + 'px';\n        }\n\n        let counter = passed.index * this.state.start;\n\n        return (\n            <div class=\"n-virtualscroller__row\" style={style}>\n                {\n                    Arr.each(passed.chunk, (value, index) => {\n                        return this.ctor('renderItem')({\n                            value, index: index + counter\n                        });\n                    })\n                }\n            </div>\n        );\n    },\n\n    renderGrid()\n    {\n        let chunks = Arr.chunk(this.items,\n            this.state.grid);\n\n        let items = Arr.slice(chunks, this.state.start,\n            this.state.end);\n\n        if ( ! this.threshold || this.threshold > chunks.length ) {\n            items = chunks;\n        }\n\n        return Arr.each(items, (chunk, index) => {\n            return this.ctor('renderGridRows')({ chunk, index });\n        });\n    },\n\n    renderItems()\n    {\n        if ( ! this.items.length ) {\n            return this.$slots.empty && this.$slots.empty() || null;\n        }\n\n        if ( this.state.grid === 1 ) {\n            return this.ctor('renderRows')();\n        }\n\n        return this.ctor('renderGrid')();\n    },\n\n    render()\n    {\n        let classList = [\n            'n-virtualscroller'\n        ];\n\n        if ( this.threshold && this.threshold <= this.items.length ) {\n            classList.push('n-virtualscroller--absolute');\n        }\n\n        let props = {\n            overflowY: this.overflowY,\n            overflowX: this.overflowX,\n            offsetY: this.offsetY,\n            offsetX: this.offsetX,\n            onSizechange: this.onSizechange,\n        };\n\n        let style = {};\n\n        let totalHeight = this.items.length / this.state.grid *\n            this.itemHeight;\n\n        if ( this.threshold && this.items.length ) {\n            style.height = Math.ceil(totalHeight) + 'px';\n        }\n\n        return (\n            <NScrollbar class={classList} ref=\"scrollbar\" {...props}>\n                <div ref=\"inner\" class=\"n-virtualscroller__inner\" style={style}>\n                    { this.ctor('renderItems')() }\n                </div>\n            </NScrollbar>\n        );\n    }\n\n}\n","import { UUID, Num, Arr, Obj, Dom, Any, Event, Locale } from \"@kizmann/pico-js\";\nimport NDraghandler from \"../draghandler/draghandler\";\n\nglobal.DEBUG_NDLIST = false;\n\nexport default {\n\n    name: 'NDraglist',\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        expanded: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => height * 0.265;\n            }\n        },\n\n        lazyload: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 34;\n            },\n            type: [Number]\n        },\n\n        itemOffset: {\n            default()\n            {\n                return 30;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderExpand: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggable: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            modifier: [],\n            virtuals: [], \n            visible: [], \n            childNodes: {}, \n            highlight: [],\n            firstSelected: null,\n            lastSelected: null,\n            tempCurrent: this.current, \n            tempExpanded: this.expanded, \n            tempSelected: this.selected\n        };\n    },\n\n    beforeMount()\n    {\n        this.drag = new NDraghandler(this);\n\n        Dom.find(window).on('keydown',\n            this.watchModifierDown, this._uid);\n\n        Dom.find(window).on('keyup',\n            this.watchModifierUp, this._uid);\n    },\n\n    mounted()\n    {\n        let frame = this.$refs.virtualscroller.\n            $refs.inner;\n\n        this.drag.bindRoot(frame);\n\n        this.$watch('tempSelected', this.watchSelected, \n            { deep: true });\n\n        this.refreshVirtuals();\n    },\n\n    beforeUnmount()\n    {\n        this.drag.unbindRoot();\n\n        Dom.find(document).off('keydown', null, this.uid);\n        Dom.find(document).off('keyup', null, this.uid);\n    },\n\n    watch: {\n        \n        items()\n        {\n            if ( this.scrollTopOnChange ) {\n                this.scrollTo();\n            }\n\n            this.refreshVirtuals();\n        },\n\n        virtuals()\n        {\n            this.filterVirtuals();\n        },\n\n        expanded(value)\n        {\n            this.tempExpanded = value;\n\n            this.filterVirtuals();\n        },\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n        current(value)\n        {\n            this.tempCurrent = value;\n        }\n\n    },\n\n    methods: {\n\n        watchModifierDown(e)\n        {\n            Arr.add(this.modifier, e.which);\n        },\n\n        watchModifierUp(e)\n        {\n            Arr.remove(this.modifier, e.which);\n        },\n\n        watchSelected()\n        {\n            if ( ! this.tempSelected.length ) {\n                return this.firstSelected = null;\n            }\n\n            this.firstSelected = Arr.find(this.virtuals, {\n                [this.uniqueProp]: this.tempSelected[0]\n            });\n        },\n\n        updateNode(node)\n        {\n            Obj.set(this, node.value.route, node.item);\n\n            this.$emit('update:items', this.items);\n        },\n\n        findVirtual(unique)\n        {\n            let value = Arr.find(this.virtuals, (item) => {\n                return item[this.uniqueProp] === unique;\n            });\n\n            if ( ! value ) {\n                return null;\n            }\n\n            return {\n                value, item: Obj.get(this, value.route, null)\n            };\n        },\n\n        refreshVirtuals()\n        {\n            this.virtuals = this.drag.reduce(this.items);\n\n            if ( global.DEBUG_NDLIST ) {\n                console.log('Total virtual items mounted: ' + this.virtuals.length);\n            }\n        },\n\n        filterVirtuals()\n        {\n            this.visible = Arr.filter(this.virtuals, (node) => {\n                return Arr.contains(this.tempExpanded, node.cascade.slice(0, -1));\n            });\n        },\n\n        getIndex(unique)\n        {\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: unique\n            });\n        },\n\n        getCurrentIndex()\n        {\n            if ( ! this.tempCurrent ) {\n                return -1;\n            }\n\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            if ( ! this.$refs.virtualscroller ) {\n                return Any.delay(() => this.scrollTo(x, y));\n            }\n\n            this.$refs.virtualscroller.scrollTo(x, y);\n        },\n\n        scrollToIndex(index)\n        {\n            if ( ! this.$refs.virtualscroller ) {\n                return Any.delay(() => this.scrollToIndex(index));\n            }\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isDraggable(node)\n        {\n            let canDrag = this.allowDrag;\n\n            if ( ! Any.isFunction(canDrag) ) {\n                canDrag = () => this.allowDrag;\n            }\n\n            return canDrag(node);\n        },\n\n        isHighlight(node)\n        {\n            return Arr.has(this.highlight, node.value[this.uniqueProp]);\n        },\n\n        highlightNode(value, key = null)\n        {\n            clearTimeout(this.refresh);\n\n            // Clear highlight items\n            this.highlight = [];\n\n            Arr.recursive(this.items, this.childProp, (node, cascade) => {\n\n                if ( Obj.get(node, key || this.uniqueProp) !== value ) {\n                    return;\n                }\n\n                Arr.each(cascade, (item) => {\n                    Arr.add(this.tempExpanded, item[this.uniqueProp]);\n                });\n\n                Arr.add(this.highlight, node[this.uniqueProp]);\n            });\n\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            this.$nextTick(this.scrollToHighlight);\n            \n            this.refresh = setTimeout(() =>\n                this.highlight = [], this.highlightTimeout);\n            \n            this.filterVirtuals();\n        },\n\n        scrollToHighlight()\n        {\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: Arr.first(this.highlight)\n            });\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isCurrent(node)\n        {\n            return this.renderCurrent && this.tempCurrent && \n                node.value[this.uniqueProp] === this.tempCurrent[this.uniqueProp] ;\n        },\n\n        setCurrent(node)\n        {\n            let isSameNode = this.tempCurrent && \n                this.tempCurrent[this.uniqueProp] === node.value[this.uniqueProp];\n\n            if ( isSameNode ) {\n                return;\n            }\n\n            this.$emit('update:current', \n                this.tempCurrent = node.item);\n            \n            Event.fire('NDraglist:syncCurrent', node.item, this.uid);\n        },\n\n        setRawCurrent(index)\n        {\n            let route = Obj.get(this.visible, \n                [index, 'route']);\n\n            if ( ! route ) {\n                return this.setRawCurrent(0);\n            }\n\n            let item = Obj.get(this, route);\n\n            this.$refs.virtualscroller\n                .scrollIntoView(index);\n\n            this.$emit('update:current', \n                this.tempCurrent = item);\n            \n            Event.fire('NDraglist:syncCurrent', item, this.uid);\n        },\n\n        setNextCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = 0;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index++;\n            }\n\n            if ( index >= this.visible.length ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        setPrevCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = this.visible.length - 1;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index--;\n            }\n\n            if ( index < 0 ) {\n                index = reset;\n            }\n            \n            this.setRawCurrent(index);\n        },\n\n        syncCurrent()\n        {\n            return ['NDraglist:syncCurrent', this.uid];\n        },\n\n        isDisabled(node)\n        {\n            let canSelect = this.allowSelect;\n\n            if ( ! Any.isFunction(canSelect) ) {\n                canSelect = () => this.allowSelect;\n            }\n\n            return ! canSelect(node) || (this.firstSelected &&\n                node.value.depth !== this.firstSelected.depth);\n        },\n\n        hasChildren(node)\n        {\n            return !! this.getChildren(node).length;\n        },\n\n        getChildren(node)\n        {\n            return Obj.get(node.item, this.childProp, []);\n        },\n\n        isExpanded(node)\n        {\n            return Arr.has(this.tempExpanded, node.value[this.uniqueProp]);\n        },\n\n        expandItem(node)\n        {\n            if ( ! this.hasChildren(node) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempExpanded, node.value[this.uniqueProp]);\n\n            this.filterVirtuals();\n        },\n\n        expandCurrent()\n        {\n            if ( ! this.tempCurrent ) {\n                return;\n            }\n\n            let children = Obj.get(this.tempCurrent, \n                this.childProp);\n\n            if ( Any.isEmpty(children) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempExpanded, \n                this.tempCurrent[this.uniqueProp]);\n\n            this.filterVirtuals();\n        },\n\n        isSelected(node)\n        {\n            return Arr.has(this.tempSelected, node.value[this.uniqueProp]);\n        },\n\n        isTotalSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length === this.tempSelected;\n        },\n\n        isInterSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length !== this.tempSelected &&\n                this.tempSelected;\n        },\n\n        toggleSingleNode(node)\n        {\n            Arr.toggle(this.tempSelected, this.lastSelected =\n                node.value[this.uniqueProp]);\n        },\n\n        toggleRangeNode(node)\n        {\n            let indexies = [0, -1], reversed = false;\n\n            if ( ! Any.isEmpty(this.lastSelected) ) {\n                indexies[1] = this.getIndex(this.lastSelected);\n            }\n\n            indexies[0] = this.getIndex(node.value[this.uniqueProp]);\n\n            if ( indexies[1] > indexies[0] ) {\n                reversed = true;\n            }\n\n            if ( ! reversed ) {\n                indexies = [indexies[1]+1, indexies[0]+1];\n            }\n\n            Arr.each(this.items.slice(indexies[0], indexies[1]), (item, index) => {\n                Arr.toggle(this.tempSelected, item[this.uniqueProp]);\n            });\n\n            this.lastSelected = node.value[this.uniqueProp];\n        },\n\n        selectItem(node)\n        {\n            if ( this.isDisabled(node) ) {\n                return;\n            }\n\n            ! Arr.has(this.modifier, 16) || this.renderExpand ?\n                this.toggleSingleNode(node) : this.toggleRangeNode(node);\n\n            this.$emit('update:selected', this.tempSelected);\n        },\n\n        selectAll()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            let indexies = Arr.each(visible, (item) => {\n                return item[this.uniqueProp];\n            });\n\n            if ( indexies.length === this.tempSelected.length ) {\n                return this.$emit('update:selected', this.tempSelected = []);\n            }\n\n            this.lastSelected = null;\n\n            this.$emit('update:selected', this.tempSelected = indexies);\n        },\n\n        unselectAll()\n        {\n            if ( this.tempSelected.length ) {\n                this.$emit('update:selected', this.tempSelected = []);\n            }\n        },\n\n        bindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).on('keydown', \n                this.onKeydown, this.uid)\n        },\n\n        unbindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).off('keydown', \n                null, this.uid)\n        },\n\n        onKeydown(event, el)\n        {\n            if ( Dom.find(el).closest('input') ) {\n                return;\n            }\n\n            if ( event.which === 32 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.expandCurrent();\n            }\n\n            if ( event.which === 38 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.setPrevCurrent();\n            }\n\n            if ( event.which === 40 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.setNextCurrent();\n            }\n        }\n\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={! this.showEmptyIcon} class=\"n-draglist__empty\">\n                 { this.$slots.empty && this.$slots.empty() || this.trans('No entries') }\n            </NEmptyIcon>\n        );\n    },\n\n    renderItem(props)\n    {\n        return (\n            <NDraglistItem {...Obj.except(props, ['index'])}>\n                { { default: this.$slots.default } }\n            </NDraglistItem>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draglist',\n            'n-draglist--' + this.size,\n            'n-draglist--' + this.type\n        ];\n\n        if ( ! this.items.length ) {\n            classList.push('n-empty');\n        }\n\n        let passed = [\n            'threshold', 'bufferItems', 'itemHeight', \n            'overflowX', 'overflowY',  'offsetX', 'offsetY', 'useKeys'\n        ];\n\n        let props = Obj.only(this.$props, passed, {\n            items: this.visible,\n            onMouseenter: this.bindKeydown,\n            onMouseleave: this.unbindKeydown\n        });\n\n        return (\n            <NVirtualscroller ref=\"virtualscroller\" class={classList} {...props}>\n                { { default: this.ctor('renderItem'), empty: this.ctor('renderEmpty') } }\n            </NVirtualscroller>\n        );\n    }\n\n}\n","import { Str, Obj, Arr, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDraglistItem',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n    \n    },\n\n    provide()\n    {\n        return {\n            NDraggableItem: this\n        };\n    },\n\n    props: {\n\n        value: {\n            required: true\n        },\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return Obj.get(this.value, this.NDraggable.uniqueProp);\n        },\n\n        item()\n        {\n            return Obj.get(this.NDraggable, this.value.route);\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: ! this.NDraggable.lazyload\n        };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => {\n\n            if ( this.NDraggable.draggable ) {\n                this.timer = setTimeout(() => {\n                    this.NDraggable.drag.bindNode(this);\n                }, 10);\n            }\n\n            this.init = true;\n        }, 5);\n    },\n\n    beforeUnmount()\n    {\n        clearTimeout(this.timer);\n\n        this.NDraggable.drag.unbindNode(this);\n    },\n\n    methods: {\n\n        copy()\n        {\n            return this.NDraggable.drag.copyNode(this);\n        },\n\n        remove()\n        {\n            return this.NDraggable.drag.removeNode(this);\n        },\n\n        hasChildren()\n        {\n            return this.NDraggable.hasChildren(this);\n        },\n\n        isDisabled()\n        {\n            return this.NDraggable.isDisabled(this);\n        },\n\n        isHighlight()\n        {\n            return this.NDraggable.isHighlight(this);\n        },\n\n        isCurrent()\n        {\n            return this.NDraggable.isCurrent(this);\n        },\n\n        isDraggable()\n        {\n            return this.NDraggable.isDraggable(this);\n        },\n\n        isExpanded()\n        {\n            return this.NDraggable.isExpanded(this);\n        },\n\n        expandItem()\n        {\n            this.NDraggable.expandItem(this);\n        },\n\n        isSelected()\n        {\n            return this.NDraggable.isSelected(this);\n        },\n\n        selectItem()\n        {\n            this.NDraggable.selectItem(this);\n        },\n\n        onClick(event)\n        {\n            let isExpand = Dom.find(event.target)\n                .closest('.n-draglist-item__expand');\n\n            if ( isExpand ) {\n                return;\n            }\n\n            this.NDraggable.setCurrent(this);\n\n            if ( Arr.has(global.keyMods, 91) ) {\n                this.NDraggable.selectItem(this);\n            }\n\n            this.NDraggable.$emit('row-click', this);\n        },\n\n        onDblclick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            this.NDraggable.$emit('row-dblclick', this);\n        }\n\n    },\n\n    renderElement()\n    {\n        let classList = [\n            'n-draglist-item__element'\n        ];\n\n        if ( ! this.init ) {\n            return (<div class={classList} />);\n        }\n\n        let props = {\n            value: this.value,\n            item: this.item,\n            copy: this.copy,\n            remove: this.remove,\n        };\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.NDraggable.renderNode ) {\n            renderFunction = this.NDraggable.renderNode;\n        }\n\n        return (\n            <div class={classList}>\n                { renderFunction(props) }\n            </div>\n        );\n    },\n\n    renderSpacer()\n    {\n        let width = this.value.depth * \n            this.NDraggable.itemOffset;\n\n        if ( ! width ) {\n            return null;\n        }\n\n        let style = {\n            width: width + 'px'\n        };\n\n        return (\n            <div class=\"n-draglist-item__spacer\" style={style}>\n                { /* SPACER */ }\n            </div>\n        );\n    },\n\n    renderHandle()\n    {\n        if ( ! this.NDraggable.renderHandle ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( this.NDraggable.draggable && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        return (\n            <div class=\"n-draglist-item__handle\" {...props}>\n                <div class=\"n-draglist-item__ellipsis\">\n                    <i class={ nano.Icons.handle }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderExpand()\n    {\n        if ( ! this.NDraggable.renderExpand ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.expandItem\n        };\n\n        return (\n            <div class=\"n-draglist-item__expand\" {...props}>\n                <div class=\"n-draglist-item__angle\">\n                    <i class={ nano.Icons.angleRight }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderSelect()\n    {\n        if ( ! this.NDraggable.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.selectItem\n        };\n\n        return (\n            <div class=\"n-draglist-item__select\" {...props}>\n                <div class=\"n-draglist-item__checkbox\">\n                    <i class={ nano.Icons.checked }></i>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draglist-item'\n        ];\n\n        if ( this.hasChildren() ) {\n            classList.push('n-children');\n        }\n\n        if ( this.isDisabled() ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.isSelected() ) {\n            classList.push('n-selected');\n        }\n\n        if ( this.isExpanded() ) {\n            classList.push('n-expanded');\n        }\n\n        if ( this.isCurrent() ) {\n            classList.push('n-current');\n        }\n\n        if ( this.isHighlight() ) {\n            classList.push('n-highlight');\n        }\n\n        let props = {\n            onClick: this.onClick,\n            onDblclick: this.onDblclick,\n        };\n\n        if ( this.NDraggable.draggable && ! this.NDraggable.handle && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        props['data-unique'] = this.value[this.NDraggable.uniqueProp];\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHandle')() }\n                { this.ctor('renderSpacer')() }\n                { this.ctor('renderExpand')() }\n                { this.ctor('renderSelect')() }\n                { this.ctor('renderElement')() }\n            </div>\n        );\n    }\n\n}\n","import { UUID, Num, Arr, Obj, Dom, Any, Event, Locale } from \"@kizmann/pico-js\";\nimport NDraghandler from \"../draghandler/draghandler\";\n\nglobal.DEBUG_NDLIST = false;\n\nexport default {\n\n    name: 'NDraggrid',\n\n    model: {\n        prop: 'items'\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        renderNode: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            }\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => -1;\n            }\n        },\n\n        lazyload: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 200;\n            },\n            type: [Number]\n        },\n\n        itemWidth: {\n            default()\n            {\n                return 150;\n            },\n            type: [Number]\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        deathzone: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggable: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            virtuals: [],\n            visible: [],\n            childNodes: {},\n            highlight: [],\n            firstSelected: null,\n            tempCurrent: this.current,\n            tempExpanded: this.expanded,\n            tempSelected: this.selected\n        };\n    },\n\n    beforeMount()\n    {\n        this.drag = new NDraghandler(this);\n    },\n\n    mounted()\n    {\n        let frame = this.$refs.virtualscroller.\n            $refs.inner;\n\n        this.drag.bindRoot(frame);\n\n        this.$watch('tempSelected', this.watchSelected,\n            { deep: true });\n\n        this.refreshVirtuals();\n    },\n\n    beforeUnmount()\n    {\n        this.drag.unbindRoot();\n\n        Dom.find(document).off('keydown', null, this.uid);\n    },\n\n    watch: {\n\n        items()\n        {\n            if ( this.scrollTopOnChange ) {\n                this.scrollTo();\n            }\n\n            this.refreshVirtuals();\n        },\n\n        virtuals()\n        {\n            this.filterVirtuals();\n        },\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n        current(value)\n        {\n            this.tempCurrent = value;\n        }\n\n    },\n\n    methods: {\n\n        watchSelected()\n        {\n            if ( ! this.tempSelected.length ) {\n                return this.firstSelected = null;\n            }\n\n            this.firstSelected = Arr.find(this.virtuals, {\n                [this.uniqueProp]: this.tempSelected[0]\n            });\n        },\n\n        refreshVirtuals()\n        {\n            this.virtuals = this.drag.reduce(this.items);\n\n            if ( global.DEBUG_NDLIST ) {\n                console.log('Total virtual items mounted: ' + this.virtuals.length);\n            }\n        },\n\n        filterVirtuals()\n        {\n            this.visible = Arr.filter(this.virtuals, (node) => {\n                return node.depth === 0;\n            });\n        },\n\n        getIndex(unique)\n        {\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: unique\n            });\n        },\n\n        getCurrentIndex()\n        {\n            if ( ! this.tempCurrent ) {\n                return -1;\n            }\n\n            return Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n        },\n\n        scrollTo(x = 0, y = 0)\n        {\n            this.$refs.virtualscroller.scrollTo(x, y);\n        },\n\n        scrollToIndex(index)\n        {\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isDraggable(node)\n        {\n            let canDrag = this.allowDrag;\n\n            if ( ! Any.isFunction(canDrag) ) {\n                canDrag = () => this.allowDrag;\n            }\n\n            return canDrag(node);\n        },\n\n        isHighlight(node)\n        {\n            return Arr.has(this.highlight, node.value[this.uniqueProp]);\n        },\n\n        highlightNode(value, key = null)\n        {\n            clearTimeout(this.refresh);\n\n            // Clear highlight items\n            this.highlight = [];\n\n            Arr.recursive(this.items, this.childProp, (node, cascade) => {\n\n                if ( Obj.get(node, key || this.uniqueProp) !== value ) {\n                    return;\n                }\n\n                Arr.each(cascade, (item) => {\n                    Arr.add(this.tempExpanded, item[this.uniqueProp]);\n                });\n\n                Arr.add(this.highlight, node[this.uniqueProp]);\n            });\n\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            this.$nextTick(this.scrollToHighlight);\n\n            this.refresh = setTimeout(() =>\n                this.highlight = [], this.highlightTimeout);\n\n            this.filterVirtuals();\n        },\n\n        scrollToHighlight()\n        {\n            if ( ! this.highlight.length ) {\n                return;\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: Arr.first(this.highlight)\n            });\n\n            this.$refs.virtualscroller.scrollIntoView(index);\n        },\n\n        isCurrent(node)\n        {\n            return this.renderCurrent && this.tempCurrent &&\n                node.value[this.uniqueProp] === this.tempCurrent[this.uniqueProp] ;\n        },\n\n        setCurrent(node)\n        {\n            let isSameNode = this.tempCurrent &&\n                this.tempCurrent[this.uniqueProp] === node.value[this.uniqueProp];\n\n            if ( isSameNode ) {\n                return;\n            }\n\n            this.$emit('update:current',\n                this.tempCurrent = node.item);\n\n            Event.fire('NDraggrid:syncCurrent', node.item, this.uid);\n        },\n\n        setRawCurrent(index)\n        {\n            let route = Obj.get(this.visible,\n                [index, 'route']);\n\n            if ( ! route ) {\n                return this.setRawCurrent(0);\n            }\n\n            let item = Obj.get(this, route);\n\n            this.$refs.virtualscroller\n                .scrollIntoView(index);\n\n            this.$emit('update:current',\n                this.tempCurrent = item);\n\n            Event.fire('NDraggrid:syncCurrent', item, this.uid);\n        },\n\n        setNextCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = 0;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index++;\n            }\n\n            if ( index >= this.visible.length ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        setPrevCurrent()\n        {\n            if ( ! this.visible.length ) {\n                return;\n            }\n\n            let reset = this.visible.length - 1;\n\n            if ( ! this.tempCurrent ) {\n                return this.setRawCurrent(reset);\n            }\n\n            let index = Arr.findIndex(this.visible, {\n                [this.uniqueProp]: this.tempCurrent[this.uniqueProp]\n            });\n\n            if ( index !== -1 ) {\n                index--;\n            }\n\n            if ( index < 0 ) {\n                index = reset;\n            }\n\n            this.setRawCurrent(index);\n        },\n\n        syncCurrent()\n        {\n            return ['NDraggrid:syncCurrent', this.uid];\n        },\n\n        isDisabled(node)\n        {\n            let canSelect = this.allowSelect;\n\n            if ( ! Any.isFunction(canSelect) ) {\n                canSelect = () => this.allowSelect;\n            }\n\n            return ! canSelect(node) || (this.firstSelected &&\n                node.value.depth !== this.firstSelected.depth);\n        },\n\n        isSelected(node)\n        {\n            return Arr.has(this.tempSelected, node.value[this.uniqueProp]);\n        },\n\n        isTotalSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length === this.tempSelected;\n        },\n\n        isInterSelected()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            return visible.length !== this.tempSelected &&\n                this.tempSelected;\n        },\n\n        selectItem(node)\n        {\n            if ( this.isDisabled(node) ) {\n                return;\n            }\n\n            Arr.toggle(this.tempSelected, node.value[this.uniqueProp]);\n\n            this.$emit('update:selected', this.tempSelected);\n        },\n\n        selectAll()\n        {\n            let visible = Arr.filter(this.visible, (item) => {\n                return ! item.depth;\n            });\n\n            let indexies = Arr.each(visible, (item) => {\n                return item[this.uniqueProp];\n            });\n\n            if ( indexies.length === this.tempSelected.length ) {\n                return this.$emit('update:selected', this.tempSelected = []);\n            }\n\n            this.$emit('update:selected', this.tempSelected = indexies);\n        },\n\n        unselectAll()\n        {\n            if ( this.tempSelected.length ) {\n                this.$emit('update:selected', this.tempSelected = []);\n            }\n        },\n\n        bindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).on('keydown',\n                this.onKeydown, this.uid)\n        },\n\n        unbindKeydown()\n        {\n            if ( ! this.keyEvents ) {\n                return;\n            }\n\n            Dom.find(document).off('keydown',\n                null, this.uid)\n        },\n\n        onKeydown(event, el)\n        {\n            if ( Dom.find(el).closest('input') ) {\n                return;\n            }\n\n            if ( event.which === 38 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                // this.setPrevCurrent();\n            }\n\n            if ( event.which === 40 ) {\n                event.preventDefault();\n                event.stopPropagation();\n                // this.setNextCurrent();\n            }\n        }\n\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={! this.showEmptyIcon} class=\"n-draggrid__empty\">\n                { this.$slots.empty && this.$slots.empty() || this.trans('No entries') }\n            </NEmptyIcon>\n        );\n    },\n\n    renderItem(props)\n    {\n        return (\n            <NDraggridItem {...Obj.except(props, ['index'])}>\n                { { default: this.$slots.default } }\n            </NDraggridItem>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draggrid',\n            'n-draggrid--' + this.size,\n            'n-draggrid--' + this.type\n        ];\n\n        if ( ! this.items.length ) {\n            classList.push('n-empty');\n        }\n\n        let passed = [\n            'threshold', 'deathzone', 'itemHeight', 'itemWidth',\n            'overflowX', 'overflowY',  'offsetX', 'offsetY', 'useKeys'\n        ];\n\n        let props = Obj.only(this.$props, passed, {\n            items: this.visible,\n            onMouseenter: this.bindKeydown,\n            onMouseleave: this.unbindKeydown\n        });\n\n        return (\n            <NVirtualscroller ref=\"virtualscroller\" class={classList} {...props}>\n                { { default: this.ctor('renderItem'), empty: this.ctor('renderEmpty') } }\n            </NVirtualscroller>\n        );\n    }\n\n}\n","import { Str, Arr, Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDraggridItem',\n\n    inject: {\n\n        NDraggable: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NDraggableItem: this\n        };\n    },\n\n    props: {\n\n        value: {\n            required: true\n        }\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return Obj.get(this.value, this.NDraggable.uniqueProp);\n        },\n\n        item()\n        {\n            return Obj.get(this.NDraggable, this.value.route);\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: ! this.NDraggable.lazyload\n        };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => {\n\n            if ( this.NDraggable.draggable ) {\n                this.timer = setTimeout(() => {\n                    this.NDraggable.drag.bindNode(this);\n                }, 50);\n            }\n\n            this.init = true;\n        }, 40);\n    },\n\n    beforeUnmount()\n    {\n        if ( ! this.init ) {\n            clearTimeout(this.timer);\n        }\n\n        this.NDraggable.drag.unbindNode(this);\n    },\n\n    methods: {\n\n        copy()\n        {\n            return this.NDraggable.drag.copyNode(this);\n        },\n\n        remove()\n        {\n            return this.NDraggable.drag.removeNode(this);\n        },\n\n        isDisabled()\n        {\n            return this.NDraggable.isDisabled(this);\n        },\n\n        isHighlight()\n        {\n            return this.NDraggable.isHighlight(this);\n        },\n\n        isCurrent()\n        {\n            return this.NDraggable.isCurrent(this);\n        },\n\n        isDraggable()\n        {\n            return this.NDraggable.isDraggable(this);\n        },\n\n        isSelected()\n        {\n            return this.NDraggable.isSelected(this);\n        },\n\n        selectItem()\n        {\n            this.NDraggable.selectItem(this);\n        },\n\n        onClick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            if ( Arr.has(global.keyMods, 91) ) {\n                this.NDraggable.selectItem(this);\n            }\n\n            this.NDraggable.$emit('row-click', this);\n        },\n\n        onDblclick()\n        {\n            this.NDraggable.setCurrent(this);\n\n            this.NDraggable.$emit('row-dblclick', this);\n        }\n\n    },\n\n    renderElement()\n    {\n        let classList = [\n            'n-draglist-item__element'\n        ];\n\n        if ( ! this.init ) {\n            return (<div class={classList} />);\n        }\n\n        let props = {\n            value: this.value,\n            item: this.item,\n            copy: this.copy,\n            remove: this.remove,\n        };\n\n        let renderFunction = this.$slots.default;\n\n        if ( this.NDraggable.renderNode ) {\n            renderFunction = this.NDraggable.renderNode;\n        }\n\n        return (\n            <div class={classList}>\n                {renderFunction(props)}\n            </div>\n        );\n    },\n\n    renderHandle()\n    {\n        if ( ! this.NDraggable.renderHandle ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( this.NDraggable.draggable && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        return (\n            <div class=\"n-draggrid-item__handle\" {...props}>\n                <div class=\"n-draggrid-item__ellipsis\">\n                    <i class={ nano.Icons.handle }></i>\n                </div>\n            </div>\n        );\n    },\n\n    renderSelect()\n    {\n        if ( ! this.NDraggable.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.selectItem\n        };\n\n        return (\n            <div class=\"n-draggrid-item__select\" {...props}>\n                <div class=\"n-draggrid-item__checkbox\">\n                    <i class={ nano.Icons.checked }></i>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-draggrid-item'\n        ];\n\n        if ( this.isDisabled() ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.isSelected() ) {\n            classList.push('n-selected');\n        }\n\n        if ( this.isCurrent() ) {\n            classList.push('n-current');\n        }\n\n        if ( this.isHighlight() ) {\n            classList.push('n-highlight');\n        }\n\n        let props = {\n            onClick: this.onClick,\n            onDblclick: this.onDblclick,\n        };\n\n        if ( this.NDraggable.draggable && ! this.NDraggable.handle && this.isDraggable() ) {\n            props.draggable = true;\n        }\n\n        props['data-unique'] = this.value[this.NDraggable.uniqueProp];\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHandle')() }\n                { this.ctor('renderSelect')() }\n                { this.ctor('renderElement')() }\n            </div>\n        );\n    }\n\n}\n","import { Obj, Arr, Any, Dom } from \"@kizmann/pico-js\";\n\nconst fileMap = {\n    image: [\n        'jpg', 'jpeg', 'gif', 'svg', 'png'\n    ],\n    video: [\n        'mp4', 'webm', 'mov'\n    ],\n    font: [\n        'woff', 'ttf', 'otf'\n    ],\n    text: [\n        'csv', 'txt', 'html'\n    ],\n    application: [\n        'pdf', 'doc', 'xls'\n    ]\n}\n\nexport default {\n\n    name: 'NPreview',\n\n    props: {\n\n        file: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        thumb: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        fit: {\n            default()\n            {\n                return 'cover';\n            },\n            type: [String]\n        },\n\n        preview: {\n            default()\n            {\n                return true;\n            },\n            typre: [Boolean]\n        },\n\n        showSrc: {\n            default()\n            {\n                return true;\n            },\n            typre: [Boolean]\n        },\n\n        map: {\n            default()\n            {\n                return fileMap;\n            },\n            type: [Object]\n        }\n\n    },\n\n    computed: {\n\n        tempFile()\n        {\n            return this.file || this.thumb;\n        },\n\n        tempThumb()\n        {\n            return this.thumb || this.file;\n        },\n\n        fileMime()\n        {\n            return this.getFileMime();\n        },\n\n        thumbMime()\n        {\n            return this.getThumbMime();\n        },\n\n    },\n\n    data()\n    {\n        return {\n            lightbox: false, load: false\n        };\n    },\n\n    methods: {\n\n        getFileMime(fallback = null)\n        {\n            let file = Obj.get(this.tempFile, 'name',\n                this.tempFile);\n\n            if ( Any.isEmpty(file) ) {\n                return fallback;\n            }\n\n            let extension = file.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n                '$1');\n\n            Obj.each(this.map, (exts, key) => {\n                if ( Arr.has(exts, extension) ) fallback = key;\n            });\n\n            if ( global.resolveVimeo(file) ) {\n                fallback = 'video';\n            }\n\n            if ( global.resolveYoutube(file) ) {\n                fallback = 'video';\n            }\n\n            return fallback;\n        },\n\n        getThumbMime(fallback = null)\n        {\n            let file = Obj.get(this.tempThumb, 'name',\n                this.tempThumb);\n\n            if ( Any.isEmpty(file) ) {\n                return fallback;\n            }\n\n            let extension = file.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n                '$1');\n\n            Obj.each(this.map, (exts, key) => {\n                if ( Arr.has(exts, extension) ) fallback = key;\n            });\n\n            return fallback;\n        },\n\n        showLightbox()\n        {\n            this.lightbox = true;\n        },\n\n    },\n\n    renderPreview()\n    {\n        if ( ! this.preview ) {\n            return this.ctor('renderFull')();\n        }\n\n        if ( this.thumbMime === 'image' ) {\n            return (<NPreviewImage src={this.tempThumb} />);\n        }\n\n        let props = {\n            type: this.thumbMime,\n            showSrc: false,\n        }\n\n        return (<NPreviewPlain src={this.tempThumb} {...props} />);\n    },\n\n    renderFull()\n    {\n        let isObject = Any.isObject(this.tempFile);\n\n        if ( this.fileMime === 'image' ) {\n            return (<NPreviewImage src={this.tempFile} />);\n        }\n\n        if ( this.fileMime === 'video' && ! isObject ) {\n            return (<NPreviewVideo src={this.tempFile} />);\n        }\n\n        let props = {\n            type: this.thumbMime,\n            showSrc: this.showSrc,\n        }\n\n        return (<NPreviewPlain src={this.tempFile} {...props} />);\n    },\n\n    renderLightbox()\n    {\n        if ( ! this.lightbox || ! this.preview ) {\n            return null;\n        }\n\n        let slots = {\n            raw: this.ctor('renderFull')\n        }\n\n        let props = {\n            type: 'preview',\n            width: '80%',\n            height: '90%',\n        }\n\n        return (<NModal vModel={this.lightbox} {...props} v-slots={slots} />);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview',\n            'n-preview--' + this.fit\n        ];\n\n        if ( this.preview ) {\n            classList.push('n-clickable');\n        }\n\n        if ( this.fileMime ) {\n            classList.push('n-mime-' + this.fileMime);\n        }\n\n        let props = {};\n\n        if ( this.preview ) {\n            props.onClick = this.showLightbox;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { [this.ctor('renderPreview')(), this.ctor('renderLightbox')()] }\n            </div>\n        );\n    }\n\n}","import { Obj, Arr, Str, Any, Dom } from \"@kizmann/pico-js\";\n\nglobal.resolveYoutube = function(url, fallback = null) {\n\n    if ( ! Any.isString(url) ) {\n        return fallback;\n    }\n\n    let host = url.match(/^https?:\\/\\/(www\\.)?(youtube\\.com|youtu\\.be)/);\n\n    if ( ! host ) {\n        return fallback;\n    }\n\n    let id = url.match(/(\\?v=.*?)(?=&|$)/);\n\n    if ( id && id.length === 2 ) {\n        return id[0].replace(/^\\?v=/, '');\n    }\n\n    let path = url.match(/(\\.be\\/.*?)(?=\\?|$)/);\n\n    if ( path && path.length === 2 ) {\n        return path[0].replace(/^\\.be\\//, '');\n    }\n\n    let frame = url.match(/(\\/embed\\/)(.*?$)/);\n\n    if ( frame && frame.length === 3 ) {\n        return frame[0].replace(/^\\/embed\\//, '');\n    }\n\n    return fallback;\n}\n\nglobal.resolveVimeo = function(url, fallback = null) {\n\n    if ( ! Any.isString(url) ) {\n        return fallback;\n    }\n\n    let host = url.match(/^https?:\\/\\/(www\\.|player\\.)?vimeo\\.com/);\n\n    if ( ! host ) {\n        return fallback;\n    }\n\n    let path = url.match(/(\\/[0-9]+)(&|$)/);\n\n    if ( path && path.length === 3 ) {\n        return path[0].replace(/(^\\/|&$)/, '');\n    }\n\n    return fallback;\n}\n\nexport default {\n\n    name: 'NPreviewVideo',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            provider: 'plain', unique: null, tempSrc: null\n        };\n    },\n\n    mounted()\n    {\n        this.resolveType();\n    },\n\n    watch: {\n\n        'src': function () {\n            this.resolveType();\n        }\n\n    },\n\n    methods: {\n\n        resolveType()\n        {\n            this.tempSrc = null;\n\n            if ( this.resolveYoutube() ) {\n                return;\n            }\n\n            if ( this.resolveVimeo() ) {\n                return;\n            }\n\n            if ( Any.isObject(this.src) ) {\n                this.resolveData();\n            }\n\n            this.provider = 'plain';\n        },\n\n        resolveData()\n        {\n            console.log('Coming at some point (blob stream)....');\n        },\n\n        resolveYoutube()\n        {\n            let youtube = global.resolveYoutube(this.src);\n\n            if ( ! youtube ) {\n                return false;\n            }\n\n            this.provider = 'youtube';\n\n            this.$emit('resolve:youtube', this.unique = youtube);\n\n            return true;\n        },\n\n        resolveVimeo()\n        {\n            let vimeo = global.resolveVimeo(this.src);\n\n            if ( ! vimeo ) {\n                return false;\n            }\n\n            this.provider = 'vimeo';\n\n            this.$emit('resolve:vimeo', this.unique = vimeo);\n\n            return true;\n        }\n\n    },\n\n    renderYoutube()\n    {\n        let props = {\n            src: `https://www.youtube.com/embed/${this.unique}`\n        };\n\n        return (\n            <iframe {...props}></iframe>\n        );\n    },\n\n    renderVimeo()\n    {\n        let props = {\n            src: `https://player.vimeo.com/video/${this.unique}`\n        };\n\n        return (\n            <iframe {...props}></iframe>\n        );\n    },\n\n    renderPlain()\n    {\n        let src = Obj.get(this.src, 'name', this.src);\n\n        let extension = src.replace(/^.*?\\.([^.?]+)(\\?.*?)?$/,\n            '$1');\n\n        return (\n            <video width=\"320\" height=\"240\" controls>\n                <source src={this.tempSrc || this.src} type={`video/${extension}`} />\n            </video>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-video'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('render' + Str.ucfirst(this.provider))() }\n            </div>\n        );\n    }\n\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    cmer(classList)\n    {\n        let attrsList = {};\n\n        if ( Any.isString(classList) ) {\n            attrsList[classList] = true;\n        }\n\n        if ( Any.isArray(classList) ) {\n            Arr.each(classList, (value) => attrsList[value] = true);\n        }\n\n        if ( Any.isPlain(classList) ) {\n            Obj.assign(attrsList, classList);\n        }\n\n        if ( Any.isString(this.$attrs.class) ) {\n            attrsList[this.$attrs.class] = true;\n        }\n\n        if ( Any.isArray(this.$attrs.class) ) {\n            Arr.each(this.$attrs.class, (value) => attrsList[value] = true);\n        }\n\n        if ( Any.isPlain(this.$attrs.class) ) {\n            Obj.assign(attrsList, this.$attrs.class);\n        }\n\n        return attrsList;\n    }\n\n}\n","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport { Comment } from 'vue';\n\nexport default {\n\n    cslo(slot = 'default', props = {})\n    {\n        if ( ! this.$slots[slot] ) {\n            return false;\n        }\n\n        return this.$slots[slot](props).findIndex((o) => {\n            return o.type !== Comment;\n        }) !== -1;\n    }\n\n}\n","import { Arr, Obj, Dom, Locale } from \"@kizmann/pico-js\";\n\nimport CtorMixin from \"./mixins/src/ctor\";\nimport CmerMixin from \"./mixins/src/cmer\";\nimport CsloMixin from \"./mixins/src/cslo\";\n\nexport const Icons = {\n    handle: 'fa fa-ellipsis-v',\n    checked: 'fa fa-check',\n    circle: 'fa fa-circle',\n    intermediate: 'fa fa-minus',\n    clock: 'fa fa-clock',\n    calendar: 'fa fa-calendar',\n    times: 'fa fa-times',\n    primary: 'fa fa-info-circle',\n    success: 'fa fa-check-circle',\n    warning: 'fa fa-exclamation-circle',\n    danger: 'fa fa-times-circle',\n    info: 'fa fa-info-circle',\n    angleUp: 'fa fa-angle-up',\n    angleRight: 'fa fa-angle-right',\n    angleDown: 'fa fa-angle-down',\n    angleLeft: 'fa fa-angle-left',\n    angleDoubleLeft: 'fa fa-angle-double-left',\n    angleDoubleRight: 'fa fa-angle-double-right'\n};\n\nexport const Settings = {\n    iconPosition: 'before',\n    notifySize: 'md',\n    notifyPosition: 'bottom-start'\n};\n\nexport function Install(App, Icons = {}, Styles = {})\n{\n    /**\n     * @const global.pi\n     */\n\n    if ( typeof global.pi === 'undefined' ) {\n        return console.error('pico-js is not available.');\n    }\n\n    Obj.each(global.pi, (value, key) => {\n        App.config.globalProperties[key] = value;\n    });\n\n    App.config.globalProperties.ctor = CtorMixin.ctor;\n    App.config.globalProperties.cmer = CmerMixin.cmer;\n    App.config.globalProperties.cslo = CsloMixin.cslo;\n\n    App.config.globalProperties.trans = Locale.trans;\n    App.config.globalProperties.choice = Locale.choice;\n\n    global.nano.Icons = Obj.assign(Icons, global.nano.Icons);\n    global.nano.Settings = Obj.assign(Settings, global.nano.Settings);\n\n    require('./alert/index').default(App);\n    require('./notification/index').default(App);\n    require('./empty/index').default(App);\n    require('./config/index').default(App); //!complex 17.1\n    require('./scrollbar/index').default(App);\n    require('./virtualscroller/index').default(App);\n    require('./draggable/index').default(App);\n    require('./loader/index').default(App);\n    require('./resizer/index').default(App);\n    require('./popover/index').default(App);\n    require('./modal/index').default(App);\n    require('./button/index').default(App);\n    require('./input/index').default(App);\n    require('./input-number/index').default(App);\n    require('./textarea/index').default(App);\n    require('./select/index').default(App);\n    require('./checkbox/index').default(App);\n    require('./radio/index').default(App);\n    require('./slider/index').default(App);\n    require('./switch/index').default(App);\n    require('./confirm/index').default(App);\n    require('./cascader/index').default(App);\n    require('./datepicker/index').default(App);\n    require('./timepicker/index').default(App);\n    // require('./datetimepicker/index'); 18.1\n    require('./transfer/index').default(App);\n    require('./form/index').default(App); // check\n    require('./tabs/index').default(App);\n    require('./collapse/index').default(App);\n    require('./table/index').default(App); // 18.1 options\n    require('./paginator/index').default(App);\n    require('./info/index').default(App); //!complex 16.1\n    require('./preview/index').default(App);\n    require('./map/index').default(App);\n    require('./file/index').default(App);\n    require('./rating/index').default(App);\n\n    // SX only ez 17.1\n    // require('./file-list/index'); // SX only 17.1\n\n    // require('./chart/index'); // Ignore\n    // require('./wysiwyg/index'); // Ignore\n}\n\nexport const Nano = {\n    Icons: Icons, Settings: Settings, Install: Install\n};\n\nglobal.keyMods = [];\n\nDom.find(document).on('keydown', (event) => {\n    Arr.add(global.keyMods, event.which);\n});\n\nDom.find(document).on('keyup', (event) => {\n    Arr.remove(global.keyMods, event.which);\n});\n\nDom.find(document).on('dragstart', (event) => {\n    Arr.add(global.keyMods, event.which);\n});\n\nDom.find(document).on('dragend', (event) => {\n    global.keyMods = [];\n});\n\nif ( typeof global.nano === 'undefined' ) {\n    global.nano = Nano;\n}\n\nexport default Nano;\n","import Virtualscroller from './src/virtualscroller/virtualscroller.beta';\n\nexport default function (App) {\n    App.component(Virtualscroller.name, Virtualscroller);\n}","import Draglist from './src/draglist/draglist';\nimport DraglistItem from './src/draglist-item/draglist-item';\nimport Draggrid from './src/draggrid/draggrid';\nimport DraggridItem from './src/draggrid-item/draggrid-item';\n\nexport default function (App) {\n    App.component(Draglist.name, Draglist);\n    App.component(DraglistItem.name, DraglistItem);\n    App.component(Draggrid.name, Draggrid);\n    App.component(DraggridItem.name, DraggridItem);\n}","import { Any, Arr, Obj, Dom, Event, UUID } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTable',\n\n    provide()\n    {\n        return {\n            NTable: this\n        };\n    },\n\n    props: {\n\n        items: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        draggable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        visible: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        selected: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        expanded: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        filter: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        sortProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        sortDir: {\n            default()\n            {\n                return 'desc';\n            },\n            type: [String]\n        },\n\n        closeFilterOnEnter: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        group: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        allowGroups: {\n            default()\n            {\n                return ['default'];\n            },\n            type: [Array]\n        },\n\n        handle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        safezone: {\n            default()\n            {\n                return (height) => height * 0.51;\n            }\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        itemHeight: {\n            default()\n            {\n                return 38;\n            },\n            type: [Number]\n        },\n\n        itemOffset: {\n            default()\n            {\n                return 30;\n            },\n            type: [Number]\n        },\n\n        scrollTopOnChange: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        renderSelect: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        renderHandle: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderExpand: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        renderCurrent: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        transformDrop: {\n            default()\n            {\n                return (node) => node;\n            }\n        },\n\n        disableMove: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        insertNode: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        removeNode: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowSelect: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrag: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        allowDrop: {\n            default()\n            {\n                return () => true;\n            }\n        },\n\n        threshold: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        useKeys: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keyEvents: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        highlightTimeout: {\n            default()\n            {\n                return 7000;\n            },\n            type: [Number]\n        },\n\n    },\n\n    computed: {\n\n        checked()\n        {\n            return !!this.tempSelected.length &&\n                this.tempSelected.length === this.items.length;\n        },\n\n        intermediate()\n        {\n            return !!this.tempSelected.length &&\n                this.tempSelected.length !== this.items.length\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            elements: [],\n            tempVisible: this.visible,\n            tempVisibleProps: [],\n            tempSelected: this.selected,\n            tempSortProp: this.sortProp,\n            tempSortDir: this.sortDir,\n            tempFilter: this.filter,\n            tempFilterProps: [],\n        }\n    },\n\n    mounted()\n    {\n        this.$watch('tempVisible',\n            this.makeVisibleProps, { deep: true });\n\n        if ( !this.tempVisible.length ) {\n            Arr.each(this.elements, this.detectVisible);\n        }\n    },\n\n    watch: {\n\n        selected(value)\n        {\n            this.tempSelected = value;\n        },\n\n    },\n\n    methods: {\n\n        addColumn(column)\n        {\n            Arr.add(this.elements, column,\n                { uid: column.uid });\n        },\n\n        removeColumn(column)\n        {\n            Arr.remove(this.elements,\n                { uid: column.uid });\n        },\n\n        getColumnIndex(column)\n        {\n            if ( !Any.isString(column) ) {\n                column = column['prop'];\n            }\n\n            return Arr.findIndex(this.tempVisibleProps,\n                column);\n        },\n\n        getColumnVisiblity(column)\n        {\n            if ( !Any.isString(column) ) {\n                column = column.prop;\n            }\n\n            return Arr.has(this.tempVisible, column);\n        },\n\n        getColumnSorted(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.sortProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            if ( this.tempSortProp !== prop ) {\n                return null;\n            }\n\n            return this.tempSortDir;\n        },\n\n        getColumnFilter(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.filterProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            return Arr.find(this.tempFilter, {\n                property: prop\n            });\n        },\n\n        getColumnFiltered(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.filterProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n            return Arr.has(this.tempFilterProps, prop);\n        },\n\n        detectVisible(column)\n        {\n            if ( column.detectVisibity() ) {\n                Arr.add(this.tempVisible, column.prop);\n            }\n        },\n\n        makeVisibleProps()\n        {\n            this.tempVisibleProps = Arr.intersect(\n                Arr.extract(this.elements, 'prop'), this.tempVisible);\n\n            this.$nextTick(this.$refs.scrollbar.onResize);\n        },\n\n        sortByColumn(column)\n        {\n            let prop = column;\n\n            if ( !Any.isString(prop) ) {\n                prop = column.sortProp;\n            }\n\n            if ( Any.isEmpty(prop) ) {\n                prop = column.prop;\n            }\n\n\n            let dir = this.tempSortDir;\n\n            if ( prop === this.tempSortProp && this.tempSortDir === 'desc' ) {\n                dir = 'asc';\n            }\n\n            if ( prop === this.tempSortProp && this.tempSortDir === 'asc' ) {\n                dir = 'desc';\n            }\n\n            if ( this.tempSortDir !== dir ) {\n                this.$emit('update:sortDir', this.tempSortDir = dir);\n            }\n\n            if ( this.tempSortProp !== prop ) {\n                this.$emit('update:sortProp', this.tempSortProp = prop);\n            }\n\n            this.$emit('sort', this.tempSortProp, this.tempSortDir);\n        },\n\n        replaceFilter(filter, search)\n        {\n            Arr.replace(this.tempFilter, filter, search);\n\n            let filters = Arr.filter(this.tempFilter, (filter) => {\n                return Arr.has(this.tempFilterProps, filter.property);\n            });\n\n            this.$emit('update:filter', filters);\n\n            this.$emit('filter', filters, this.tempFilterProps);\n        },\n\n        resetFilter()\n        {\n            this.tempFilter = this.tempFilterProps = [];\n\n            Event.fire('NTable:reset', this.uid);\n\n            this.$emit('update:filter', this.tempFilter);\n\n            this.$emit('filter', this.tempFilter, this.tempFilterProps);\n        },\n\n        selectAll()\n        {\n            this.$refs.draggable.selectAll();\n        },\n\n        highlightNode(value, key = null)\n        {\n            this.$refs.draggable.highlightNode(value, key);\n        },\n\n        syncCurrent()\n        {\n            return this.$refs.draggable.syncCurrent();\n        },\n\n        refreshCurrent()\n        {\n            this.$refs.draggable.refreshCurrent();\n        },\n\n    },\n\n    renderHandle()\n    {\n        if ( !this.renderHandle ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-draglist-item__handle\">\n                { /* Only used in row */}\n            </div>\n        )\n    },\n\n    renderExpand()\n    {\n        if ( !this.renderExpand ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-draglist-item__expand\">\n                { /* Only used in row */}\n            </div>\n        )\n    },\n\n    renderSelect()\n    {\n        if ( !this.renderSelect ) {\n            return null;\n        }\n\n        let props = {\n            modelValue: this.checked,\n            intermediate: this.intermediate,\n            disabled: !this.items.length,\n            onClick: this.selectAll\n        };\n\n        return (\n            <div class=\"n-draglist-item__select\">\n                <NCheckbox {...props}></NCheckbox>\n            </div>\n        );\n    },\n\n    renderBody(props)\n    {\n        let columns = Obj.each(this.elements, (column) => {\n            return column.ctor('renderBody')(props);\n        });\n\n        return Obj.values(columns);\n    },\n\n    renderContext()\n    {\n        let columns = Obj.each(this.elements, (column) => {\n            return (\n                <NCheckbox class=\"n-table__checkbox\" value={column.prop}>\n                    {column.label}\n                </NCheckbox>\n            );\n        });\n\n        return (\n            <NPopover trigger=\"context\" width={140}>\n                <NCheckboxGroup vModel={this.tempVisible} align=\"vertical\">\n                    {Obj.values(columns)}\n                </NCheckboxGroup>\n            </NPopover>\n        );\n    },\n\n    renderHead()\n    {\n        let defaultRender = [\n            this.ctor('renderHandle')(),\n            this.ctor('renderExpand')(),\n            this.ctor('renderSelect')(),\n            this.ctor('renderContext')()\n        ];\n\n        let columns = Obj.each(this.elements, (column) => {\n            return column.ctor('renderHead')();\n        });\n\n        return (\n            <div class=\"n-table__header\">\n                {defaultRender} {Obj.values(columns)}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let except = [\n            'visible', 'filter', 'sortProp',\n            'sortDir', 'closeFilterOnEnter'\n        ];\n\n        let props = Obj.except(this.$props, except, {\n            items: this.items,\n            selected: this.tempSelected,\n            overflowX: false,\n            useKeys: this.useKeys,\n            // renderNode: this.ctor('renderBody')\n        });\n\n        props['onRowClick'] = (...args) => {\n            this.$emit('row-click', ...args);\n        }\n\n        props['onRowDblclick'] = (...args) => {\n            this.$emit('row-dblclick', ...args);\n        }\n\n        props['onUpdate:items'] = (value) => {\n            this.$emit('update:items', value);\n        }\n\n        props['onUpdate:current'] = (value) => {\n            this.$emit('update:current', value);\n        }\n\n        props['onUpdate:expanded'] = (value) => {\n            this.$emit('update:expanded', value);\n        }\n\n        props['onUpdate:selected'] = (value) => {\n            this.$emit('update:selected', this.tempSelected = value);\n        }\n\n        let draggableHtml = (\n            <div class=\"n-table__body\">\n                <NDraglist ref=\"draggable\" {...props} offsetX={25}>\n                    {{ default: this.ctor('renderBody') }}\n                </NDraglist>\n            </div>\n        );\n\n        return (\n            <div class=\"n-table\">\n                <NScrollbar ref=\"scrollbar\" class=\"n-table__wrap\" fixture={true} overflowY={false}>\n                    <div class=\"n-table__inner\">\n                        {[this.ctor('renderHead')(), draggableHtml]}\n                    </div>\n                </NScrollbar>\n                {this.$slots.default && this.$slots.default()}\n            </div>\n        );\n    },\n\n}","import { Any, Arr, Obj, Str, Dom, UUID, Num, Locale } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTableColumn',\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        prop: {\n            default()\n            {\n                return UUID();\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'string';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'left';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        filter: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        visible: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean, Function]\n        },\n\n        breakpoint: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        previewProp: {\n            default()\n            {\n                return 'preview';\n            },\n            type: [String]\n        },\n\n        matrix: {\n            default()\n            {\n                return - 1;\n            },\n            type: [Number, String]\n        },\n\n        matrixProp: {\n            default()\n            {\n                return 'matrix';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Object, Array, Function]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        sortProp: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        filterProp: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        fluid: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        fixedWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        minWidth: {\n            default()\n            {\n                return 120;\n            }\n        },\n\n        maxWidth: {\n            default()\n            {\n                return 0;\n            }\n        },\n\n        emptyText: {\n            default()\n            {\n                return '-';\n            },\n            type: [String]\n        },\n\n        undefinedText: {\n            default()\n            {\n                return Locale.trans('-');\n            },\n            type: [String]\n        },\n\n        trueText: {\n            default()\n            {\n                return Locale.trans('Yes');\n            },\n            type: [String]\n        },\n\n        falseText: {\n            default()\n            {\n                return Locale.trans('No');\n            },\n            type: [String]\n        },\n\n        datetimeFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm');\n            },\n            type: [String]\n        },\n\n        allowUncheck: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        matrixValues()\n        {\n            if ( this.type !== 'matrix' ) {\n                return;\n            }\n\n            let values = {};\n\n            if ( Any.isEmpty(this.modelValue) ) {\n                return values;\n            }\n\n            Arr.each(this.modelValue, (item) => {\n                Obj.set(values, item[this.NTable.uniqueProp],\n                    Num.matrix(item[this.matrixProp]));\n            });\n\n            return values;\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NTableColumn: this\n        };\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(), tempWidth: 0\n        };\n    },\n\n    methods: {\n\n        detectVisibity()\n        {\n            let visible = this.visible;\n\n            if ( this.breakpoint ) {\n                visible &= Dom.find(this.NTable.$el).width() > this.breakpoint;\n            }\n\n            return visible;\n        },\n\n        sortByColumn(event)\n        {\n            if ( !Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            if ( !Dom.find(event.target).closest('.n-table-column__filter') ) {\n                this.NTable.sortByColumn(this);\n            }\n        },\n\n    },\n\n    beforeMount()\n    {\n        this.changedStates = {};\n        this.NTable.addColumn(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NTable.removeColumn(this);\n    },\n\n    renderHead()\n    {\n        if ( !this.NTable.getColumnVisiblity(this) ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-column',\n            'n-table-column--' + this.align,\n            'n-table-column--' + this.type,\n        ];\n\n        let sortDirection = this.NTable.getColumnSorted(this);\n\n        if ( sortDirection ) {\n            classList.push('n-sorted', 'n-' + sortDirection);\n        }\n\n        if ( this.fluid || !this.width ) {\n            classList.push('n-fluid');\n        }\n\n        if ( this.fixedWidth ) {\n            classList.push('n-fixed');\n        }\n\n        if ( this.NTable.getColumnFiltered(this) ) {\n            classList.push('n-filtered');\n        }\n\n        let style = {};\n\n        if ( this.fixedWidth ) {\n            style.width = this.fixedWidth + 'px';\n        }\n\n        if ( this.width ) {\n            style.flexBasis = this.width + 'px';\n        }\n\n        let props = {\n            modelValue: this.tempWidth,\n            width:      this.width,\n            minWidth:   this.minWidth,\n            maxWidth:   this.maxWidth,\n            disabled:   !!this.fixedWidth,\n            group:      [this.NTable.uid],\n        };\n\n        props['onUpdate:modelValue'] = (value) => {\n            this.tempWidth = value;\n        }\n\n        if ( this.sort ) {\n            props.onMousedown = this.sortByColumn;\n        }\n\n        return (\n            <NResizer ref=\"column\" class={classList} style={style} {...props}>\n                {this.ctor('renderHeadSort')()}\n                {this.ctor('renderHeadLabel')()}\n                {this.ctor('renderHeadFilter')()}\n            </NResizer>\n        );\n    },\n\n    renderHeadLabel()\n    {\n        let classList = [\n            'n-table-column__label'\n        ];\n\n        let labelHtml = (\n            <div class={classList}>\n                <span>{this.label}</span>\n            </div>\n        );\n\n        if ( Any.isEmpty(this.tooltip) ) {\n            return labelHtml;\n        }\n\n        let tooltipHtml = (\n            <NPopover type=\"tooltip\">{this.tooltip}</NPopover>\n        );\n\n        return [labelHtml, tooltipHtml];\n    },\n\n    renderHeadSort()\n    {\n        if ( !this.sort ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-table-column__sort\">\n                <i>{ /* Sorting angles */}</i>\n            </div>\n        )\n    },\n\n    renderHeadFilter()\n    {\n        if ( !this.filter ) {\n            return null;\n        }\n\n        let angleHtml = (\n            <div class=\"n-table-column__filter\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n\n        let component = resolveComponent('NTableFilter' +\n            Str.ucfirst(this.type));\n\n        return [\n            angleHtml, h(component, { column: this })\n        ];\n    },\n\n    renderBody(props)\n    {\n        if ( !this.NTable.getColumnVisiblity(this) ) {\n            return null;\n        }\n\n        let uid = props.value[this.NTable.uniqueProp]\n            + this.uid;\n\n        let classList = [\n            'n-table-cell',\n            'n-table-cell--' + this.align,\n            'n-table-cell--' + this.type,\n        ];\n\n        if ( this.fluid ) {\n            classList.push('n-fluid');\n        }\n\n        if ( this.tempWidth ) {\n            classList.push('n-fixed');\n        }\n\n        let index = this.NTable.getColumnIndex(this);\n\n        let offset = 0;\n\n        if ( index === 0 ) {\n            offset = props.value.depth * this.NTable.itemOffset;\n        }\n\n        let style = {\n            width: (this.tempWidth - offset) + 'px'\n        };\n\n        if ( this.minWidth ) {\n            style.minWidth = (this.minWidth - offset) + 'px';\n        }\n\n        if ( this.maxWidth ) {\n            style.maxWidth = (this.maxWidth - offset) + 'px';\n        }\n\n        let passed = Obj.except(this.$attrs, [], {\n            ...props, uid: uid, class: classList, style: style, column: this\n        });\n\n        let component = resolveComponent('NTableCell' +\n            Str.ucfirst(this.type));\n\n        return h(component, passed);\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}","import { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        },\n\n        NDraggableItem: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        uid: {\n            required: true\n        },\n\n        column: {\n            required: true\n        },\n\n        item: {\n            required: true\n        },\n\n        value: {\n            required: true\n        },\n\n        copy: {\n            required: true\n        },\n\n        remove: {\n            required: true\n        },\n\n\n    },\n\n    computed: {\n\n        input()\n        {\n            return Obj.get(this.item, this.column.prop);\n        }\n\n    },\n\n    data()\n    {\n        return { init: false };\n    },\n\n    mounted()\n    {\n        this.timer = setTimeout(() => this.init = true, 20);\n    },\n\n    beforeUnmount()\n    {\n        clearTimeout(this.timer);\n    },\n\n    methods: {\n\n        setFirstState(state)\n        {\n            Obj.set(this.column.changedStates,\n                this.uid, this.firstState = state);\n        }\n\n    },\n\n    render()\n    {\n        if ( this.column.$slots.default ) {\n            return this.column.$slots.default(this);\n        }\n        \n        return (\n            <div>{ this.input }</div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellString',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertString(this.input, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellBoolean',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertBoolean(this.input, this.column.trueText, this.column.falseText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellDatetime',\n\n    extends: TableCell,\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertDatetime(this.input, this.column.datetimeFormat, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellOption',\n\n    extends: TableCell,\n\n    renderOption(value)\n    {\n        let options = this.column.options;\n\n        if ( Any.isFunction(options) ) {\n            options = this.column.options(this);\n        }\n\n        options = Arr.each(options, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let prop = this.column.optionsValue;\n\n        let option = Arr.find(options, (item) => {\n            return Obj.get(item, prop) == value;\n        });\n\n        if ( ! option ) {\n            return [this.column.emptyText];\n        }\n\n        return Obj.get(option, this.column.optionsLabel,\n            this.column.undefinedText);\n    },\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        let input = ! Any.isObject(this.input) ?\n            [this.input] : this.input;\n\n        return (\n            <div>\n                <span>{ Arr.each(input, this.ctor('renderOption')) }</span>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellImage',\n\n    extends: TableCell,\n\n    computed: {\n\n        preview()\n        {\n            return Obj.get(this.item, this.column.previewProp);\n        }\n\n    },\n\n    render()\n    {\n        if ( ! this.init ) {\n            return null;\n        }\n\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div> \n            );\n        }\n\n        let classList = [\n            'n-table-cell',\n            'n-table-cell--' + this.column.type\n        ];\n\n        let props = {\n            fit: 'contain',\n        }\n\n        return (\n            <div class={classList}>\n                <NPreview file={this.preview || this.input} thumb={this.input} {...props} />\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Num, Any, Obj, Arr, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellMatrix',\n\n    extends: TableCell,\n\n    beforeMount()\n    {\n        this.firstState = Obj.get(this.column.changedStates,\n            this.uid);\n    },\n\n    methods: {\n\n        toggleMatrix()\n        {\n            if ( this.column.matrix === -1 ) {\n                return this.toggleSelect();\n            }\n\n            let itemList = this.column.modelValue;\n\n            if ( itemList === null ) {\n                itemList = [];\n            }\n\n            let item = Arr.find(itemList, {\n                [this.NTable.uniqueProp]: this.value[this.NTable.uniqueProp]\n            });\n\n            if ( ! item ) {\n                item = Obj.assign({}, this.item, { [this.column.matrixProp]: 0 });\n            }\n\n            let currentMatrix = Num.int(item[this.column.matrixProp]);\n\n            let matrix = Arr.toggle(Num.matrix(currentMatrix),\n                Num.int(this.column.matrix));\n\n            item[this.column.matrixProp] = Num.combine(matrix);\n\n            Arr.replace(itemList, item, {\n                [this.NTable.uniqueProp]: item[this.NTable.uniqueProp]\n            });\n\n            this.column.$emit('update:modelValue', itemList);\n        },\n\n        toggleSelect()\n        {\n            let itemList = this.column.modelValue;\n\n            if ( itemList === null ) {\n                itemList = [];\n            }\n\n            let fallback = Obj.assign({}, this.item, {\n                [this.column.matrixProp]: this.column.matrix\n            });\n\n            let finder = {\n                [this.NTable.uniqueProp]: this.value[this.NTable.uniqueProp],\n            };\n\n            let item = Arr.find(itemList, finder);\n\n            if ( ! item ) {\n                Arr.add(itemList, fallback);\n            } else {\n                Arr.remove(itemList, finder);\n            }\n\n            this.column.$emit('update:modelValue', itemList);\n        },\n\n        isChecked()\n        {\n            let matrix = Obj.get(this.column.matrixValues,\n                this.item[this.NTable.uniqueProp]);\n\n            if ( ! matrix ) {\n                return false;\n            }\n\n            let value = Num.int(this.column.matrix);\n\n            if ( value === -1 ) {\n                return true;\n            }\n\n            return Arr.has(matrix, value);\n        },\n\n        isDisabled()\n        {\n            if ( ! Any.isFunction(this.column.disabled) ) {\n                return this.column.disabled;\n            }\n\n            return this.column.disabled(this);\n        }\n\n    },\n\n    render()\n    {\n        let checked = this.isChecked();\n\n        if ( this.firstState === null ) {\n            this.setFirstState(checked);\n        }\n\n        if ( ! this.init ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-cell--checkbox'\n        ];\n\n        if ( this.firstState !== checked ) {\n            classList.push('n-changed');\n        }\n\n        if ( checked ) {\n            classList.push('n-checked');\n        }\n\n        let isDisabled = this.isDisabled();\n\n        if ( this.column.allowUncheck ) {\n            isDisabled = isDisabled && ! checked;\n        }\n\n        if ( isDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( ! isDisabled ) {\n            props.onClick = this.toggleMatrix;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <i class={nano.Icons.checked}></i>\n            </div>\n        );\n    }\n\n}\n","import TableCell from \"../table-cell\";\nimport { Num, Any, Obj, Arr } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableCellSelect',\n\n    extends: TableCell,\n\n    beforeMount()\n    {\n        this.firstState = Obj.get(this.column.changedStates,\n            this.uid);\n    },\n\n    methods: {\n\n        toggleSelect()\n        {\n            let item = null;\n\n            if ( ! this.isChecked() ) {\n                item = Obj.assign({}, this.item);\n            }\n\n            this.column.$emit('update:modelValue', item);\n        },\n\n        isChecked()\n        {\n            if ( Any.isEmpty(this.column.modelValue) ) {\n                return false;\n            }\n\n            return Obj.get(this.column.modelValue, this.NTable.uniqueProp) ===\n                this.value[this.NTable.uniqueProp];\n        },\n\n        isDisabled()\n        {\n            if ( ! Any.isEmpty(this.column.modelValue) ) {\n                return true;\n            }\n\n            if ( ! Any.isFunction(this.column.disabled) ) {\n                return this.column.disabled;\n            }\n\n            return this.column.disabled(this);\n        },\n\n    },\n\n    render()\n    {\n        let checked = this.isChecked();\n\n        if ( this.firstState === null ) {\n            this.setFirstState(checked);\n        }\n\n        if ( ! this.init ) {\n            return null;\n        }\n\n        let classList = [\n            'n-table-cell--checkbox'\n        ];\n\n        if ( this.firstState !== checked ) {\n            classList.push('n-changed');\n        }\n\n        if ( checked ) {\n            classList.push('n-checked');\n        }\n\n        let isDisabled = this.isDisabled();\n\n        if ( this.column.allowUncheck ) {\n            isDisabled = isDisabled && ! checked;\n        }\n\n        if ( isDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( ! isDisabled ) {\n            props.onClick = this.toggleSelect;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <i class={nano.Icons.checked}></i>\n            </div>\n        );\n    }\n\n}\n","import {Arr, Obj, Any, Dom, Event, UUID} from \"@kizmann/pico-js\";\n\nexport default {\n\n    inject: {\n\n        NTable: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        column: {\n            required: true\n        }\n\n    },\n\n    computed: {\n\n        tempFilter()\n        {\n            return this.NTable.getColumnFilter(this.column);\n        },\n\n        canReset()\n        {\n            return ! this.NTable.getColumnFiltered(this.column);\n        },\n\n        canApply()\n        {\n            return ! Any.isEmpty(this.filter.value);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            filter: this.getFilterClone(), visible: false\n        };\n    },\n\n    beforeMount()\n    {\n        this.mountFilter();\n    },\n\n    mounted()\n    {\n        Event.bind('NTable:reset', \n            this.resetFilter, this._.uid);\n\n        Dom.find(document).on('keydown', \n            this.onKeydown, this._.uid);\n    },\n\n    beforeUnmount()\n    {\n        Event.unbind('NTable:reset', \n            this._.uid);\n\n        Dom.find(document).off('keydown', \n            null, this._.uid);\n    },\n\n    methods: {\n\n        getFilterClone()\n        {\n            let tempFilter = this.NTable.getColumnFilter(this.column);\n\n            if ( Any.isEmpty(tempFilter) ) {\n                return null;\n            }\n\n            return Obj.clone(tempFilter);\n        },\n\n        getFilterProp()\n        {\n            return this.column.filterProp || \n                this.column.prop;\n        },\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null,\n                property:   this.getFilterProp(), \n            };\n        },\n\n        mountFilter()\n        {\n            if ( this.filter ) {\n                return this.applyFilter();\n            }\n\n            this.filter = this.getDefaultFilter();\n\n            if ( ! this.canApply ) {\n                return;\n            }\n\n            Arr.add(this.NTable.tempFilter, this.filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        resetFilter(uid)\n        {\n            if ( this.NTable.uid !== uid ) {\n                return;\n            }\n\n            this.filter = this.getDefaultFilter();\n\n            Arr.add(this.NTable.tempFilter, this.filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        onKeydown(event)\n        {\n            if ( ! this.visible ) {\n                return;\n            }\n\n            if ( event.which === 13 && this.canApply ) {\n                this.applyFilter();\n            }\n\n            if ( event.which === 13 && ! this.canApply ) {\n                this.clearFilter();\n            }\n\n            let closeAnyway = event.which === 13 &&\n                this.NTable.closeFilterOnEnter;\n\n            if ( closeAnyway || event.which === 27 ) {\n                this.$refs.popover.close();\n            }\n        },\n\n        applyFilter()\n        {\n            let filter = Obj.clone(this.filter);\n\n            Arr.add(this.NTable.tempFilterProps, \n                this.getFilterProp());\n\n            this.NTable.replaceFilter(filter, {\n                property: this.getFilterProp()\n            });\n        },\n\n        clearFilter()\n        {\n            let filter = this.getDefaultFilter();\n\n            Arr.remove(this.NTable.tempFilterProps, \n                this.getFilterProp());\n\n            this.NTable.replaceFilter(filter, {\n                property: this.getFilterProp()\n            });\n\n            this.filter = filter;\n        }\n\n    },\n\n    renderForm()\n    {\n        return null;\n    },\n\n    renderApply()\n    {\n        let props = {\n            type: 'primary',\n            link: true,\n            size: 'xs',\n            disabled: ! this.canApply\n        };\n\n        return (\n            <NButton {...props} onClick={this.applyFilter}>\n                { this.trans('Apply') }\n            </NButton>\n        );\n    },\n\n    renderReset()\n    {\n        let props = {\n            type: 'danger',\n            link: true,\n            size: 'xs',\n            disabled: this.canReset,\n        };\n\n        return (\n            <NButton {...props} onClick={this.clearFilter}>\n                { this.trans('Reset') }\n            </NButton>\n        );\n    },\n\n    renderFooter()\n    {\n        return (\n            <div class=\"n-table-filter__footer\">\n                { this.ctor('renderReset')() }\n                { this.ctor('renderApply')() }\n            </div>\n        )\n    },\n\n    render()\n    {\n        let props = {\n            class: 'n-table-filter__popover',\n            trigger: 'click',\n            size: 'sm',\n            width: 220,\n        }\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.visible} {...props}>\n                {\n                    { default: this.ctor('renderForm'), footer: this.ctor('renderFooter') }\n                }\n            </NPopover>\n        );\n    }\n}\n","import TableFilter from \"../table-filter\";\nimport { Dom, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterString',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'li',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            li: this.trans('Includes value'),\n            nl: this.trans('Excludes value'),\n            eq: this.trans('Equal value'),\n            ne: this.trans('Except value'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NInput size=\"sm\" vModel={this.filter.value} />\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\nimport { Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterBoolean',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'in',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            1: this.trans(this.column.trueText),\n            0: this.trans(this.column.falseText),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.value} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\n\nexport default {\n\n    name: 'NTableFilterDatetime',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type, \n                value:      null, \n                operator:   'eq',\n                property:   this.getFilterProp(), \n            };\n        }\n\n    },\n\n    renderForm()\n    {\n        let options = {\n            eq: this.trans('Exact date'),\n            lt: this.trans('Before date'),\n            gt: this.trans('After date'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NDatepicker size=\"sm\" vModel={this.filter.value} format={this.column.datetimeFormat} />\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import TableFilter from \"../table-filter\";\nimport { Arr, Obj, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTableFilterOption',\n\n    extends: TableFilter,\n\n    methods: {\n\n        getDefaultFilter()\n        {\n            return {\n                type:       this.column.type,\n                value:      [],\n                operator:   'in',\n                property:   this.getFilterProp(),\n            };\n        }\n\n    },\n\n    renderOption(value)\n    {\n        let props = {\n            value: Obj.get(value, this.column.optionsValue)\n        };\n\n        return (\n            <NCheckbox {...props}>{ Obj.get(value, this.column.optionsLabel) }</NCheckbox>\n        );\n    },\n\n    renderForm()\n    {\n        let items = this.column.options;\n\n        if ( Any.isFunction(items) ) {\n            items = this.column.options(this);\n        }\n\n        items = Arr.each(items, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let options = {\n            in: this.trans('Includes value'),\n            ni: this.trans('Excludes value'),\n        };\n\n        return (\n            <NForm>\n                <NFormItem>\n                    <NCheckboxGroup size=\"sm\" align=\"vertical\" vModel={this.filter.value}>\n                        { Arr.each(items, this.ctor('renderOption')) }\n                    </NCheckboxGroup>\n                </NFormItem>\n                <NFormItem>\n                    <NSelect size=\"sm\" vModel={this.filter.operator} options={options} />\n                </NFormItem>\n            </NForm>\n        );\n    }\n\n}\n","import Table from './src/table/table';\nimport TableColumn from './src/table-column/table-column';\nimport TableCellString from './src/table-cell/types/table-cell-string';\nimport TableCellBoolean from './src/table-cell/types/table-cell-boolean';\nimport TableCellDatetime from './src/table-cell/types/table-cell-datetime';\nimport TableCellOption from './src/table-cell/types/table-cell-option';\nimport TableCellImage from './src/table-cell/types/table-cell-image';\nimport TableCellMatrix from './src/table-cell/types/table-cell-matrix';\nimport TableCellSelect from './src/table-cell/types/table-cell-select';\nimport TableFilterString from './src/table-filter/types/table-filter-string';\nimport TableFilterBoolean from './src/table-filter/types/table-filter-boolean';\nimport TableFilterDatetime from './src/table-filter/types/table-filter-datetime';\nimport TableFilterOption from './src/table-filter/types/table-filter-option';\n\n\nexport default function (App) {\n    App.component(Table.name, Table);\n    App.component(TableColumn.name, TableColumn);\n    App.component(TableCellString.name, TableCellString);\n    App.component(TableCellBoolean.name, TableCellBoolean);\n    App.component(TableCellDatetime.name, TableCellDatetime);\n    App.component(TableCellOption.name, TableCellOption);\n    App.component(TableCellImage.name, TableCellImage);\n    App.component(TableCellMatrix.name, TableCellMatrix);\n    App.component(TableCellSelect.name, TableCellSelect);\n    App.component(TableFilterString.name, TableFilterString);\n    App.component(TableFilterBoolean.name, TableFilterBoolean);\n    App.component(TableFilterDatetime.name, TableFilterDatetime);\n    App.component(TableFilterOption.name, TableFilterOption);\n}","import { Arr, Any, Obj, Event, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInfo',\n\n    model: {\n        prop: 'item'\n    },\n\n    props: {\n\n        item: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        syncEvent: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        showEmptyIcon: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(),\n            elements: [],\n            options: [],\n            tempValue: this.item,\n        };\n    },\n\n    watch: {\n\n        item(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.bindSyncEvent();\n    },\n\n    beforeUnmount()\n    {\n        this.unbindSyncEvent();\n    },\n\n    updated()\n    {\n        Any.delay(() => this.$refs.scrollbar.adaptHeight(), 500);\n    },\n\n    methods: {\n\n        bindSyncEvent()\n        {\n            if ( !this.syncEvent ) {\n                return;\n            }\n\n            this.options = this.syncEvent;\n\n            if ( Any.isFunction(this.options) ) {\n                this.options = this.options(this);\n            }\n\n            let syncFunction = (value, uid = null) => {\n                if ( uid === this.options[1] ) {\n                    this.setValue(value);\n                }\n            };\n\n            Event.bind(this.options[0], syncFunction,\n                this.uid);\n        },\n\n        unbindSyncEvent()\n        {\n            Event.unbind(this.options[0], this.uid);\n        },\n\n        setValue(value)\n        {\n            this.$emit('update:modelValue',\n                this.tempValue = value);\n        },\n\n        addColumn(column)\n        {\n            Arr.add(this.elements,\n                column, { uid: column.uid });\n        },\n\n        removeColumn(column)\n        {\n            Arr.remove(this.elements,\n                { uid: column.uid });\n        },\n\n    },\n\n    provide()\n    {\n        return {\n            NInfo: this\n        };\n    },\n\n    renderEmpty()\n    {\n        return (\n            <NEmptyIcon disabled={!this.showEmptyIcon} class=\"n-info__empty\">\n                {this.$slots.empty && this.$slots.empty() || this.trans('No entry')}\n            </NEmptyIcon>\n        );\n    },\n\n    renderBody()\n    {\n        if ( Any.isEmpty(this.tempValue) ) {\n            return this.ctor('renderEmpty')();\n        }\n\n        let elements = Obj.each(this.elements, (column) => {\n            return (\n                <div class=\"n-info__column\">\n                    {column.ctor('renderLabel')({ item: this.tempValue })}\n                    {column.ctor('renderBody')({ item: this.tempValue })}\n                </div>\n            );\n        });\n\n        return (\n            <div class=\"n-info__body\">\n                {Any.vals(elements)}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-info',\n            'n-info--' + this.type,\n            'n-info--' + this.size,\n        ];\n\n        let infoHtml = (\n            <NScrollbar ref=\"scrollbar\" relative={this.relative}>\n                {this.ctor('renderBody')()}\n            </NScrollbar>\n        );\n\n        return (\n            <div class={classList}>\n                {[infoHtml, this.$slots.default()]}\n            </div>\n        );\n    }\n}\n","import { UUID, Obj, Locale, Str } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NInfoColumn',\n\n    inject: {\n\n        NInfo: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        prop: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'string';\n            },\n            type: [String]\n        },\n\n        previewProp: {\n            default()\n            {\n                return 'preview';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Object, Array, Function]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        emptyText: {\n            default()\n            {\n                return Locale.trans('-');\n            },\n            type: [String]\n        },\n\n        trueText: {\n            default()\n            {\n                return Locale.trans('Yes');\n            },\n            type: [String]\n        },\n\n        falseText: {\n            default()\n            {\n                return Locale.trans('No');\n            },\n            type: [String]\n        },\n\n        datetimeFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm');\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID()\n        };\n    },\n\n    beforeMount()\n    {\n        this.NInfo.addColumn(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NInfo.removeColumn(this);\n    },\n\n    renderLabel()\n    {\n        if ( this.$slots.label ) {\n            return this.$slots.label();\n        }\n        \n        return (\n            <div class=\"n-info-column\">\n                <span>{this.label}</span>\n            </div>\n        );\n    },\n\n    renderBody(props)\n    {\n        let passed = Obj.except(props, [], {\n            column: this\n        });\n\n        let component = resolveComponent('NInfoField' + \n            Str.ucfirst(this.type));\n\n        if ( ! component ) {\n            return null;\n        }\n\n        passed.class = [\n            'n-info-field',\n            'n-info-field--' + this.type\n        ];\n\n         return h(component, passed);\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}\n","import { Obj } from \"@kizmann/pico-js\";\nimport CtorMixin from \"../../../mixins/src/ctor\";\n\nexport default {\n\n    inject: {\n\n        NInfo: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        column: {\n            required: true\n        },\n\n        item: {\n            required: true\n        },\n\n    },\n\n    computed: {\n\n        input()\n        {\n            return Obj.get(this.item, this.column.prop);\n        }\n\n    },\n\n    render()\n    {\n        return (\n            <div>\n                <span>{ this.input }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldString',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertString(this.input, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldBoolean',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertBoolean(this.input, this.column.trueText, this.column.falseText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldDatetime',\n\n    extends: InfoField,\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        return (\n            <div>\n                <span>{ Any.convertDatetime(this.input, this.column.datetimeFormat, this.column.emptyText) }</span>\n            </div>\n        );\n    }\n\n}\n","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport InfoField from \"../info-field\";\n\nexport default {\n\n    name: 'NInfoFieldOption',\n\n    extends: InfoField,\n\n    renderOption(value)\n    {\n        let options = this.column.options;\n\n        if ( Any.isFunction(options) ) {\n            options = this.column.options(this);\n        }\n\n        let prop = this.column.optionsValue;\n\n        options = Arr.each(options, (value, index) => {\n            return { $value: value, $index: index };\n        });\n\n        let option = Arr.find(options, (item) => {\n            return Obj.get(item, prop) == value;\n        });\n\n        if ( ! option ) {\n            return [this.column.emptyText];\n        }\n\n        return Obj.get(option, this.column.optionsLabel,\n            this.column.undefinedText);\n    },\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        let input = ! Any.isObject(this.input) ?\n            [this.input] : this.input;\n\n        return (\n            <div>\n                <span>{ Arr.each(input, this.ctor('renderOption')) }</span>\n            </div>\n        );\n    }\n\n}\n","import InfoField from \"../info-field\";\nimport { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInfoFieldImage',\n\n    extends: InfoField,\n\n    computed: {\n\n        preview()\n        {\n            return Obj.get(this.item, this.column.previewProp);\n        }\n\n    },\n\n    render()\n    {\n        if ( this.column.cslo('default', this) ) {\n            return (\n                <div>{ this.column.$slots.default(this) }</div>\n            );\n        }\n\n        let props = {\n            fit: 'contain',\n        };\n\n        return (\n            <div>\n                <NPreview file={this.preview || this.input} thumb={this.input} {...props} />\n            </div>\n        );\n    }\n\n}\n","import Info from './src/info/info';\nimport InfoColumn from './src/info-column/info-column';\nimport InfoFieldString from './src/info-field/types/info-field-string';\nimport InfoFieldBoolean from './src/info-field/types/info-field-boolean';\nimport InfoFieldDatetime from './src/info-field/types/info-field-datetime';\nimport InfoFieldOption from './src/info-field/types/info-field-option';\nimport InfoFieldImage from './src/info-field/types/info-field-image';\n\nexport default function (App) {\n    App.component(Info.name, Info);\n    App.component(InfoColumn.name, InfoColumn);\n    App.component(InfoFieldString.name, InfoFieldString);\n    App.component(InfoFieldBoolean.name, InfoFieldBoolean);\n    App.component(InfoFieldDatetime.name, InfoFieldDatetime);\n    App.component(InfoFieldOption.name, InfoFieldOption);\n    App.component(InfoFieldImage.name, InfoFieldImage);\n}","import { Arr, Any, Dom, Event, UUID } from \"@kizmann/pico-js\";\n\n\nexport default {\n\n    name: 'NPopover',\n\n    provide()\n    {\n        return {\n            NPopover: this\n        };\n    },\n\n    inject: {\n\n        NPopover: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        window: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-center';\n            },\n            type: [String]\n        },\n\n        scrollClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        multiClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        framerate: {\n            default()\n            {\n                return 15;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: false,\n            clientX: 0,\n            clientY: 0,\n            target: null,\n            prevent: false,\n        };\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            this.tempValue = this.modelValue;\n        },\n\n        tempValue()\n        {\n            Any.delay(this.refreshVisible, 50);\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.tempValue = this.modelValue;\n    },\n\n    mounted()\n    {\n        this.target = Dom.find(this.$el).previous().get(0);\n\n        if ( this.trigger === 'context' ) {\n            this.target = Dom.find(this.$el).parent().get(0);\n        }\n\n        if ( this.window ) {\n            Dom.find(document.body).append(this.$el);\n        }\n\n        if ( this.listen && this.trigger === 'hover' ) {\n            Dom.find(document.body).on('mousemove', \n                Any.framerate(this.onHover, 30), this._.uid);\n        }\n\n        if ( this.listen && this.trigger === 'click' ) {\n            Dom.find(document.body).on(this.mousedown, \n                Any.framerate(this.onClick, 30), this._.uid);\n        }\n\n        if ( this.listen && this.trigger === 'context' ) {\n            Dom.find(document.body).on('contextmenu', \n                Any.framerate(this.onContext, 30), this._.uid);\n        }\n\n        Dom.find(document.body).on(this.mousedown, \n            Any.framerate(this.onExit, 30), this._.uid);\n\n        Event.bind('NPopover:close', this.onCloseEvent, this._.uid);\n    },\n\n    beforeUnmount()\n    {\n        this.$el.remove();\n\n        Dom.find(document).off('mousemove', null, this._.uid);\n        Dom.find(document).off('mousedown', null, this._.uid);\n        Dom.find(document).off('contextmenu', null, this._.uid);\n\n        Event.unbind('NPopover:close', this._.uid);\n        \n    },\n\n    methods: {\n\n        active()\n        {\n            return this.tempValue;\n        },\n\n        open()\n        {\n            this.$emit('update:modelValue', \n                this.tempValue = true);\n        },\n\n        close(type = null)\n        {\n            if ( this.prevent ) {\n                return;\n            }\n\n            delete this.timer;\n\n            if ( ! type ) {\n                this.$emit('close');\n            }\n\n            if ( type === 'scroll' ) {\n                this.$emit('scrollClose');\n            }\n\n            if ( type === 'multi' ) {\n                this.$emit('multiClose');\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = false);\n        },\n\n        pause()\n        {\n            this.prevent = true;\n        },\n\n        unpause()\n        {\n            this.prevent = false;\n        },\n\n        onCloseEvent(uid)\n        {\n            if ( this.multiClose && this.tempValue && this._.uid !== uid ) {\n                this.close('multi');\n            }\n        },\n\n        refreshVisible()\n        {\n            Dom.find(this.$el).css(null);\n\n            if ( ! this.tempValue ) {\n                return this.stopRefreshInterval();\n            }\n\n            this.startRefreshInterval();\n\n            delete this.passedOffset;\n        },\n\n        startRefreshInterval()\n        {\n            this.refresh = setInterval(this.updatePosition, \n                1000 / this.framerate);\n\n            let onReady = () => {\n\n                if ( this.listen ) {\n                    Dom.find(this.target).addClass('n-open');\n                }\n\n                Dom.find(this.$el).addClass('n-ready');\n\n                if ( this.NPopover ) {\n                    this.NPopover.pause();\n                }\n\n                Event.fire('NPopover:close', this._.uid);\n            }\n\n            Any.delay(onReady, 100);\n        },\n\n        stopRefreshInterval()\n        {\n            clearInterval(this.refresh);\n\n            if ( this.NPopover ) {\n                this.NPopover.unpause();\n            }\n\n            if ( this.listen ) {\n                Dom.find(this.target).removeClass('n-open');\n            }\n\n            Dom.find(this.$el).removeClass('n-ready');\n        },\n\n        isSameOffset(offset)\n        {\n            if ( ! this.passedOffset ) {\n                return false;\n            }\n\n            let rainbow = Arr.each(['x', 'y'], (key) => {\n                return offset[key] === this.passedOffset[key];\n            });\n\n            return ! Arr.has(rainbow, false);\n        },\n\n        isSameSize(size)\n        {\n            if ( ! this.passedSize ) {\n                return false;\n            }\n\n            let rainbow = Arr.each(['width', 'height'], (key) => {\n                return size[key] === this.passedSize[key];\n            });\n\n            return ! Arr.has(rainbow, false);\n        },\n\n        getTargetHorizontal(position, fallback = null)\n        {\n            let targetRect = this.target.getBoundingClientRect();\n\n            if ( this.trigger === 'context' ) {\n                targetRect = {\n                    top: this.clientY, left: this.clientX, width: 2, height: 2\n                };\n            }\n\n            let windowRect = this.$el.getBoundingClientRect();\n\n            if ( this.width === -1 ) {\n                windowRect.width = targetRect.width;\n            }\n\n            let posY = {\n\n                // Set above the tagret element\n                start: targetRect.top - windowRect.height,\n                \n                // Set at bottom of target element\n                end: targetRect.top + targetRect.height,\n\n            };\n\n            let posX = {\n\n                // Set on the left of target element\n                start: targetRect.left,\n\n                // Set into the center of the target element\n                center: targetRect.left + (targetRect.width * 0.5) - \n                    (windowRect.width * 0.5),\n\n                // Set on the right of the target element\n                end: targetRect.left + targetRect.width - \n                    windowRect.width,\n\n            };\n\n            let offset = { x: 0, y: 0 };\n\n            if ( position === 'top-start' ) {\n                offset = { x: posX.start, y: posY.start };\n            }\n\n            if ( position === 'top-center' ) {\n                offset = { x: posX.center, y: posY.start };\n            }\n\n            if ( position === 'top-end' ) {\n                offset = { x: posX.end, y: posY.start };\n            }\n\n            if ( position === 'bottom-start' ) {\n                offset = { x: posX.start, y: posY.end };\n            }\n\n            if ( position === 'bottom-center' ) {\n                offset = { x: posX.center, y: posY.end };\n            }\n\n            if ( position === 'bottom-end' ) {\n                offset = { x: posX.end, y: posY.end };\n            }\n\n            let inverse = this.position;\n\n            if ( position.match(/^(top)\\-/) ) {\n                inverse = inverse.replace(/^(top)\\-/, 'bottom-');\n            }\n\n            if ( position.match(/^(bottom)\\-/) ) {\n                inverse = inverse.replace(/^(bottom)\\-/, 'top-');\n            }\n\n            let broken = offset.y + windowRect.height > \n                window.innerHeight || offset.y < 0;\n\n            if ( this.scrollClose && broken && ! fallback ) {\n                return this.getTargetHorizontal(inverse, offset);\n            }\n\n            if ( fallback && broken ) {\n                offset = fallback;\n            }\n\n            if ( offset.y < 0 ) {\n                offset.y = 0;\n            }\n        \n            if ( offset.y + windowRect.height > window.innerHeight ) {\n                offset.y = window.innerHeight - windowRect.height;\n            }\n\n            if ( offset.x < 0 ) {\n                offset.x = 0;\n            }\n        \n            if ( offset.x + windowRect.width > window.innerWidth ) {\n                offset.x = window.innerWidth - windowRect.width -\n                    (window.innerWidth - document.body.clientWidth);\n            }\n\n            return offset;\n        },\n\n        getTargetVertical(position, fallback = null)\n        {\n            let targetRect = this.target.getBoundingClientRect();\n\n            if ( this.trigger === 'context' ) {\n                targetRect = {\n                    top: this.clientY, left: this.clientX, width: 2, height: 2\n                };\n            }\n\n            let windowRect = this.$el.getBoundingClientRect();\n\n            if ( this.width === -1 ) {\n                windowRect.width = targetRect.width;\n            }\n            \n            let posY = {\n\n                // Set at top edge of the target element\n                start: targetRect.top,\n\n                // Set at the middle of the target element\n                center: targetRect.top + (targetRect.height * 0.5) - \n                    (windowRect.height * 0.5),\n\n                // Ste at the bottom of the target elemnent\n                end: targetRect.top + targetRect.height - \n                    windowRect.height,\n\n            };\n\n            let posX = {\n\n                // Set to the left of the target element\n                start: targetRect.left - windowRect.width,\n\n                // Set to the right of the target element\n                end: targetRect.left + targetRect.width,\n\n            };\n\n            let offset = { x: 0, y: 0 };\n\n            if ( position === 'left-start' ) {\n                offset = { x: posX.start, y: posY.start };\n            }\n\n            if ( position === 'left-center' ) {\n                offset = { x: posX.start, y: posY.center };\n            }\n\n            if ( position === 'left-end' ) {\n                offset = { x: posX.start, y: posY.end };\n            }\n\n            if ( position === 'right-start' ) {\n                offset = { x: posX.end, y: posY.start };\n            }\n\n            if ( position === 'right-center' ) {\n                offset = { x: posX.end, y: posY.center };\n            }\n\n            if ( position === 'right-end' ) {\n                offset = { x: posX.end, y: posY.end };\n            }\n\n            let inverse = this.position;\n\n            if ( position.match(/^(left)\\-/) ) {\n                inverse = inverse.replace(/^(left)\\-/, 'right-');\n            }\n\n            if ( position.match(/^(right)\\-/) ) {\n                inverse = inverse.replace(/^(right)\\-/, 'left-');\n            }\n\n            let broken = offset.x + windowRect.width > \n                window.innerWidth || offset.x < 0;\n\n            if ( this.scrollClose && broken && ! fallback ) {\n                return this.getTargetVertical(inverse, offset);\n            }\n\n            if ( fallback && broken ) {\n                offset = fallback;\n            }\n\n            if ( offset.y < 0 ) {\n                offset.y = 0;\n            }\n        \n            if ( offset.y + windowRect.height >  window.innerHeight ) {\n                offset.y = window.innerHeight - windowRect.height;\n            }\n\n            if ( offset.x < 0 ) {\n                offset.x = 0;\n            }\n        \n            if ( offset.x + windowRect.width > window.innerWidth ) {\n                offset.x = window.innerWidth - windowRect.width -\n                    (window.innerWidth - document.body.clientWidth);\n            }\n\n            return offset;\n        },\n\n        getTargetOffset()\n        {\n            let position = this.position;\n\n            if ( position.match(/^(top|bottom)\\-/) ) {\n                return this.getTargetHorizontal(position);\n            }\n\n            if ( position.match(/^(left|right)\\-/) ) {\n                return this.getTargetVertical(position);\n            }\n\n            return targetRect;\n        },\n\n        updatePosition()\n        {\n            let size = this.$el.getBoundingClientRect(),\n                rect = this.target.getBoundingClientRect();\n\n            let isSameSize = this.isSameSize(size);\n\n            if ( isSameSize && this.isSameOffset(rect) ) {\n                return;\n            }\n\n            if ( ! this.timer ) {\n                this.timer = Date.now();\n            }\n\n            this.passedSize = size;\n\n            if ( this.width ) {\n                Dom.find(this.$el).css({ width: this.width + 'px' });\n            }\n\n            let offset = this.getTargetOffset();\n\n            let scroll = Dom.find(document.body)\n                .scroll();\n\n            let style = {\n                'z-index':  window.zIndex++,\n                'top':      Math.round(offset.y + scroll.top) + 'px', \n                'left':     Math.round(offset.x + scroll.left) + 'px', \n            };\n\n            if ( this.width === -1 ) {\n                style.width = rect.width + 'px';\n            }\n\n            Dom.find(this.$el).css(style);\n\n            let isScrollClose = this.passedOffset && isSameSize &&\n                (Date.now() - this.timer) > 500;\n\n            if ( this.scrollClose && isScrollClose ) {\n                this.close('scroll');\n            }\n\n            this.passedOffset = rect;\n        },\n\n        onHover(event, el)\n        {\n            if ( this.disabled ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            let result = (!! target || !! source);\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            if ( ! result ) {\n                return this.$nextTick(this.close);\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onClick(event, el)\n        {\n            let keyCode = event.which === 1 ||\n                event.which === 0;\n\n            if ( this.disabled || this.tempValue || ! keyCode ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            let result = (!! target || !! source);\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onContext(event, el)\n        {\n            let keyCode = event.which === 3;\n\n            if ( this.disabled || this.tempValue || ! keyCode ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target),\n                source = Dom.find(el).closest(this.$el);\n\n            this.clientX = event.clientX;\n            this.clientY = event.clientY;\n\n            let result = (!! target || !! source);\n\n            if ( result ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            if ( this.tempValue === result ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = result);\n        },\n\n        onExit(event, el)\n        {\n            if ( this.disabled || ! this.tempValue ) {\n                return;\n            }\n\n            if ( !! Dom.find(el).closest(this.$el) ) {\n                return;\n            }\n\n            let target = Dom.find(el).closest(this.target);\n\n            if ( this.trigger !== 'context' && !! target ) {\n                return;\n            }\n\n            this.close();\n        }\n\n    },\n\n    renderBody()\n    {\n        if ( this.$slots.raw ) {\n            return this.$slots.raw();\n        }\n\n        return (\n            <div class=\"n-popover__frame\">\n                { this.$slots.header &&\n                    <div class=\"n-popover__header\">\n                        { this.$slots.header() }\n                    </div>\n                }\n                <div class=\"n-popover__body\">\n                    { this.$slots.default() }\n                </div>\n                { this.$slots.footer &&\n                    <div class=\"n-popover__footer\">\n                        { this.$slots.footer() }\n                    </div>\n                }\n            </div>\n        );\n    },\n\n    render()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let classList = [\n            'n-popover',\n            'n-popover--' + this.type,\n            'n-popover--' + this.size,\n            'n-popover--' + this.position,\n        ];\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        let viewBody = this.modelValue;\n\n        if ( Any.isNull(this.modelValue) ) {\n            viewBody = this.tempValue;\n        }\n\n        return (\n            <div class={classList}>\n                { viewBody && this.ctor('renderBody')() }\n            </div>\n        );\n    }\n\n}\n","export default {\n\n    name: 'NPopoverGroup',\n\n    inject: {\n        NPopover: {\n            default: undefined\n        }\n    },\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n\n    },\n\n    computed: {\n\n        tempSize()\n        {\n            if ( this.NPopover ) {\n                return this.NPopover.size;\n            }\n\n            return this.size;\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-popover-group',\n            'n-popover-group--' + this.tempSize,\n        ];\n\n        return (\n            <label class={classList}>\n                <span>{ this.$slots.default() }</span>\n            </label>\n        );\n    }\n\n}\n","import { Obj, Arr, Any, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPopoverOption',\n\n    inject: {\n        NPopover: {\n            default: undefined\n        }\n    },\n\n    props: {\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        focus: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        active: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'after';\n            },\n            type: [String]\n        },\n\n        image: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        imagePosition: {\n            default()\n            {\n                return 'before';\n            },\n            type: [String]\n        },\n\n        clickClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        }\n\n\n    },\n\n    computed: {\n\n        tempSize()\n        {\n            if ( this.NPopover ) {\n                return this.NPopover.size;\n            }\n\n            return this.size;\n        }\n\n    },\n\n    methods: {\n\n        onClick(event)\n        {\n            if ( this.NPopover && this.clickClose ) {\n                this.NPopover.close();\n            }\n\n            this.$emit('fakeclick', event);\n        }\n\n    },\n\n    renderImage()\n    {\n        if ( ! this.image ) {\n            return null;\n        }\n\n        let classList = [\n            'n-image',\n            'n-image--' + this.imagePosition,\n        ];\n\n        return (<img class={classList} src={this.image} />);\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        let classList = [\n            'n-icon', \n            'n-icon--' + this.iconPosition,\n        ];\n\n        classList.push(this.icon);\n\n        return (<i class={classList}></i>);\n    },\n\n    renderContent()\n    {\n        if ( this.$slots.raw ) {\n            return this.$slots.raw();\n        }\n\n        return (\n            <span>{ this.$slots.default() }</span>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-popover-option',\n            'n-popover-option--' + this.type,\n            'n-popover-option--' + this.tempSize,\n        ];\n\n        if ( this.active ) {\n            classList.push('n-active');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( ! this.disabled ) {\n            props.onClick = this.onClick;\n        }\n\n        if ( this.disabled ) {\n            props.disabled = true;\n        }\n\n        return (\n            <a class={classList} href=\"javascript:void(0)\" {...props}>\n                { this.ctor('renderImage')() }\n                { this.ctor('renderContent')() }\n                { this.ctor('renderIcon')() }\n            </a>\n        );\n    }\n\n}\n","import Popover from './src/popover/popover';\nimport PopoverGroup from './src/popover-group/popover-group';\nimport PopoverOption from './src/popover-option/popover-option';\n\nexport default function (App) {\n    App.component(Popover.name, Popover);\n    App.component(PopoverGroup.name, PopoverGroup);\n    App.component(PopoverOption.name, PopoverOption);\n}","import { UUID, Num, Arr, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NForm',\n\n    inheritAttrs: false,\n\n    model: {\n        prop: 'form'\n    },\n\n    props: {\n\n        dom: {\n            default()\n            {\n                return 'div';\n            },\n            type: [String]\n        },\n\n        form: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        errors: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'vertical';\n            },\n            type: [String]\n        },\n\n        prevent: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        ignore: {\n            default()\n            {\n                return ['modified', 'dragid'];\n            },\n            type: [Boolean]\n        },\n\n        forceChange: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        forceErrors: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        classList()\n        {\n            if ( ! this.$attrs.class ) {\n                return [];\n            }\n\n            return Any.isArray(this.$attrs) ? this.$attrs.class :\n                [this.$attrs.class];\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(), elements: [], blocked: true,\n        };\n    },\n\n    provide()\n    {\n        return {\n            NForm: this\n        };\n    },\n\n    mounted()\n    {\n        Any.delay(this.ctor('ready'), 500);\n    },\n\n    ready()\n    {\n        this.$watch('form', this.emitChange,\n            { deep: true });\n\n        this.resetChange();\n    },\n\n    methods: {\n\n        onSubmit(event)\n        {\n            if ( this.prevent ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            if ( Dom.find(event.target).is('input') ) {\n                this.$emit('submit', event);\n            }\n\n            return this.prevent;\n        },\n\n        addItem(item)\n        {\n            Arr.add(this.elements, item, {\n                uid: item.uid\n            });\n        },\n\n        removeItem(item)\n        {\n            Arr.remove(this.elements,{\n                uid: item.uid\n            });\n        },\n\n        resetChange(timeout = 500)\n        {\n            clearTimeout(this.timeout);\n\n            this.timeout = setTimeout(() => {\n                this.blocked = false;\n            }, timeout);\n\n            this.blocked = true;\n\n            let value = Obj.except(this.form,\n                this.ignore);\n\n            this.prevState = JSON.stringify(value);\n        },\n\n        emitChange()\n        {\n            if ( this.blocked ) {\n                return;\n            }\n\n            let value = Obj.except(this.form,\n                this.ignore);\n\n            let nextState = JSON.stringify(value);\n\n            if ( this.prevState == nextState ) {\n                return;\n            }\n\n            this.prevState = nextState;\n\n            this.$emit('change');\n        },\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-form',\n            'n-form--' + this.align,\n        ];\n\n        let attrs = Obj.except(this.$attrs, ['class', 'onChange', 'onSubmit'], {\n            class: this.cmer(classList)\n        });\n\n        attrs['onSubmit'] = (e) => {\n            return false;\n        }\n\n        return h(this.dom, { ...attrs }, [\n            this.$slots.default && this.$slots.default()\n        ]);\n    }\n\n}\n","export default {\n\n    name: 'NFormGroup',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            }\n        },\n\n        size: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'vertical';\n            },\n            type: [String]\n        },\n\n        collapse: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltipPosition: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        collapseGroup()\n        {\n            this.$emit('update:modelValue', this.tempValue = ! this.tempValue);\n        }\n\n    },\n\n    renderCollapse()\n    {\n        if ( ! this.collapse ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__collapse\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__icon\">\n                <i class={['n-icon', this.icon]}></i>\n            </div>\n        );\n    },\n\n    renderText()\n    {\n        let textHtml = (\n            <div class=\"n-form-group__text\">\n                <span>{ this.label }</span>\n            </div>\n        );\n\n        return (\n            <div class=\"n-form-group__label\">\n                { [this.ctor('renderIcon')(), textHtml] } \n            </div>\n        );\n    },\n\n    renderAction()\n    {\n        if ( ! this.$slots.action ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-group__action\">\n                { this.$slots.action() }\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        return (\n            <div class=\"n-form-group__legend\" onClick={this.collapseGroup}>\n                { this.ctor('renderCollapse')() }\n                { this.ctor('renderText')() }\n                { this.ctor('renderAction')() }\n            </div>\n        );\n    },\n\n    renderTooltip()\n    {\n        if ( ! this.tooltip ) {\n            return null;\n        }\n\n        return (\n            <NPopover type=\"tooltip\" size=\"sm\" position={this.tooltipPosition}>\n                {this.tooltip}\n            </NPopover>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-form-group__body\">\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size || this.NForm.size;\n\n        let classList = [\n            'n-form-group', \n            'n-form-group--' + size,\n            'n-form-group--' + this.type,\n            'n-form-group--' + this.align, \n        ];\n\n        if ( this.collapse ) {\n            classList.push('n-form-group--collapse');\n        }\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        if ( this.$slots.action ) {\n            classList.push('n-action');\n        }\n\n        return (\n            <fieldset class={classList}>\n                { this.ctor('renderLabel')() }\n                { this.ctor('renderTooltip')() }\n                { this.ctor('renderBody')() }\n            </fieldset>\n        );\n    }\n}\n","import { Arr, Obj, Any, Dom, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NFormItem',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        },\n\n        NTabs: {\n            default: undefined\n        },\n\n        NTabsItem: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        prop: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        },\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltip: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        tooltipPosition: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        tooltipWindow: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    methods: {\n\n        focusInput()\n        {\n            let $input = Dom.find(this.$el).find('input');\n\n            if ( !$input.empty() ) {\n                return $input.get(0).focus();\n            }\n\n            $input = Dom.find(this.$refs.input).childs();\n\n            if ( !$input.empty() ) {\n                return $input.get(0).click();\n            }\n\n            console.log('I dont belong here :o');\n        },\n\n        gotoInput()\n        {\n            let errors = this.NForm.errors;\n\n            if ( Any.isEmpty(errors) ) {\n                return;\n            }\n\n            if ( !this.NTabs || !this.NTabsItem ) {\n                return;\n            }\n\n            let keys = Any.keys(errors);\n\n            if ( Arr.first(keys) !== this.prop ) {\n                return;\n            }\n\n            this.NTabs.changeTab(this.NTabsItem.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID()\n        };\n    },\n\n    beforeMount()\n    {\n        if ( this.NForm ) {\n            this.NForm.addItem(this);\n        }\n    },\n\n    mounted()\n    {\n        if ( this.NForm ) {\n            this.NForm.$watch('errors', this.gotoInput, { deep: true });\n        }\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NForm ) {\n            this.NForm.removeItem(this);\n        }\n    },\n\n    renderTooltip()\n    {\n        if ( !this.tooltip && !this.$slots.tooltip ) {\n            return null;\n        }\n\n        let props = {\n            size: 'sm',\n            position: this.tooltipPosition,\n        };\n\n        return (\n            <NPopover type=\"tooltip\" {...props}>\n                {this.$slots.tooltip && this.$slots.tooltip() || this.tooltip}\n            </NPopover>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( !this.label && !this.$slots.label ) {\n            return null;\n        }\n\n        let labelHtml = (\n            <div class=\"n-form-item__label\">\n                <label onClick={this.focusInput}>\n                    {this.$slots.label && this.$slots.label() || this.label}\n                </label>\n            </div>\n        );\n\n        return [\n            labelHtml, this.ctor('renderTooltip')()\n        ]\n    },\n\n    renderError()\n    {\n        if ( !this.NForm || !Obj.has(this.NForm.errors, this.prop) ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-form-item__error\">\n                {Obj.get(this.NForm.errors, this.prop)}\n            </div>\n        );\n    },\n\n    renderInput()\n    {\n        return (\n            <div ref=\"input\" class=\"n-form-item__input\">\n                {this.$slots.default && this.$slots.default()}\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size || Obj.get(this.NForm, 'size', 'md');\n\n\n        let classList = [\n            'n-form-item',\n            'n-form-item--' + size,\n        ]\n\n        return <div class={classList}>\n            {this.ctor('renderLabel')()}\n            {this.ctor('renderInput')()}\n            {this.ctor('renderError')()}\n        </div>;\n    }\n}\n","import Form from './src/form/form';\nimport FormGroup from './src/form-group/form-group';\nimport FormItem from './src/form-item/form-item';\n\nexport default function (App) {\n    App.component(Form.name, Form);\n    App.component(FormGroup.name, FormGroup);\n    App.component(FormItem.name, FormItem);\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NConfig',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        config: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        scope: {\n            default()\n            {\n                return this;\n            },\n            type: [Object]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        solveAwait(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( Any.isString(value) && value.match(/\\$\\$scope/) ) {\n                return Obj.has({ $$scope: this.scope }, value);\n            }\n\n            if ( Any.isString(value) && value.match(/\\$\\$value/) ) {\n                return Obj.has({ $$value: this.tempValue }, value);\n            }\n\n            return false;\n        },\n\n        solveValue(value, ...args)\n        {\n            if ( Any.isFunction(value) ) {\n                return value.apply(this.scope, [this.tempValue, ...args]);\n            }\n\n            if ( Any.isString(value) && value.match(/^\\$\\$scope/) ) {\n                return Obj.get({ $$scope: this.scope }, value);\n            }\n\n            if ( Any.isString(value) && value.match(/^\\$\\$value/) ) {\n                return Obj.get({ $$value: this.tempValue }, value);\n            }\n\n            return value;\n        },\n\n        solveEvent(value)\n        {\n            let scope = Obj.assign(this.scope, {\n                $configRefs: this.$refs\n            });\n\n            if ( Any.isFunction(value) ) {\n                return (...args) => value.apply(scope, args);\n            }\n\n            return value;\n        },\n\n        solveContent(value, ...args)\n        {\n            if ( Any.isFunction(value) ) {\n                return value.apply(this.scope, [this.$render, this.tempValue, ...args]);\n            }\n\n            return value;\n        },\n\n        prepareValue(veModel)\n        {\n            if ( ! veModel.path ) {\n                return veModel.fallback;\n            }\n\n            if ( ! Obj.has(this.tempValue, veModel.path) ) {\n                this.deepSet(this.tempValue, veModel.path, veModel.fallback);\n            }\n\n            return Obj.get(this.tempValue, veModel.path);\n        },\n\n        inputClosure(veModel, closure = null)\n        {\n            if ( ! veModel.path ) {\n                return () => null;\n            }\n\n            return (value) => {\n\n                if ( closure ) {\n                    closure(value, this.tempValue);\n                }\n\n                this.deepSet(this.tempValue, veModel.path, value);\n            };\n        },\n\n        deepSet(obj, keys, val)\n        {\n            keys = (typeof keys === 'string') ?\n                keys.split('.') : keys;\n\n            let key = keys.shift();\n\n            if ( obj[key] === undefined || obj[key] === null ) {\n                Obj.set(obj, key, {});\n            }\n\n            if ( keys.length === 0 ) {\n                return Obj.set(obj, key, val);\n            }\n\n            return this.deepSet(obj[key], keys, val);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    renderLayer(source)\n    {\n        if ( ! Any.isPlain(source) ) {\n            return source;\n        }\n\n        return Arr.each(source, (setup, component) => {\n\n            component = component.replace(/:.*?$/, '');\n\n            // Set setup defaults\n            setup = Obj.assign({\n                vIf: true, vShow: true, vAwait: null, class: null, $on: {}, $props: {}, $attrs: {}\n            }, setup);\n\n            if ( ! this.solveAwait(setup.vAwait) ) {\n                return null;\n            }\n\n            if ( ! this.solveValue(setup.vIf) ) {\n                return null;\n            }\n\n            if ( ! this.solveValue(setup.vShow) ) {\n                setup.style = { display: 'none' };\n            }\n\n            // Build default model\n            let veModel = Obj.assign({\n                prop: 'modelValue', fallback: null\n            }, setup.model);\n\n            // Delete model from setup\n            delete setup.model;\n\n            // Normalize props\n            setup.$props = this.solveValue(setup.$props);\n\n            // Normalize class\n            setup.class = this.solveValue(setup.class);\n\n            // Solve props\n            Obj.map(setup.$props, (value) => this.solveValue(value));\n\n            // Normalize attrs\n            setup.$attrs = this.solveValue(setup.$attrs);\n\n            // Solve attrs\n            Obj.map(setup.$attrs, (value) => this.solveValue(value));\n\n            // Solve events\n            Obj.map(setup.$on, (value) => this.solveEvent(value));\n\n            if ( veModel.path ) {\n\n                // Override input event\n                setup['onUpdate:modelValue'] = this.inputClosure(veModel, setup.$on.input);\n\n                // Set prop in value or get fallback\n                setup.$props[veModel.prop] = this.prepareValue(veModel);\n            }\n\n            Obj.assign(setup, setup.$props);\n            delete setup.$props;\n\n            Obj.assign(setup, setup.$attrs);\n            delete setup.$attrs;\n\n            Obj.assign(setup, setup.$on);\n            delete setup.$on;\n\n            let content = setup.content;\n            delete setup.content;\n\n            delete setup.vIf;\n            delete setup.vShow;\n            delete setup.vAwait;\n\n            // Solve content if is functional\n            let slots = this.solveContent(content, setup);\n\n            let domtypes = [\n                'div', 'span', 'a'\n            ];\n\n            let resolved = component;\n\n            if ( ! Arr.has(domtypes, resolved) ) {\n                resolved = resolveComponent(component);\n            }\n\n            return h(resolved, setup, this.ctor('renderLayer')(slots));\n        });\n    },\n\n    render()\n    {\n        return this.ctor('renderLayer')(this.config)[0];\n    }\n\n}","import { Arr, Obj, Str, Any } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NConfigNext',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        config: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        scope: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue: function (value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        propAwait(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( ! Any.isArray(value) ) {\n                value = [value];\n            }\n\n            let result = Arr.each(value, (state) => {\n                return this.getState(state, true);\n            });\n\n            return ! Arr.has(result, false);\n        },\n\n        propExists(value)\n        {\n            if ( Any.isEmpty(value) ) {\n                return true;\n            }\n\n            if ( ! Any.isArray(value) ) {\n                value = [value];\n            }\n\n            let result = Arr.each(value, (state) => {\n                return this.getState(state, false);\n            });\n\n            return ! Arr.has(result, false);\n        },\n\n        getState(value, exists = true)\n        {\n            if ( Any.isFunction(value) ) {\n                return !! this.solveInput(value);\n            }\n\n            if ( ! Any.isString(value) ) {\n                return !! value;\n            }\n\n            if ( ! value.match(/(\\$scope|\\$model|\\$global)/) ) {\n                return !! value;\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            if ( exists ) {\n                return Obj.get(sources, value, undefined) === undefined;\n            }\n\n            return !! Obj.get(sources, value);\n        },\n\n        toPropKey(value)\n        {\n            let splits = value.replace(/^!/, '').split('-');\n\n            value = Arr.each(splits, (split) => {\n                return Str.ucfirst(split);\n            });\n\n            return Str.lcfirst(value.join(''));\n        },\n\n        toEventKey(value)\n        {\n            if ( ! value.match(/^on/) ) {\n                value = 'on-' + value;\n            }\n\n            let splits = value.split('-');\n\n            value = Arr.each(splits, (split) => {\n                return Str.ucfirst(split);\n            });\n\n            return Str.lcfirst(value.join(''));\n        },\n\n        solveInput(cb, fallback)\n        {\n            return cb.call(this.scope, this.tempValue, fallback);\n        },\n\n        solveContext(cb)\n        {\n            if ( ! Any.isFunction(cb) ) {\n                return () => console.error('Raw suffix (!) only allowed on functions');\n            }\n\n            return (...args) => cb.call(this.scope, ...args);\n        },\n\n        getProp(key, value)\n        {\n            if ( key.match(/^!/) ) {\n                return this.solveContext(value);\n            }\n\n            if ( Any.isFunction(value) ) {\n                return this.solveInput(value);\n            }\n\n            if ( ! Any.isString(value) ) {\n                return value;\n            }\n\n            if ( ! value.match(/(\\$scope|\\$model|\\$global)/) ) {\n                return value;\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            return Obj.get(sources, value);\n        },\n\n        getInput(prop, fallback)\n        {\n            if ( Any.isFunction(prop) ) {\n                return this.solveInput(prop, fallback);\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            if ( ! Any.isNull(fallback) && Obj.get(sources, prop, -1337) === -1337 ) {\n                Obj.set(sources, prop, fallback);\n            }\n\n            return Obj.get(sources, prop);\n        },\n\n        setInput(prop, value)\n        {\n            if ( Any.isFunction(prop) ) {\n                return console.error('NConfigNew: Bind with function is not allowed!');\n            }\n\n            let sources = {\n                $scope: this.scope, $model: this.tempValue, $global: window\n            };\n\n            Obj.set(sources, prop, value);\n        }\n\n    },\n\n    renderSetup(setup, alias)\n    {\n        if ( ! Any.isPlain(setup) ) {\n            return setup;\n        }\n\n        if ( ! this.propExists(setup['vIf']) ) {\n            return null;\n        }\n\n        if ( ! this.propAwait(setup['vAwait']) ) {\n            return null;\n        }\n\n        let defaults = {\n            binds: {}, props: {}, events: {}, content: {}\n        };\n\n        let defaultsBind = {\n            value: '', fallback: null\n        };\n\n        setup = Obj.assign(defaults, setup);\n\n        let binds = {};\n\n        Obj.each(setup['binds'], (value, key) => {\n\n            if ( Any.isString(value) ) {\n                value = { value: value };\n            }\n\n            binds[key] = Obj.assign(defaultsBind, value);\n        });\n\n        let events = {};\n\n        Obj.each(setup['events'], (value, key) => {\n            events[this.toEventKey(key)] = this.solveContext(value);\n        });\n\n        let props = {};\n\n        Obj.each(setup['props'], (value, key) => {\n            props[this.toPropKey(key)] = this.getProp(key, value);\n        });\n\n        props = Obj.assign(props, events);\n\n        Obj.each(binds, (value, key) => {\n\n            let updateKey = 'onUpdate:' + key;\n\n            props[this.toEventKey(updateKey)] = (input) => {\n                this.setInput(value.value, input);\n            };\n\n            props[this.toPropKey(key)] = this.getInput(value.value,\n                value.fallback);\n        });\n\n        let element = alias.replace(/:.*?$/, '');\n\n        let component = null;\n\n        try {\n            component = resolveComponent(element);\n        } catch (e) {\n            component = element;\n        }\n\n        if ( Any.isEmpty(component) ) {\n            return null;\n        }\n\n        if ( ! this.propExists(setup['vShow']) ) {\n            props.style = \"display: none;\";\n        }\n\n        return h(component, props, () => {\n            return Arr.each(setup.content, (value, key) => this.ctor('renderSetup')(value, key));\n        });\n    },\n\n    render()\n    {\n        return Arr.each(this.config, (value, key) => this.ctor('renderSetup')(value, key));\n    }\n\n}","import NConfig from \"./src/config/config\";\nimport NConfigNext from \"./src/config/config-next\";\n\nexport default function(App) {\n    App.component(NConfig.name, NConfig);\n    App.component(NConfigNext.name, NConfigNext);\n}\n","import { Obj } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NButton',\n\n    props: {\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        link: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        square: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'before';\n            },\n            type: [String]\n        },\n\n        buttonType: {\n            default()\n            {\n                return 'button';\n            },\n            type: [String]\n        },\n\n        nativeType: {\n            default()\n            {\n                return 'button';\n            },\n            type: [String]\n        }\n\n    },\n\n    renderIcon()\n    {\n        if ( ! this.icon ) {\n            return null;\n        }\n\n        let classList = [\n            'n-icon', \n            'n-icon--' + this.iconPosition,\n        ];\n\n        classList.push(this.icon);\n\n        return (<i class={classList}></i>);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-button',\n            'n-button--' + this.size,\n            'n-button--' + this.type,\n        ];\n\n        if ( this.icon ) {\n            classList.push('n-button--icon');\n        }\n\n        if ( this.link ) {\n            classList.push('n-button--link');\n        }\n\n        if ( this.square ) {\n            classList.push('n-button--square');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            class: classList\n        };\n\n        if ( this.disabled ) {\n            props.disabled = true;\n        }\n\n        let innerHtml = [];\n\n        if ( this.iconPosition === 'before' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        if ( this.$slots.default && ! this.square ) {\n            innerHtml.push(<span>{ this.$slots.default() }</span>);\n        }\n\n        if ( this.iconPosition === 'after' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        return h(this.nativeType, props, innerHtml);\n    }\n\n}\n","export default {\n\n    name: 'NButtonGroup',\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-button-group',\n            'n-button-group--' + this.size\n        ]\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n\n}\n","import Button from './src/button/button';\nimport ButtonGroup from './src/button-group/button-group';\n\nexport default function (App) {\n    App.component(Button.name, Button);\n    App.component(ButtonGroup.name, ButtonGroup);\n}\n","import { Str, Arr, Obj, Any, Locale, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSelect',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-center';\n            },\n            type: [String]\n        },\n\n        multiple: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        collapse: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return Locale.trans('Please select');\n            },\n            type: [String]\n        },\n\n        emptyText: {\n            default()\n            {\n                return 'No items';\n            },\n            type: [String]\n        },\n\n        undefinedText: {\n            default()\n            {\n                return 'Undefined item';\n            },\n            type: [String]\n        },\n\n        collapseText: {\n            default()\n            {\n                return '+:count item|+:count items';\n            },\n            type: [String]\n        },\n\n        allowCreate: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array, Object]\n        },\n\n        optionsValue: {\n            default()\n            {\n                return '$index';\n            },\n            type: [String]\n        },\n\n        optionsLabel: {\n            default()\n            {\n                return '$value';\n            },\n            type: [String]\n        },\n\n        optionsDisabled: {\n            default()\n            {\n                return 'null';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        empty()\n        {\n            return Any.isEmpty(this.tempValue);\n        },\n\n        custom()\n        {\n            let result = Arr.filter(this.elements, (element) => {\n\n                if ( Any.isArray(this.tempValue) ) {\n                    return Arr.has(this.tempValue, element.value);\n                }\n\n                return element.value === this.tempValue;\n            });\n\n            return result.length === 0;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempClear: this.clearValue,\n            focus: false,\n            search: '',\n            index: -1,\n            elements: [],\n            searched: []\n        };\n    },\n\n    provide()\n    {\n        return {\n            NSelect: this\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( ! this.multiple && Any.isArray(value) ) {\n                value = null;\n            }\n\n            if ( this.multiple && ! Any.isArray(value) ) {\n                value = [];\n            }\n\n            this.tempValue = value;\n        },\n\n        search()\n        {\n            this.searchOptions();\n        },\n\n        focus()\n        {\n            this.$nextTick(this.scrollToClosest);\n        },\n\n    },\n\n    methods: {\n\n        clear(event = null)\n        {\n            if ( event ) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            this.focusInput();\n\n            this.$emit('update:modelValue', \n                this.tempValue = Arr.clone(this.tempClear));\n        },\n\n        addOption(option)\n        {\n            Arr.add(this.elements, option, \n                { tempValue: option.tempValue });\n        },\n\n        removeOption(option)\n        {\n            Arr.remove(this.elements, \n                { tempValue: option.tempValue });\n        },\n\n        resetInput()\n        {\n            this.index = -1;\n            this.search = '';\n        },\n\n        focusInput(event = null)\n        {\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            this.$refs.input.focus();\n        },\n\n        onFocusInput()\n        {\n            if ( ! this.focus ) {\n                this.$refs.popover.open();\n            }\n            \n            clearInterval(this.refresh);\n        },\n\n        onInputInput(event)\n        {\n            this.search = event.target.value;\n        },\n\n        onKeydownInput(event)\n        {\n            if ( ! this.focus ) {\n                return this.onFocusInput();\n            }\n\n            if ( event.which === 13 ) {\n                this.createOrToggle();\n            }\n\n            if ( event.which === 38 ) {\n                this.selectPrev();\n            }\n\n            if ( event.which === 40 ) {\n                this.selectNext();\n            }\n        },\n\n        searchOptions()\n        {\n            this.index = -1;\n\n            if ( Any.isEmpty(this.search) ) {\n                return this.searched = this.elements;\n            }\n\n            let searchRegex = new RegExp(this.search, 'i');\n\n            let searched = Arr.filter(this.elements, (option) => {\n                return option.label.match(searchRegex);\n            });\n\n            this.searched = searched;\n        },\n\n        toggleOption(value, event = null)\n        {\n            if ( Any.isEmpty(value) ) {\n                return;\n            }\n\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            let tempValue = this.tempValue;\n\n            if ( this.multiple ) {\n                this.focusInput();\n            }\n\n            if ( ! this.multiple ) {\n                tempValue = value;\n            }\n\n            if ( this.multiple ) {\n                Arr.toggle(tempValue, value);\n            }\n\n            this.$refs.popover.close();\n\n            let denyUpdate = this.tempValue === tempValue;\n\n            if ( this.multiple && ! Any.isArray(this.modelValue) ) {\n                denyUpdate = false;\n            }\n\n            if ( ! this.multiple && Any.isArray(this.modelValue) ) {\n                denyUpdate = false;\n            }\n\n            if ( denyUpdate ) {\n                return;\n            }\n\n            this.$emit('update:modelValue',\n                this.tempValue = tempValue);\n        },\n\n        getOptionLabel(value)\n        {\n            let option = Arr.find(this.elements, \n                { tempValue: value });\n\n            if ( ! option && this.allowCreate ) {\n                return value;\n            }\n\n            if ( ! option && ! this.allowCreate ) {\n                return this.trans(this.undefinedText);\n            }\n\n            return option.tempLabel;\n        },\n\n        selectPrev()\n        {\n            let newIndex = this.index - 1;\n\n            if ( newIndex < 0 ) {\n                newIndex = this.searched.length - 1;\n            }\n\n            this.index = newIndex;\n\n            this.scrollToCurrent();\n        },\n\n        selectNext()\n        {\n            let newIndex = this.index + 1;\n\n            if ( newIndex > this.searched.length - 1 ) {\n                newIndex = 0;\n            }\n\n            this.index = newIndex;\n\n            this.scrollToCurrent();\n        },\n\n        createOrToggle()\n        {\n            if ( this.allowCreate && this.search ) {\n                return this.createOption();\n            }\n            \n            let selected = Arr.get(this.searched, \n                this.index);\n\n            if ( this.searched.length === 1 ) {\n                selected = Arr.first(this.searched);\n            }\n\n            if ( ! selected || selected.disabled ) {\n                return;\n            }\n\n            this.toggleOption(selected.tempValue);\n        },\n\n        createOption()\n        {\n            this.toggleOption(this.search);\n\n            this.search = '';\n        },\n\n        scrollToCurrent()\n        {\n            if ( ! this.focus ) {\n                return;\n            }\n\n            let selected = Arr.get(this.searched, \n                this.index);\n\n            if ( ! selected || ! this.$refs.scrollbar ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollIntoView(\n                `[data-option=\"${selected._.uid}\"]`);\n        },\n\n        scrollToClosest()\n        {\n            if ( ! this.focus ) {\n                return;\n            }\n\n            let value = this.tempValue;\n\n            if ( Any.isArray(this.tempValue) ) {\n                value = Arr.first(this.tempValue);\n            }\n\n            if ( ! value ) {\n                return;\n            }\n\n            let target = Arr.find(this.elements, { \n                tempValue: value\n             });\n\n            if ( ! target ) {\n                return;\n            }\n\n            this.$refs.scrollbar.scrollIntoView(\n                `[data-option=\"${target._.uid}\"]`, 150);\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.multiple && ! Any.isArray(this.tempValue) ) {\n            this.tempValue = [];\n        }\n\n        if ( this.multiple && ! Any.isArray(this.clearValue) ) {\n            this.tempClear = [];\n        }\n\n        this.searchOptions();\n    },\n\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clear;\n        }\n\n        return (\n            <div class=\"n-select__clear\" {...props}>\n                <i class={nano.Icons.times}></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-select__angle\">\n                <i class={nano.Icons.angleDown}></i>\n            </div>\n        );\n    },\n\n    renderLabelItem(value)\n    {\n        let classList = [\n            'n-select__item'\n        ];\n\n        let props = {\n            class: nano.Icons.times,\n        };\n\n        if ( ! this.disabled ) {\n            props.onMousedown = (event) => this.toggleOption(value, event);\n        }\n\n        let labelHtml = (\n            <span>{ this.getOptionLabel(value) }</span>\n        );\n\n        return (\n            <div class={classList}>\n                { [labelHtml, <i {...props}></i>] }\n            </div>\n        );\n    },\n\n    renderLabelCollapse()\n    {\n        let first = Arr.first(this.tempValue);\n\n        if ( ! first ) {\n            return null;\n        }\n\n        let firstHtml = this.ctor('renderLabelItem')(first);\n\n        if ( this.tempValue.length === 1 ) {\n            return firstHtml;\n        }\n\n        let count = this.tempValue.length - 1;\n\n        let collapseHtml = (\n            <div class=\"n-select__item\">\n                <span>{ this.choice(this.collapseText, count) }</span>\n            </div>\n        );\n\n        return [\n            firstHtml, collapseHtml\n        ];\n    },\n\n    renderLabelItems()\n    {\n        if ( ! Any.isArray(this.tempValue) ) {\n            return null;\n        }\n\n        if ( this.collapse ) {\n            return this.ctor('renderLabelCollapse')();\n        }\n\n        return Arr.each(this.tempValue, (value) => {\n            return this.ctor('renderLabelItem')(value);\n        });\n    },\n\n    renderMultiple()\n    {\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        let props = {\n            value: this.search,\n            placeholder: this.placeholder,\n            disabled: this.disabled,\n            onFocus: this.onFocusInput,\n            onInput: this.onInputInput,\n            onKeydown: this.onKeydownInput\n        };\n\n        if ( ! this.focus ) {\n            props.value = null;\n        }\n\n        if ( ! isEmptyValue ) {\n            props.placeholder = null;\n        }\n\n        let inputHtml = (\n            <div class=\"n-select__input\">\n                <input ref=\"input\" {...props} />\n            </div>\n        );\n\n        return [\n            this.ctor('renderLabelClear')(), \n            (\n                <div class=\"n-select__items\">\n                    { [this.ctor('renderLabelItems')(), inputHtml] }\n                </div>\n            ), \n            this.ctor('renderLabelAngle')()\n        ];\n    },\n\n    renderSingle()\n    {\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        let modelLabel = this.getOptionLabel(\n            this.tempValue);\n        \n        if ( isEmptyValue ) {\n            modelLabel = null;\n        }\n\n        let props = {\n            value: this.search,\n            placeholder: this.placeholder,\n            disabled: this.disabled,\n            onFocus: this.onFocusInput,\n            onInput: this.onInputInput,\n            onKeydown: this.onKeydownInput\n        };\n\n        if ( ! this.search && this.custom ) {\n            props.value = this.tempValue;\n        }\n\n        if ( ! this.focus ) {\n            props.value = modelLabel;\n        }\n\n        if ( ! isEmptyValue ) {\n            props.placeholder = modelLabel;\n        }\n\n        return [\n            this.ctor('renderLabelClear')(), \n            (\n                <div class=\"n-select__input\">\n                    <input ref=\"input\" {...props} />\n                </div>\n            ), \n            this.ctor('renderLabelAngle')()\n        ];\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-select__display'\n        ];\n\n        if ( this.multiple ) {\n            classList.push('n-multiple');\n        }\n\n        let displayHtml = this.ctor('renderSingle');\n\n        if ( this.multiple ) {\n            displayHtml = this.ctor('renderMultiple');\n        }\n\n        return (\n            <div class={classList}>{ displayHtml() }</div>\n        );\n    },\n\n    renderItems()\n    {\n        let emptyHtml = (\n            <div class=\"n-select__empty\">\n                <NEmptyIcon>{ this.trans(this.emptyText) }</NEmptyIcon>\n            </div>\n        );\n        \n        if ( ! this.searched.length ) {\n            return emptyHtml;\n        }\n\n        let options = Obj.each(this.searched, (option, index) => {\n            return option.ctor('renderOption')(index);\n        });\n\n        let props = {\n            relative: true, size: this.size\n        }\n\n        return (\n            <NScrollbar ref=\"scrollbar\" class=\"n-select__body\" {...props}>\n                { Obj.values(options) }\n            </NScrollbar>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            class: 'n-popover--select',\n            trigger: 'click',\n            width: -1,\n            listen: true,\n            size: this.size,\n            scrollClose: true,\n            disabled: this.disabled,\n            onClose: this.resetInput\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    renderOptions()\n    {\n        if ( Any.isEmpty(this.options) ) {\n            return this.$slots.default && this.$slots.default();\n        }\n\n        let optionRender = ($value, $index) => {\n\n            let props = {\n                label: Obj.get({ $value, $index }, this.optionsLabel, null),\n                value: Obj.get({ $value, $index }, this.optionsValue, null),\n            };\n\n            return (<NSelectOption {...props}></NSelectOption>);\n        };\n\n        return Obj.values(Obj.each(this.options, optionRender));\n    },\n\n    render()\n    {\n        let classList = [\n            'n-select',\n            'n-select--' + this.type,\n            'n-select--' + this.size,\n        ];\n\n        let isEmptyValue = Any.isEmpty(this.tempValue) &&\n            ! Any.isNumber(this.tempValue);\n\n        if ( isEmptyValue ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList} onClick={this.focusInput}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n                { this.ctor('renderOptions')() }\n            </div>\n        );\n    }\n\n}\n","import { Num, Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSelectOption',\n\n    inheritAttrs: false,\n\n    inject: {\n\n        NSelect: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        value: {\n            default()\n            {\n                return '';\n            }\n        },\n\n        label: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        valueProp: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        labelProp: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    computed: {\n\n        tempValue()\n        {\n            if ( Any.isEmpty(this.valueProp) ) {\n                return this.value;\n            }\n\n            return Obj.get(this.value, this.valueProp);\n        },\n\n        tempLabel()\n        {\n            if ( Any.isEmpty(this.labelProp) ) {\n                return this.label;\n            }\n\n            return Obj.get(this.value, this.labelProp);\n        }\n\n    },\n\n    mounted()\n    {\n        this.NSelect.addOption(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NSelect.removeOption(this);\n    },\n\n    methods: {\n\n        toggleItem(event) \n        {\n            event.preventDefault();\n\n            if ( event.which !== 1 ) {\n                return;\n            }\n\n            if ( this.disabled ) {\n                return;\n            }\n\n            this.NSelect.toggleOption(this.tempValue, \n                event);\n        },\n\n    },\n\n    renderOption(index)\n    {\n\n        let classList = [];\n\n        let isMultipleActive = this.NSelect.multiple && \n            Arr.has(this.NSelect.tempValue, this.tempValue);\n\n        if ( isMultipleActive ) {\n            classList.push('n-active');\n        }\n\n        let isSingleActive = ! this.NSelect.multiple && \n            this.NSelect.tempValue === this.tempValue;\n\n        if ( isSingleActive ) {\n            classList.push('n-active');\n        }\n\n        if ( this.NSelect.index === Num.int(index) ) {\n            classList.push('n-focus');\n        }\n\n        let props = {\n            'disabled': this.disabled,\n            'onMousedown': this.toggleItem,\n            'type': this.NSelect.type,\n            'clickClose': ! this.NSelect.multiple,\n        };\n\n        if ( isSingleActive || isMultipleActive ) {\n            props.icon = nano.Icons.checked;\n        }\n\n        // Required for scrolldown\n        props['data-option'] = this._.uid;\n\n        return (\n            <NPopoverOption class={classList} {...props}>\n                { this.$slots.default && this.$slots.default() || this.tempLabel }\n            </NPopoverOption>\n        );\n    },\n\n    render()\n    {\n        return null;\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Select from './src/select/select';\nimport SelectOption from './src/select-option/select-option';\n\nexport default function (App) {\n    App.component(Select.name, Select);\n    App.component(SelectOption.name, SelectOption);\n}\n","import { Arr, Obj, Any, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCheckbox',\n\n    inject: {\n\n        NCheckboxGroup: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        value: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        allowUncheck: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        intermediate: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        global: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    computed: {\n\n        tempComputed()\n        {\n            return ! this.global ? this.tempChecked :\n                this.NCheckboxGroup.globalChecked;\n        },\n\n        tempIntermediate()\n        {\n            return ! this.global ? this.intermediate :\n                this.NCheckboxGroup.globalIntermediate;\n        },\n\n        tempDisabled()\n        {\n            return ! this.global ? this.disabled :\n                this.NCheckboxGroup.globalDisabled;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            uid: UUID(), tempChecked: this.modelValue\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempChecked ) {\n                this.tempChecked = value;\n            }\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.NCheckboxGroup ) {\n            this.tempChecked = this.NCheckboxGroup.isChecked(this.value);\n        }\n    },\n\n    mounted()\n    {\n        if ( ! this.NCheckboxGroup || this.global ) {\n            return;\n        }\n\n        this.NCheckboxGroup.addCheckbox(this);\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NCheckboxGroup && ! this.global ) {\n            this.NCheckboxGroup.removeCheckbox(this);\n        }\n    },\n\n    methods: {\n\n        toggle()\n        {\n            this.$emit('update:modelValue', this.tempChecked = ! this.tempChecked);\n        },\n\n        check()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.checkCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        uncheck()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.uncheckCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = false);\n        },\n\n        eventShiftClick()\n        {\n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.shiftCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        eventLocalClick(event)\n        {\n            let canClick = ! this.tempDisabled || (this.allowUncheck &&\n                this.tempChecked);\n\n            if ( ! canClick ) {\n                return;\n            }\n\n            event.preventDefault();\n\n            if ( event.shiftKey ) {\n                return this.eventShiftClick();\n            }\n            \n            if ( this.NCheckboxGroup ) {\n                this.NCheckboxGroup.toggleCheckbox(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = ! this.tempChecked);\n        },\n\n        eventGlobalClick()\n        {\n            let canClick = ! this.tempDisabled || (this.allowUncheck &&\n                this.tempChecked);\n\n            if ( ! canClick ) {\n                return;\n            }\n\n            this.NCheckboxGroup.toggleAll();\n        },\n\n        updateFromGroup()\n        {\n            let checked = this.NCheckboxGroup.isChecked(this.value);\n\n            if ( this.tempChecked === checked ) {\n                return;\n            }\n            \n            this.$emit('update:modelValue', this.tempChecked = checked);\n        }\n\n    },\n\n    renderCheckbox()\n    {\n        let interHtml = this.$slots.intermediate &&\n            this.$slots.intermediate();\n\n        if ( ! interHtml )  {\n            interHtml = (<i class={nano.Icons.intermediate}></i>);\n        }\n\n        let checkHtml = this.$slots.checked &&\n            this.$slots.checked();\n\n        if ( ! checkHtml )  {\n            checkHtml = (<i class={nano.Icons.checked}></i>);\n        }\n\n        return (\n            <div class=\"n-checkbox__checkbox\">\n                { this.tempIntermediate ? interHtml : checkHtml }\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( ! this.cslo('default') && ! this.cslo('label') ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-checkbox__label\">\n                { this.$slots.default() || this.$slots.label() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let size = this.size;\n\n        if ( this.NCheckboxGroup ) {\n            size = this.NCheckboxGroup.size;\n        }\n\n        let classList = [\n            'n-checkbox',\n            'n-checkbox--' + size,\n            'n-checkbox--' + this.type,\n        ];\n\n        if ( this.allowUncheck ) {\n            classList.push('n-uncheck');\n        }\n\n        if ( this.tempComputed ) {\n            classList.push('n-checked');\n        }\n\n        if ( this.tempIntermediate ) {\n            classList.push('n-intermediate');\n        }\n\n        if ( this.tempDisabled ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.tempComputed && this.allowUncheck ) {\n            Arr.remove(classList, 'n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( this.global ) {\n            props.onMousedown = this.eventGlobalClick;\n        }\n\n        if ( ! this.global ) {\n            props.onMousedown = this.eventLocalClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { [this.ctor('renderCheckbox')(), this.ctor('renderLabel')()] }\n            </div>\n        );\n    }\n\n}\n","import { Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCheckboxGroup',\n\n    provide()\n    {\n        return {\n            NCheckboxGroup: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'horizontal';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        globalChecked()\n        {\n            let checked = Arr.filter(this.elements, (checkbox) => {\n                return checkbox.tempChecked;\n            });\n\n            return checked.length === this.elements.length &&\n                this.elements.length !== 0;\n        },\n\n        globalIntermediate()\n        {\n            let checked = this.elements.filter((checkbox) => {\n                return checkbox.tempChecked;\n            });\n\n            return checked.length !== this.elements.length &&\n                checked.length !== 0 ;\n        },\n\n        globalDisabled()\n        {\n            return this.elements.length === 0;\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            index: -1,\n            elements: []\n        }\n    },\n\n    watch: {\n\n        value()\n        {\n            if ( this.tempValue = this.modelValue ) {\n                this.tempValue = this.modelValue;\n            }\n            \n        },\n\n    },\n\n    methods: {\n\n        addCheckbox(checkbox)\n        {\n            this.index = -1;\n\n            Arr.add(this.elements, checkbox, {\n                uid: checkbox.uid\n            });\n\n            this.elements = Arr.sort(this.elements, 'sort');\n        },\n\n        removeCheckbox(checkbox)\n        {\n            this.index = -1;\n            \n            Arr.remove(this.elements, {\n                uid: checkbox.uid\n            });\n        },\n\n        toggleCheckbox(checkbox, emit = true)\n        {\n            let index = Arr.findIndex(this.elements, {\n                uid: checkbox.uid\n            });\n\n            if ( ! checkbox.tempChecked ) {\n                this.index = index;\n            }\n\n            Arr.toggle(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        checkCheckbox(checkbox, emit = true)\n        {\n            Arr.add(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        uncheckCheckbox(checkbox, emit = true)\n        {\n            Arr.remove(this.tempValue, checkbox.value);\n\n            if ( ! emit ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        shiftCheckbox(checkbox)\n        {\n            if ( this.index === -1 ) {\n                return this.toggleCheckbox(checkbox, false);\n            }\n\n            let index = Arr.findIndex(this.elements, {\n                uid: checkbox.uid\n            });\n\n            let checkboxes = this.elements.slice(this.index, index + 1);\n\n            if ( index < this.index ) {\n                checkboxes = this.elements.slice(index, this.index + 1);\n            }\n\n            this.index = -1;\n\n            Arr.each(checkboxes, (checkbox) => {\n                this.checkCheckbox(checkbox, false);\n            });\n\n            Arr.each(checkboxes, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        toggleAll()\n        {\n            this.globalChecked ? this.uncheckAll() : this.checkAll();\n        },\n\n        checkAll()\n        {\n            Arr.each(this.elements, (checkbox) => {\n                this.checkCheckbox(checkbox, false);\n            });\n\n            Arr.each(this.elements, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        uncheckAll()\n        {\n            Arr.each(this.elements, (checkbox) => {\n                this.uncheckCheckbox(checkbox, false);\n            });\n\n            Arr.each(this.elements, (checkbox) => {\n                checkbox.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        isChecked(value)\n        {\n            return Arr.has(this.tempValue, value);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-checkbox-group',\n            'n-checkbox-group--' + this.size,\n            'n-checkbox-group--' + this.align,\n        ];\n\n        return (\n            <div class={classList}>\n                {this.$slots.default()}\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Checkbox from './src/checkbox/checkbox';\nimport CheckboxGroup from './src/checkbox-group/checkbox-group';\n\nexport default function (App) {\n    App.component(Checkbox.name, Checkbox);\n    App.component(CheckboxGroup.name, CheckboxGroup);\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRadio',\n\n    model: {\n        prop: 'checked'\n    },\n\n    inject: {\n\n        NRadioGroup: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        value: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        checked: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n    },\n\n    computed: {\n\n        uid()\n        {\n            return this._.uid;\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempChecked: this.checked\n        };\n    },\n\n    watch: {\n\n        checked()\n        {\n            if ( this.checked !== this.tempChecked ) {\n                this.tempChecked = this.checked;\n            }\n        }\n\n    },\n\n    beforeMount()\n    {\n        if ( this.NRadioGroup ) {\n            this.tempChecked = this.NRadioGroup.isChecked(this.value);\n        }\n    },\n\n    mounted()\n    {\n        if ( this.NRadioGroup ) {\n            this.NRadioGroup.addRadio(this);\n        }\n    },\n\n    beforeUnmount()\n    {\n        if ( this.NRadioGroup ) {\n            this.NRadioGroup.removeRadio(this);\n        }\n    },\n\n    methods: {\n\n        check()\n        {\n            if ( this.NRadioGroup ) {\n                this.NRadioGroup.checkRadio(this);\n            }\n\n            this.$emit('update:modelValue', this.tempChecked = true);\n        },\n\n        updateFromGroup()\n        {\n            let checked = this.NRadioGroup.isChecked(this.value);\n\n            if ( this.tempChecked === checked ) {\n                return;\n            }\n            \n            this.$emit('update:modelValue', this.tempChecked = checked);\n        }\n\n    },\n\n    renderRadio()\n    {\n        return (\n            <div class=\"n-radio__radio\">\n                <span></span>\n            </div>\n        );\n    },\n\n    renderLabel()\n    {\n        if ( ! this.$slots.default && ! this.$slots.label ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-radio__label\">\n                { this.$slots.default() || this.$slots.label() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-radio',\n            'n-radio--' + this.size,\n            'n-radio--' + this.type,\n        ];\n\n        if ( this.tempChecked ) {\n            classList.push('n-checked');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.clone(this.$attrs);\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.check;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderRadio')() }\n                { this.ctor('renderLabel')() }\n            </div>\n        );\n    }\n\n}\n","import { Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRadioGroup',\n\n    provide()\n    {\n        return {\n            NRadioGroup: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        align: {\n            default()\n            {\n                return 'horizontal';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            elements: []\n        }\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        },\n\n    },\n\n    methods: {\n\n        addRadio(radio)\n        {\n            Arr.add(this.elements, radio, {\n                uid: radio.uid\n            });\n        },\n\n        removeRadio(radio)\n        {\n            Arr.remove(this.elements, {\n                uid: radio.uid\n            });\n        },\n\n        checkRadio(radio)\n        {\n            this.tempValue = radio.value;\n            \n            Arr.each(this.elements, (radio) => {\n                radio.updateFromGroup();\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        isChecked(value)\n        {\n            return this.tempValue === value;\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-radio-group',\n            'n-radio-group--' + this.size,\n            'n-radio-group--' + this.align,\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default() }\n            </div>\n        );\n    }\n\n}\n","import NRadio from './src/radio/radio';\nimport NRadioGroup from './src/radio-group/radio-group';\n\nexport default function (App) {\n    App.component(NRadio.name, NRadio);\n    App.component(NRadioGroup.name, NRadioGroup);\n}\n","import { Arr, Obj, Any, Str } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCascaderPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        clearValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        hover: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        valueProp: {\n            default()\n            {\n                return 'value';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        disabledProp: {\n            default()\n            {\n                return 'disabled';\n            },\n            type: [String]\n        },\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempHover: this.hover,\n        };\n    },\n\n    watch: {\n\n        modelValue(value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n        hover(value) {\n            if ( value !== this.tempHover ) {\n                this.tempHover = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        clearCascader()\n        {\n            this.$emit('update:modelValue', this.tempHover = \n                this.tempValue = this.clearValue);\n        },\n\n        onHover(cascade)\n        {\n            return (event) => this.hoverItem(cascade, event)\n        },\n\n        onSelect(cascade)\n        {\n            return (event) => this.selectItem(cascade, event)\n        },\n\n        hoverItem(cascade, event = null)\n        {\n            // Hover intend emulation\n            clearTimeout(this.delay);\n\n            let updateHover = () => {\n                this.$emit('update:hover', \n                    this.tempHover = cascade);\n            };\n\n            this.delay = setTimeout(updateHover, 130);\n        },\n\n        selectItem(cascade, event = null)\n        {\n            clearTimeout(this.clickTimer);\n\n            if ( ! this.lastclick ) {\n                this.lastclick = 0;\n            }\n\n            this.lastclick++;\n\n            let trigger = this.touch ? 'click' : \n                this.trigger ;\n            \n            this.clickTimer = setTimeout(() => \n                this.lastclick = 0, 240);\n\n            this.hoverTimer = setTimeout(() => \n                this.hoverItem(cascade), 240);\n\n            if ( this.lastclick === 1 && trigger === 'click' ) {\n                return this.hoverItem(cascade, event);\n            }\n\n            if ( event ) {\n                event.preventDefault();\n            }\n\n            this.clickTimer = setTimeout(() => \n                this.fireSelectItem(cascade), 50);\n        },\n\n        fireSelectItem(cascade)\n        {\n            clearTimeout(this.hoverTimer);\n\n            this.lastclick = 0;\n\n            this.$emit('update:modelValue', \n                this.tempValue = cascade);\n        }\n\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-cascader-panel',\n            'n-cascader-panel--' + this.size\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderLabel')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        )\n    },\n\n    renderOption(item, cascade = [])\n    {\n        let value = Obj.get(item, this.valueProp);\n\n        let classList = [\n            'n-popover-option'\n        ];\n\n        if ( Arr.has(this.tempValue, item[this.valueProp]) ) {\n            classList.push('n-active');\n        }\n\n        let disabled = Obj.get(item, this.disabledProp, false);\n\n        if ( disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            size: this.size,\n            type: this.type,\n            clickClose: false\n        };\n\n        if ( Arr.last(this.tempValue) === value ) {\n            props.icon = nano.Icons.checked;\n        }\n\n        let tempCascade = Arr.merge(Arr.clone(cascade), [value]);\n\n        if ( this.trigger === 'hover' ) {\n            props.onMousemove = Any.framerate(this.onHover(tempCascade), 30);\n        }\n\n        props['on' + Str.ucfirst(this.mousedown)] = this.onSelect(tempCascade);\n\n        let children = Obj.get(item, this.childProp);\n\n        if (  ! props.icon && ! Any.isEmpty(children) ) {\n            props.icon = nano.Icons.angleRight;\n        }\n\n        return (\n            <NPopoverOption class={classList} {...props}>\n                { Obj.get(item, this.labelProp) }\n            </NPopoverOption>\n        );\n    },\n\n    renderOptions(items, cascade = [])\n    {\n        if ( Any.isEmpty(items) ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-cascader-panel__items\">\n                <NScrollbar relative={true}>\n                    {\n                        Arr.each(items, (item) => {\n                            return this.ctor('renderOption')(item, cascade);\n                        })\n                    }\n                </NScrollbar>\n            </div>\n        )\n    },\n\n    renderCascade()\n    {\n        let renderList = [\n            this.ctor('renderOptions')(this.options)\n        ];\n\n        let items = this.options, cascade = [];\n\n        Arr.each(this.tempHover, (value) => {\n\n            if ( ! items ) {\n                return;\n            }\n\n            cascade.push(value);\n\n            let item = Arr.find(items, {\n                [this.valueProp]: value\n            });\n\n            items = Obj.get(item, this.childProp);\n\n            let options = this.ctor('renderOptions')\n                (items, cascade);\n\n            renderList.push(options);\n        });\n\n        return renderList;\n    },\n\n    render()\n    {\n        let classList = [\n            'n-cascader-panel',\n            'n-cascader-panel--' + this.size\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>{ this.ctor('renderCascade')() }</div>\n        );\n    }\n\n}","import { Arr, Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCascader',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        clearValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        current: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Please select';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        trigger: {\n            default()\n            {\n                return 'hover';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        valueProp: {\n            default()\n            {\n                return 'value';\n            },\n            type: [String]\n        },\n\n        childProp: {\n            default()\n            {\n                return 'children';\n            },\n            type: [String]\n        },\n\n        disabledProp: {\n            default()\n            {\n                return 'disabled';\n            },\n            type: [String]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue,\n            tempHover: this.modelValue,\n            focus: false,\n        };\n    },\n\n    methods: {\n\n        clearCascader()\n        {\n            this.focus = true;\n\n            this.$emit('update:modelValue', \n                this.tempValue = this.tempHover = this.clearValue);\n        },\n\n        onCascaderInput(value)\n        {\n            this.focus = false;\n\n            this.$emit('update:modelValue', \n                this.tempValue = value);\n        },\n\n        onCascaderHover(value)\n        {\n            this.$emit('update:hover', \n                this.tempHover = value);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value) {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearCascader;\n        }\n\n        return (\n            <div class=\"n-cascader__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-cascader__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderLabelItems()\n    {\n        let items = this.options, renderList = [];\n\n        if ( Any.isEmpty(this.tempValue) ) {\n            return (\n                <div class=\"n-cascader__placeholder\">\n                    { this.trans(this.placeholder) }\n                </div>\n            );\n        }\n\n        Arr.each(this.tempValue, (value) => {\n\n            if ( ! items ) {\n                return;\n            }\n\n            let item = Arr.find(items, {\n                [this.valueProp]: value\n            });\n\n            items = Obj.get(item, this.childProp);\n\n            let itemLabel = (\n                <div class=\"n-cascader__item\">\n                    <span>{ Obj.get(item, this.labelProp) }</span>\n                </div>\n            );\n\n            renderList.push(itemLabel);\n        });\n\n        return (\n            <div class=\"n-cascader__items\">\n                { renderList }\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-cascader__display'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderLabelItems')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderItems()\n    {\n        let props = Obj.except(this.$props, ['modelValue'], {\n            hover: this.tempHover,\n            modelValue: this.tempValue,\n        });\n\n        props['onUpdate:hover'] = this.onCascaderHover;\n        props['onUpdate:modelValue'] = this.onCascaderInput;\n\n        return (\n            <NCascaderPanel class=\"n-cascader__body\" {...props}></NCascaderPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled,\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-cascader',\n            'n-cascader--' + this.type,\n            'n-cascader--' + this.size,\n        ];\n\n        if ( Any.isEmpty(this.tempValue) ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import CascaderPanel from './src/cascader-panel/cascader-panel';\nimport Cascader from './src/cascader/cascader';\n\nexport default function (App) {\n    App.component(CascaderPanel.name, CascaderPanel);\n    App.component(Cascader.name, Cascader);\n}","import { Arr, Str, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDatepickerPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        arrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearArrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        depart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearDepart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        minDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        maxDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        monthPanels: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        weekdays: {\n            default()\n            {\n                return [\n                    'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su',\n                ];\n            },\n            type: [Array]\n        },\n\n        months: {\n            default()\n            {\n                return [\n                    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', \n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\n                ]\n            },\n            type: [Array]\n        }\n\n    },\n\n    computed: {\n\n        yearsGrid()\n        {\n            return this.tempCache.getYears();\n        },\n\n        monthsGrid()\n        {\n            return this.tempCache.getMonths();\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        },\n\n        arrive(value)\n        {\n            if ( value !== this.tempArrive.format(this.format) ) {\n                this.tempArrive = Now.make(value);\n            }\n        },\n\n        depart(value)\n        {\n            if ( value !== this.tempDepart.format(this.format) ) {\n                this.tempDepart = Now.make(value);\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempView: 'date',\n            tempRanger: null,\n            cacheArrive: null,\n            cacheDepart: null,\n            tempValue: Now.make(this.modelValue, this.format),\n            tempCache: Now.make(this.modelValue, this.format),\n            tempArrive: Now.make(this.arrive),\n            tempDepart: Now.make(this.depart),\n        }\n    },\n\n    methods: {\n\n        gotoDate()\n        {\n            this.tempView = 'date';\n        },\n\n        gotoMonth()\n        {\n            this.tempView = 'month';\n        },\n\n        gotoYear()\n        {\n            this.tempView = 'year';\n        },\n\n        patchDate(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            // Copy now to cache\n            this.tempCache = now.clone();\n\n            // Copy now to value\n            this.tempValue = now.clone();\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        patchMonth(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            this.tempCache = now.clone();\n\n            this.gotoDate();\n        },\n\n        printRange(now)\n        {\n            this.tempRanger = now.clone();\n        },\n\n        patchYear(now)\n        {\n            if ( Any.isString(now) ) {\n                now = Now.make(now);\n            }\n\n            this.tempCache = now.clone();\n\n            this.gotoMonth();\n        },\n\n        patchRange(now)\n        {\n            if ( this.cacheArrive && ! this.cacheDepart ) {\n                this.cacheDepart = now.clone();\n            }\n\n            if ( ! this.cacheArrive && ! this.cacheDepart ) {\n                this.cacheArrive = now.clone();\n            }\n\n            if ( ! this.cacheArrive || ! this.cacheDepart ) {\n                return;\n            }\n\n            this.tempArrive = this.cacheArrive.clone();\n            this.tempDepart = this.cacheDepart.clone();\n\n            this.$emit('update:arrive', \n                this.tempArrive.format(this.format));\n\n            this.$emit('update:depart', \n                this.tempDepart.format(this.format));\n\n            this.cacheArrive = null;\n            this.cacheDepart = null;\n\n            this.$emit('rangeSelected', [\n                this.tempArrive.format(this.format),\n                this.tempDepart.format(this.format)\n            ]);\n        },\n\n    },\n\n    renderToolbarPrev(closure)\n    {\n        let props = {\n            type: this.type,\n            link: true,\n            icon: nano.Icons.angleLeft,\n            onClick: closure\n        };\n\n        return (<NButton {...props}></NButton>);\n    },\n\n    renderToolbarNext(closure)\n    {\n        let props = {\n            type: this.type,\n            link: true,\n            icon: nano.Icons.angleRight,\n            onClick: closure\n        };\n\n        return (<NButton {...props}></NButton>);\n    },\n\n    renderToolbarMonth()\n    {\n        let props = {\n            onClick: this.gotoMonth\n        };\n\n        let monthsHtml = [\n            this.months[this.tempCache.month()]\n        ];\n\n        let month = this.tempCache.clone()\n            .addMonths(this.monthPanels - 1);\n\n        if ( month.month() !== this.tempCache.month() ) {\n            monthsHtml.push(this.months[month.month()]);\n        }\n\n        return (\n            <span class=\"n-datepicker-panel__month\" {...props}>\n                { monthsHtml.join(' - ') }\n            </span>\n        );\n    },\n\n    renderToolbarYear()\n    {\n        let props = {\n            onClick: this.gotoYear\n        };\n\n        let yearsHtml = [\n            this.tempCache.year()\n        ];\n\n        let month = this.tempCache.clone()\n            .addMonths(this.monthPanels - 1);\n\n        if ( month.year() !== this.tempCache.year() ) {\n            yearsHtml.push(month.year());\n        }\n\n        return (\n            <span class=\"n-datepicker-panel__year\" {...props}>\n                { yearsHtml.join(' - ') }\n            </span>\n        );\n    },\n\n    renderToolbar({ prev, next })\n    {\n        return (\n            <div class=\"n-datepicker-panel__toolbar\">\n                <div class=\"n-datepicker-panel__display\">\n                    { this.ctor('renderToolbarMonth')() }\n                    { this.ctor('renderToolbarYear')() }\n                </div>\n                <div class=\"n-datepicker-panel__prev\">\n                    { this.ctor('renderToolbarPrev')(prev) }\n                </div>\n                <div class=\"n-datepicker-panel__next\">\n                    { this.ctor('renderToolbarNext')(next) }\n                </div>\n            </div>\n        );\n    },\n\n    renderDateItem(now, month)\n    {\n        let classList = [\n            'n-datepicker-panel__day'\n        ];\n\n        if ( now.equalDate() ) {\n            classList.push('n-today');\n        }\n\n        let isSelected = this.tempValue.valid() && \n            now.equalDate(this.tempValue);\n\n        if ( isSelected ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.month() === month.month() ) {\n            classList.push('n-current');\n        }\n\n        let isNotBeforeMin = ! this.minDate || \n            now.after(this.minDate) || now.equalDate(this.minDate);\n\n        let isNotAfterMax = ! this.maxDate || \n            now.before(this.maxDate) || now.equalDate(this.maxDate);\n\n        if ( ! isNotBeforeMin || ! isNotAfterMax ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {};\n\n        if ( isNotBeforeMin && isNotAfterMax ) {\n            props.onClick = () => this.patchDate(now);\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('DD') }</span>\n            </div>\n        );\n    },\n\n    renderRangeDateItem(now, month)\n    {\n        let classList = [\n            'n-datepicker-panel__day'\n        ];\n\n        if ( now.equalDate('now') ) {\n            classList.push('n-today');\n        }\n\n        if ( now.month() === month.month() ) {\n            classList.push('n-current');\n        }\n\n        let viewMode = 0;\n\n        if ( !! this.cacheArrive ) {\n            viewMode++;\n        }\n\n        if ( !! this.cacheDepart ) {\n            viewMode++;\n        }\n\n        let isTempValid = this.tempArrive.valid() && \n            this.tempDepart.valid();\n\n        if ( viewMode === 0 && isTempValid ) {\n\n            if ( now.between(this.tempArrive, this.tempDepart) ) {\n                classList.push('n-between');\n                classList.push('n-selected');\n            }\n\n            let arriveFirst = this.tempArrive.before(this.tempDepart);\n\n            if ( now.equalDate(this.tempArrive) ) {\n                classList.push(arriveFirst ? 'n-arrive' : 'n-depart');\n                classList.push('n-selected');\n            }\n\n            if ( now.equalDate(this.tempDepart) ) {\n                classList.push(arriveFirst ? 'n-depart' : 'n-arrive');\n                classList.push('n-selected');\n            }\n\n        }\n\n        if ( viewMode === 1 && this.cacheArrive ) {\n\n            if ( now.between(this.cacheArrive, this.tempRanger) ) {\n                classList.push('n-between');\n            }\n\n            let arriveFirst = this.cacheArrive.before(this.tempRanger);\n\n            if ( now.equalDate(this.cacheArrive) ) {\n                classList.push(arriveFirst ? 'n-arrive' : 'n-depart');\n            }\n\n            if ( now.equalDate(this.tempRanger) ) {\n                classList.push(arriveFirst ? 'n-depart' : 'n-arrive');\n            }\n\n        }\n\n        let isNotBeforeMin = ! this.minDate || \n            now.after(this.minDate) || now.equalDate(this.minDate);\n\n        let isNotAfterMax = ! this.maxDate || \n            now.before(this.maxDate) || now.equalDate(this.maxDate);\n\n        if ( ! isNotBeforeMin || ! isNotAfterMax ) {\n            classList.push('n-disabled');\n        }\n\n        let props = {\n            onMouseenter: () => this.printRange(now)\n        };\n\n        if ( isNotBeforeMin && isNotAfterMax ) {\n            props.onClick = () => this.patchRange(now);\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('DD') }</span>\n            </div>\n        );\n    },\n\n    renderDate()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevMonth();\n        };\n        let next = () => {\n            this.tempCache = this.tempCache.nextMonth();\n        };\n\n        let legendHtml = (\n            Arr.each(this.weekdays, (day) => {\n                return (\n                    <div class=\"n-datepicker-panel__day\">\n                        <span>{ this.trans(day) }</span>\n                    </div>\n                );\n            })\n        );\n\n        let renderItem = this.ctor('renderDateItem');\n\n        if ( this.range ) {\n            renderItem = this.ctor('renderRangeDateItem');\n        }\n\n        let bodyHtml = (month) => (\n            Arr.each(Arr.chunk(month.getDatesGrid(), 7), (chunks) => {\n                return (\n                    <div class=\"n-datepicker-panel__week\">\n                        { Arr.each(chunks, (chunk) => renderItem(chunk, month)) }\n                    </div>\n                );\n            })\n        );\n\n        let panelHtml = (\n            Arr.each(Arr.make(this.monthPanels), (offset) => {\n\n                let month = this.tempCache.clone()\n                    .addMonths(offset - 1);\n\n                return (\n                    <div class=\"n-datepicker-panel__panel\">\n                        <div class=\"n-datepicker-panel__legend\">\n                            { legendHtml }\n                        </div>\n                        <div class=\"n-datepicker-panel__body\">\n                            { bodyHtml(month) }\n                        </div>\n                    </div>\n                );\n            })\n        );\n\n        return (\n            <div class=\"n-datepicker-panel__dateview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__panels\">\n                    { panelHtml }\n                </div>\n            </div>\n        );\n    },\n\n    renderMonthItem(now)\n    {\n        let classList = [\n            'n-datepicker-panel__month'\n        ];\n\n        if ( now.equal(this.tempCache, 'YYYYMM') ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.month() === Now.make('now').month() ) {\n            classList.push('n-current');\n        }\n\n        let props = {\n            onClick: () => this.patchMonth(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ this.trans(this.months[now.month()]) }</span>\n            </div>\n        )\n    },\n\n    renderMonth()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevYear();\n        };\n\n        let next = () => {\n            this.tempCache = this.tempCache.nextYear();\n        };\n\n        return (\n            <div class=\"n-datepicker-panel__monthview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__body\">\n                    <div class=\"n-datepicker-panel__year\">\n                        { Arr.each(this.monthsGrid, this.ctor('renderMonthItem')) }\n                    </div>\n                </div>\n                <div class=\"n-datepicker-panel__footer\">\n                    <NButton size={this.type}  size={this.size} link={true} onClick={this.gotoDate}>\n                        { this.trans('Go back') }\n                    </NButton>\n                </div>\n            </div>\n        );\n    },\n\n    renderYearItem(now)\n    {\n        let classList = [\n            'n-datepicker-panel__year'\n        ];\n\n        if ( now.equal(this.tempCache, 'YYYY') ) {\n            classList.push('n-selected');\n        }\n\n        if ( now.year() === Now.make('now').year() ) {\n            classList.push('n-current');\n        }\n\n        let props = {\n            onClick: () => this.patchYear(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.year() }</span>\n            </div>\n        )\n    },\n\n    renderYear()\n    {\n        let prev = () => {\n            this.tempCache = this.tempCache.prevDecade();\n        };\n\n        let next = () => {\n            this.tempCache = this.tempCache.nextDecade();\n        };\n\n        return (\n            <div class=\"n-datepicker-panel__yearview\">\n                <div class=\"n-datepicker-panel__header\">\n                    { this.ctor('renderToolbar')({ prev, next }) }\n                </div>\n                <div class=\"n-datepicker-panel__body\">\n                    <div class=\"n-datepicker-panel__decade\">\n                        { Arr.each(this.yearsGrid, this.ctor('renderYearItem')) }\n                    </div>\n                </div>\n                <div class=\"n-datepicker-panel__footer\">\n                    <NButton size={this.type}  size={this.size} link={true} onClick={this.gotoDate}>\n                        { this.trans('Go back') }\n                    </NButton>\n                </div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-datepicker-panel',\n            'n-datepicker-panel--' + this.size,\n            'n-datepicker-panel--' + this.type\n        ]\n\n        return (\n            <div class={classList}>\n                { this.ctor('render' + Str.ucfirst(this.tempView))() }\n            </div>\n        );\n    }\n\n}","import { Obj, Now, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NDatepicker',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        arrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearArrive: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        depart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearDepart: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        minDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        maxDate: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        placeholder: {\n            default()\n            {\n                return Locale.trans('Select date');\n            },\n            type: [String]\n        },\n\n        placeholderArrive: {\n            default()\n            {\n                return Locale.trans('Start date');\n            },\n            type: [String]\n        },\n\n        placeholderDepart: {\n            default()\n            {\n                return Locale.trans('End date');\n            },\n            type: [String]\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        rangeSeparator: {\n            default()\n            {\n                return '-';\n            },\n            type: [String]\n        },\n\n        monthPanels: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        boundary: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD HH:mm:ss');\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return Locale.trans('YYYY-MM-DD');\n            },\n            type: [String]\n        },\n\n        weekdays: {\n            default()\n            {\n                return [\n                    Locale.trans('Mo'),\n                    Locale.trans('Tu'),\n                    Locale.trans('We'),\n                    Locale.trans('Th'),\n                    Locale.trans('Fr'),\n                    Locale.trans('Sa'),\n                    Locale.trans('Su'),\n                ];\n            },\n            type: [Array]\n        },\n\n        months: {\n            default()\n            {\n                return [\n                    Locale.trans('Jan'),\n                    Locale.trans('Feb'),\n                    Locale.trans('Mar'),\n                    Locale.trans('Apr'),\n                    Locale.trans('May'),\n                    Locale.trans('Jun'),\n                    Locale.trans('Jul'),\n                    Locale.trans('Aug'),\n                    Locale.trans('Sep'),\n                    Locale.trans('Oct'),\n                    Locale.trans('Nov'),\n                    Locale.trans('Dec'),\n                ];\n            },\n            type: [Array]\n        }\n\n    },\n\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        },\n\n        arrive(value)\n        {\n            if ( value !== this.tempArrive.format(this.format) ) {\n                this.tempArrive = Now.make(value);\n            }\n        },\n\n        depart(value)\n        {\n            if ( value !== this.tempDepart.format(this.format) ) {\n                this.tempDepart = Now.make(value);\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            focus: false,\n            tempValue: Now.make(this.modelValue, this.format),\n            tempArrive: Now.make(this.arrive, this.format),\n            tempDepart: Now.make(this.depart, this.format),\n        };\n    },\n\n    methods: {\n\n        clearDatepicker()\n        {\n            this.range ? this.clearRangeDatepicker() :\n                this.clearSingleDatepicker();\n        },\n\n        clearSingleDatepicker()\n        {\n            this.tempValue = Now.make(this.clearValue, \n                this.format);\n\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n\n        clearRangeDatepicker()\n        {\n            this.tempArrive = Now.make(this.clearArrive, \n                this.format);\n\n            this.$emit('update:arrive', this.clearValue);\n\n            this.tempDepart = Now.make(this.clearDepart, \n                this.format);\n\n            this.$emit('update:depart', this.clearDepart);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n        onValueInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempValue = Now.make(moment);\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        onArriveInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempArrive = Now.make(moment);\n\n            this.$emit('update:arrive', \n                this.tempArrive.format(this.format));\n        },\n\n        onDepartInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                year: value.moment.year(),\n                month: value.moment.month(),\n                date: value.moment.date(),\n            });\n\n            this.tempDepart = Now.make(moment);\n\n            this.$emit('update:depart', \n                this.tempDepart.format(this.format));\n        },\n\n        onDatepickerInput(value)\n        {\n            this.focus = false;\n\n            this.tempValue = Now.make(value, \n                this.format);\n\n            this.$emit('update:modelValue', value);\n        },\n\n        onDatepickerDepart(value)\n        {\n            this.focus = false;\n\n            this.tempDepart = Now.make(value, \n                this.format);\n\n            this.$emit('update:depart', value);\n        },\n\n        onDatepickerArrive(value)\n        {\n            this.focus = false;\n\n            this.tempArrive = Now.make(value, \n                this.format);\n\n            this.$emit('update:arrive', value);\n        },\n\n    },\n\n\n    renderLabelClear()\n    {\n        let isEmpty = ! this.tempArrive.initialDate &&\n            ! this.tempDepart.initialDate;\n\n        if ( ! this.range ) {\n            isEmpty = ! this.tempValue.initialDate;\n        }\n\n        if ( ! this.clearable || isEmpty ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearDatepicker;\n        }\n\n        return (\n            <div class=\"n-datepicker__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-datepicker__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderRange()\n    {\n        let arriveProps = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholderArrive,\n            onInput: this.onArriveInput,\n        };\n\n        if ( this.tempArrive.valid() ) {\n            arriveProps.value = this.tempArrive.format(\n                this.displayFormat, true);\n        }\n\n        let departProps = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholderDepart,\n            onInput: this.onDepartInput,\n        };\n\n        if ( this.tempDepart.valid() ) {\n            departProps.value = this.tempDepart.format(\n                this.displayFormat, true);\n        }\n\n        return [\n            (\n                <div class=\"n-datepicker__input\">\n                    <input {...arriveProps}/>\n                </div>\n            ),\n            (\n                <div class=\"n-datepicker__seperator\">\n                    <span>{ this.rangeSeparator }</span>\n                </div>\n            ),\n            (\n                <div class=\"n-datepicker__input\">\n                    <input {...departProps}/>\n                </div>\n            )\n        ];\n    },\n\n    renderSingle()\n    {\n        let props = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.placeholder,\n            onInput: this.onValueInput,\n        };\n\n        if ( this.tempValue.valid() ) {\n            props.value = this.tempValue.format(\n                this.displayFormat, true);\n        }\n\n        return (\n            <div class=\"n-datepicker__input\">\n                <input {...props}/>\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-datepicker__display'\n        ];\n\n        if ( this.range ) {\n            classList.push('n-range');\n        }\n\n        let displayHtml = this.ctor('renderSingle');\n\n        if ( this.range ) {\n            displayHtml = this.ctor('renderRange');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { displayHtml() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderItems()\n    {\n        \n        let props = Obj.except(this.$props, ['modelValue'], {\n            arrive: this.tempArrive.format(this.format) || null,\n            depart: this.tempDepart.format(this.format) || null,\n            modelValue: this.tempValue.format(this.format) || null,\n        });\n\n        props['onUpdate:arrive'] = this.onDatepickerArrive;\n        props['onUpdate:depart'] = this.onDatepickerDepart;\n        props['onUpdate:modelValue'] = this.onDatepickerInput;\n\n        return (\n            <NDatepickerPanel class=\"n-datepicker__body\" {...props}></NDatepickerPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderItems') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-datepicker',\n            'n-datepicker--' + this.type,\n            'n-datepicker--' + this.size,\n        ];\n\n        let isEmpty = ! this.tempArrive.initialDate &&\n            ! this.tempDepart.initialDate;\n\n        if ( ! this.range ) {\n            isEmpty = ! this.tempValue.initialDate;\n        }\n\n        if ( isEmpty ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import DatepickerPanel from \"./src/datepicker-panel/datepicker-panel\";\nimport Datepicker from \"./src/datepicker/datepicker\";\n\nexport default function (App) {\n    App.component(DatepickerPanel.name, DatepickerPanel);\n    App.component(Datepicker.name, Datepicker);\n}","import { Arr, Obj, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTimepickerPanel',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Select time';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return 'HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        hoursInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        minutesInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        secondsInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        hoursGrid()\n        {\n            return this.tempValue.getHours(this.hoursInterval);\n        },\n\n        minutesGrid()\n        {\n            return this.tempValue.getMinutes(this.minutesInterval);\n        },\n\n        secondsGrid()\n        {\n            return this.tempValue.getSeconds(this.secondsInterval);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: Now.make(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        eventSelect(now)\n        {\n            this.$emit('update:modelValue', \n                (this.tempValue = now.clone()).format(this.format));\n        },\n\n    },\n\n    renderToolbar()\n    {\n        return (\n            <div class=\"n-timepicker-panel__toolbar\">\n                <div class=\"n-timepicker-panel-display\">\n                    <span class=\"n-timepicker-panel__time\">\n                        { this.tempValue.format(this.displayFormat) || this.placeholder }\n                    </span>\n                </div>\n            </div>\n        )\n    },\n\n    renderHourItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.hour() === this.tempValue.hour() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('HH') }</span>\n            </div>\n        );\n    },\n\n    renderHourPanel()\n    {\n        if ( ! this.displayFormat.match('HH') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\" wrapClass=\"n-timepicker-panel__wrap\">\n                { Arr.each(this.hoursGrid, this.ctor('renderHourItem')) }\n            </NScrollbar>\n        );\n    },\n\n    renderMinuteItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.minute() === this.tempValue.minute() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('mm') }</span>\n            </div>\n        );\n    },\n\n    renderMinutePanel()\n    {\n        if ( ! this.displayFormat.match('mm') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\" wrapClass=\"n-timepicker-panel__wrap\">\n                { Arr.each(this.minutesGrid, this.ctor('renderMinuteItem')) }\n            </NScrollbar>\n        );\n    },\n\n    renderSecondItem(now)\n    {\n        let classList = [\n            'n-timepicker-panel__item'\n        ];\n\n        if ( this.tempValue.valid() && now.second() === this.tempValue.second() ) {\n            classList.push('n-selected');\n        }\n\n        let props = {\n            onMousedown: () => this.eventSelect(now)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                <span>{ now.format('ss') }</span>\n            </div>\n        );\n    },\n\n    renderSecondPanel()\n    {\n        if ( ! this.displayFormat.match('ss') ) {\n            return null;\n        }\n\n        return (\n            <NScrollbar class=\"n-timepicker-panel__panel\">\n                <div class=\"n-timepicker-panel__wrap\">\n                    { Arr.each(this.secondsGrid, this.ctor('renderSecondItem')) }\n                </div>\n            </NScrollbar>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-timepicker-panel',\n            'n-timepicker-panel--' + this.size,\n            'n-timepicker-panel--' + this.type,\n        ];\n\n        if ( this.disabled ){\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-timepicker-panel__header\">\n                    {this.ctor('renderToolbar')()}\n                </div>\n                <div class=\"n-timepicker-panel__body\">\n                    { this.ctor('renderHourPanel')() }\n                    { this.ctor('renderMinutePanel')() }\n                    { this.ctor('renderSecondPanel')() }\n                </div>\n            </div>\n        );\n    }\n\n}","import { Arr, Obj, Now, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTimepicker',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        placeholder: {\n            default()\n            {\n                return 'Select time';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'bottom-start';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        format: {\n            default()\n            {\n                return 'YYYY-MM-DD HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        displayFormat: {\n            default()\n            {\n                return 'HH:mm:ss';\n            },\n            type: [String]\n        },\n\n        hoursInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        minutesInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        secondsInterval: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        hoursGrid()\n        {\n            return this.tempValue.getHours(this.hoursInterval);\n        },\n\n        minutesGrid()\n        {\n            return this.tempValue.getMinutes(this.minutesInterval);\n        },\n\n        secondsGrid()\n        {\n            return this.tempValue.getSeconds(this.secondsInterval);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue.format(this.format) ) {\n                this.tempValue = Now.make(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false,\n            tempValue: Now.make(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        clearTimepicker()\n        {\n            this.tempValue = Now.make(this.clearValue, \n                this.format);\n\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n        onPopoverInput(value)\n        {\n            this.focus = value;\n        },\n\n        onValueInput(event)\n        {\n            let isNotSameLength = this.displayFormat.length !==\n                event.target.value.length;\n\n            if ( isNotSameLength ) {\n                return;\n            }\n\n            let value = Now.make(event.target.value, \n                this.displayFormat);\n\n            if ( ! value.moment.isValid() ) {\n                return;\n            }\n\n            let moment = this.tempValue.moment.set({\n                hour: value.moment.hour(), \n                minute: value.moment.minute(), \n                second: value.moment.second(),\n            });\n\n            this.tempValue = Now.make(moment);\n\n            this.$emit('update:modelValue', \n                this.tempValue.format(this.format));\n        },\n\n        onTimepickerInput(value)\n        {\n            this.tempValue = Now.make(value, \n                this.format);\n\n            this.$emit('update:modelValue', value);\n        },\n\n    },\n\n    renderLabelClear()\n    {\n        if ( ! this.clearable || ! this.tempValue.valid() ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clearTimepicker;\n        }\n\n        return (\n            <div class=\"n-timepicker__clear\" {...props}>\n                <i class={ nano.Icons.times }></i>\n            </div>\n        );\n    },\n\n    renderLabelAngle()\n    {\n        return (\n            <div class=\"n-timepicker__angle\">\n                <i class={ nano.Icons.angleDown }></i>\n            </div>\n        );\n    },\n\n    renderSingle()\n    {\n        let props = {\n            value: '',\n            disabled: this.disabled,\n            placeholder: this.trans(this.placeholder),\n            onInput: this.onValueInput,\n        };\n\n        if ( this.tempValue.valid() ) {\n            props.value = this.tempValue.format(\n                this.displayFormat, true);\n        }\n\n        return (\n            <div class=\"n-timepicker__input\">\n                <input {...props}/>\n            </div>\n        );\n    },\n\n    renderDisplay()\n    {\n        let classList = [\n            'n-timepicker__display'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderLabelClear')() }\n                { this.ctor('renderSingle')() }\n                { this.ctor('renderLabelAngle')() }\n            </div>\n        );\n    },\n\n    renderPanel()\n    {\n        \n        let props = Obj.except(this.$props, ['modelValue'], {\n            modelValue: this.tempValue.format(this.format) || null,\n        });\n\n        props['onUpdate:modelValue'] = this.onTimepickerInput;\n\n        return (\n            <NTimepickerPanel class=\"n-timepicker__body\" {...props}></NTimepickerPanel>\n        );\n    },\n\n    renderPopover()\n    {\n        let props = {\n            trigger: 'click',\n            width: 0,\n            size: this.size,\n            position: this.position,\n            scrollClose: true,\n            disabled: this.disabled\n        };\n\n        return (\n            <NPopover ref=\"popover\" vModel={this.focus} {...props}>\n                { { raw: this.ctor('renderPanel') } }\n            </NPopover>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-timepicker',\n            'n-timepicker--' + this.type,\n            'n-timepicker--' + this.size,\n        ];\n\n        if ( ! this.tempValue.valid() ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderDisplay')() }\n                { this.ctor('renderPopover')() }\n            </div>\n        );\n    }\n\n}","import TimepickerPanel from \"./src/timepicker-panel/timepicker-panel\";\nimport Timepicker from \"./src/timepicker/timepicker\";\n\nexport default function (App) {\n    App.component(TimepickerPanel.name, TimepickerPanel);\n    App.component(Timepicker.name, Timepicker);\n}","import { Arr, Dom, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTabs',\n\n    provide()\n    {\n        return {\n            NTabs: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: false,\n            elements: [], \n            width: 0, \n            offset: 0, \n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        addTab(tab)\n        {\n            Arr.add(this.elements, tab, \n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        removeTab(tab)\n        {\n            Arr.remove(this.elements, \n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        getTab(updateEvent = true)\n        {\n            let currentTab = Arr.find(this.elements, {\n                name: this.modelValue\n            });\n\n            let sorted = Arr.sort(this.elements, 'sort');\n\n            if ( ! currentTab ) {\n                currentTab = Arr.first(sorted);\n            }\n\n            let repeatNext = () => this.getTab(updateEvent);\n\n            if ( ! currentTab ) {\n                return Any.delay(repeatNext, 250);\n            }\n\n            if ( currentTab.name === this.tempValue || ! updateEvent  ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = currentTab.name);\n        },\n\n        changeTab(value)\n        {\n            if ( this.tempValue === value ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = value);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.init = true;\n        this.getTab(false);\n    },\n\n    updated()\n    {\n        let width = Dom.find(this.$el).find('.n-active')\n            .width();\n\n        this.width = width < 0 ? 0 : width;\n\n        let offset = Dom.find(this.$el).find('.n-active')\n            .offset('left', this.$el);\n\n        this.offset = offset < 0 ? 0 : offset;\n    },\n\n    renderHeaderIndicator()\n    {\n        let transform = `scaleX(${this.width / 100}) ` + \n            `translateX(${this.offset / (this.width / 100)}px)`;\n\n        return (\n            <div class=\"n-tabs__indicator\" style={{ transform }}>\n                { /* Indicator bar */ }\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( this.elements.length <= 1 ) {\n            return null;\n        }\n\n        // FIXME: As soon vue doesnt bug\n        let sorted = Arr.sort(this.elements, 'sort');\n        \n        let tabs = Arr.each(Arr.make(sorted.length), (tab, index) => {\n            return sorted[index].ctor('renderHeader')();\n        });\n\n        return (\n            <div class=\"n-tabs__header\">\n                {[tabs, this.ctor('renderHeaderIndicator')()]}\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-tabs__body\">\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-tabs', \n            'n-tabs--' + this.size, \n            'n-tabs--' + this.type\n        ];\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderHeader')() }\n                { this.ctor('renderBody')() }\n            </div>\n        );\n    }\n}\n","import { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NTabsItem',\n\n    inject: {\n\n        NTabs: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NTabsItem: this\n        };\n    },\n\n    props: {\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        name: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        preload: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keep: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n\n    },\n\n    methods: {\n\n        changeTab()\n        {\n            this.NTabs.changeTab(this.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            _key: null, init: false\n        }\n    },\n\n    beforeMount()\n    {\n        this.NTabs.addTab(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NTabs.removeTab(this);\n    },\n\n    renderHeaderIcon()\n    {\n        if ( ! this.$slots.icon && ! this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-tabs__tab-icon\">\n                { this.$slots.icon && this.$slots.icon() || <i class={this.icon}></i> }\n            </div>\n        );\n    },\n\n    renderHeaderLabel()\n    {\n        return (\n            <div class=\"n-tabs__tab-label\">\n                { this.$slots.label && this.$slots.label () || <span>{this.label}</span> }\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        let classList = [\n            'n-tabs__tab'\n        ];\n\n        if ( this.NTabs.tempValue === this.name ) {\n            classList.push('n-active');\n        }\n\n        let props = {\n            onClick: () => this.changeTab(this.name)\n        };\n\n        return (\n            <div class={classList} {...props}>\n                { this.ctor('renderHeaderIcon')() }\n                { this.ctor('renderHeaderLabel')() }\n            </div>\n        );\n    },\n\n    render()\n    {\n        let renderBody = this.NTabs.tempValue === this.name;\n\n        if ( this.NTabs.tempValue !== this.name && this.keep ) {\n            renderBody = this.init;\n        }\n\n        if ( this.NTabs.tempValue !== this.name && this.preload ) {\n            renderBody = true;\n        }\n\n        if ( ! renderBody ) {\n            return null;\n        }\n\n        this.init = true;\n\n        let classList = [\n            'n-tabs-item'\n        ];\n\n        let style = {};\n\n        if ( this.NTabs.tempValue !== this.name ) {\n            style.display = 'none';\n        }\n\n        if ( this.$slots.raw ) {\n            return this.$slots.raw({ style });\n        }\n\n        let element = 'div';\n\n        if ( ! this.relative && ! this.NTabs.relative ) {\n            element = resolveComponent('NScrollbar');\n        }\n\n        return h(element, { class: classList, style }, this.$slots);\n    }\n}\n","import Tabs from './src/tabs/tabs';\nimport TabsItem from './src/tabs-item/tabs-item';\n\nexport default function (App) {\n    App.component(Tabs.name, Tabs);\n    App.component(TabsItem.name, TabsItem);\n}","import { Arr, Dom, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NCollapse',\n\n    provide()\n    {\n        return {\n            NCollapse: this\n        };\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        relative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            init: false, elements: [], tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        addTab(tab)\n        {\n            Arr.add(this.elements, tab,\n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        removeTab(tab)\n        {\n            Arr.remove(this.elements,\n                { name: tab.name });\n\n            if ( this.init) {\n                this.$nextTick(this.$forceUpdate);\n            }\n        },\n\n        showTab(value)\n        {\n            if ( Arr.has(this.tempValue, value) ) {\n                return;\n            }\n\n            Arr.add(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        hideTab(value)\n        {\n            if ( ! Arr.has(this.tempValue, value) ) {\n                return;\n            }\n\n            Arr.remove(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        toggleTab(value)\n        {\n            Arr.toggle(this.tempValue, value);\n\n            this.$emit('update:modelValue', this.tempValue);\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    mounted()\n    {\n        this.init = true;\n    },\n\n    render()\n    {\n        let classList = [\n            'n-collapse',\n            'n-collapse--' + this.size,\n            'n-collapse--' + this.type\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import { Arr, Any, Dom } from \"@kizmann/pico-js\";\nimport { h, resolveComponent } from \"vue\";\n\nexport default {\n\n    name: 'NCollapseItem',\n\n    inject: {\n\n        NCollapse: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NCollapseItem: this\n        };\n    },\n\n    props: {\n\n        label: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        name: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        sort: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        preload: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        keep: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    methods: {\n\n        showTab()\n        {\n            this.NCollapse.showTab(this.name);\n        },\n\n        hideTab()\n        {\n            this.NCollapse.hideTab(this.name);\n        },\n\n        toggleTab()\n        {\n            this.NCollapse.toggleTab(this.name);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            _key: null, init: false, dragger: 0\n        }\n    },\n\n    beforeMount()\n    {\n        this.NCollapse.addTab(this);\n    },\n\n    beforeUnmount()\n    {\n        this.NCollapse.removeTab(this);\n    },\n\n    renderHeaderIcon()\n    {\n        if ( !this.$slots.icon && !this.icon ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-collapse__header-icon\">\n                {this.$slots.icon && this.$slots.icon() || <i class={this.icon}></i>}\n            </div>\n        );\n    },\n\n    renderHeaderLabel()\n    {\n        return (\n            <div class=\"n-collapse__header-label\">\n                {this.$slots.label && this.$slots.label() || <span>{this.label}</span>}\n            </div>\n        );\n    },\n\n    renderHeaderAngle()\n    {\n        return (\n            <div class=\"n-collapse__header-angle\">\n                {this.$slots.angle && this.$slots.angle() || <i class={nano.Icons.angleRight}></i>}\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( !this.label && !this.$slots.label ) {\n            return null;\n        }\n\n        let classList = [\n            'n-collapse__header'\n        ];\n\n        if ( Arr.has(this.NCollapse.tempValue, this.name) ) {\n            classList.push('n-active');\n        }\n\n        let props = {\n            onClick: () => this.toggleTab(this.name)\n        };\n\n        props['onDragenter'] = (event) => {\n\n            this.dragger++;\n\n            if ( this.dragger !== 1 ) {\n                return;\n            }\n\n            this.showDelay = setTimeout(() => {\n                this.showTab(this.name);\n            }, 350);\n        };\n\n        props['onDragleave'] = (event) => {\n\n            this.dragger--;\n\n            if ( this.dragger !== 0 ) {\n                return;\n            }\n\n            clearTimeout(this.showDelay);\n        };\n\n        return (\n            <div ref=\"header\" class={classList} {...props}>\n                {this.ctor('renderHeaderIcon')()}\n                {this.ctor('renderHeaderLabel')()}\n                {this.ctor('renderHeaderAngle')()}\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        let classList = [\n            'n-collapse__body'\n        ];\n\n        let tempValue = Arr.clone(this.NCollapse.tempValue);\n\n        if ( !this.label && !this.$slots.label ) {\n            tempValue.push(this.name);\n        }\n\n        let renderBody = Arr.has(tempValue, this.name);\n\n        if ( !Arr.has(tempValue, this.name) && this.keep ) {\n            renderBody = this.init;\n        }\n\n        if ( !Arr.has(tempValue, this.name) && this.preload ) {\n            renderBody = true;\n        }\n\n        if ( !renderBody && this.label ) {\n            return null;\n        }\n\n        this.init = true;\n\n        let style = {};\n\n        if ( !Arr.has(tempValue, this.name) ) {\n            style.display = 'none';\n        }\n\n        let element = 'div';\n\n        if ( !this.relative && !this.NCollapse.relative ) {\n            element = resolveComponent('NScrollbar');\n        }\n\n        return h(element, { class: classList, style, }, this.$slots);\n    },\n\n    render()\n    {\n        return [\n            this.ctor('renderHeader')(), this.ctor('renderBody')()\n        ];\n    }\n}\n","import Collapse from './src/collapse/collapse';\nimport CollapseItem from './src/collapse-item/collapse-item';\n\nexport default function (App) {\n    App.component(Collapse.name, Collapse);\n    App.component(CollapseItem.name, CollapseItem);\n}","import { Any, Obj, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPreviewPlain',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        showSrc: {\n            default()\n            {\n                return true;\n            }\n        }\n\n    },\n\n    computed: {\n\n        tempSrc()\n        {\n            return Obj.get(this.src, 'name', this.src);\n        },\n\n        tempExt()\n        {\n            let regex = /^.*?\\.([^.?]+)(\\?.*?)?$/;\n\n            if ( Any.isEmpty(this.tempSrc) ) {\n                return null;\n            }\n\n            return this.tempSrc.replace(regex, '$1');\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-plain'\n        ];\n\n        let slots = [];\n\n        slots[0] = (\n            <li>{ this.type || Locale.trans('plain') }/{ this.tempExt || Locale.trans('none') }</li>\n        );\n\n        if ( this.showSrc ) {\n            slots[1] = (<li>{ this.tempSrc }</li>);\n        }\n\n        return (\n            <div class={classList}>\n                <ul>{ slots }</ul>\n            </div>\n        );\n    }\n\n}","import { Obj, Arr, Str, Any, Dom } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPreviewImage',\n\n    props: {\n\n        src: {\n            default()\n            {\n                return null;\n            }\n        },\n\n    },\n\n    data()\n    {\n        return {\n            load: false, tempSrc: null\n        };\n    },\n\n    beforeMount()\n    {\n        if ( ! window.ImageCache ) {\n            window.ImageCache = [];\n        }\n    },\n\n    mounted()\n    {\n        this.resolveLoad();\n    },\n\n    watch: {\n\n        'src': function () {\n            this.resolveLoad();\n        }\n\n    },\n\n    methods: {\n\n        resolveLoad()\n        {\n            this.tempSrc = null;\n\n            if ( Any.isObject(this.src) ) {\n                return this.resolveData();\n            }\n\n            Dom.find(this.$refs.image).loaded(() => {\n\n                /**\n                 * Add image to cache\n                 */\n                Arr.add(window.ImageCache, this.src);\n\n                /**\n                 * Mark image as loaded\n                 */\n                Any.delay(() => this.load = false, 200);\n            });\n\n            this.load = true;\n        },\n\n        resolveData()\n        {\n            let reader = new FileReader();\n\n            reader.onload = () => {\n                this.tempSrc = reader.result;\n            };\n\n            reader.readAsDataURL(this.src);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-preview-image'\n        ];\n\n        if ( Arr.has(window.ImageCache, this.src) ) {\n            classList.push('n-cached');\n        }\n\n        if ( ! this.load ) {\n            classList.push('n-ready');\n        }\n\n        return (\n            <div class={classList}>\n                <img ref=\"image\" src={this.tempSrc || this.src} />\n            </div>\n        );\n    }\n\n}","import Preview from './src/preview/preview';\nimport PreviewPlain from './src/preview-plain/preview-plain';\nimport PreviewImage from './src/preview-image/preview-image';\nimport PreviewVideo from './src/preview-video/preview-video';\n\nexport default function (App) {\n    App.component(Preview.name, Preview);\n    App.component(PreviewPlain.name, PreviewPlain);\n    App.component(PreviewImage.name, PreviewImage);\n    App.component(PreviewVideo.name, PreviewVideo);\n}\n\n","import { Arr, Map, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NMap',\n\n    props: {\n\n        lat: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        lng: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        zoom: {\n            default()\n            {\n                return 15;\n            },\n            type: [Number]\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NMap: this\n        };\n    },\n\n    data()\n    {\n        return { init: false, callbacks: [], tempMap: null };\n    },\n\n    watch: {\n\n        lat()\n        {\n            Any.delay(() => this.tempMap.focusMarkers(), 100);\n        },\n\n        lng()\n        {\n            Any.delay(() => this.tempMap.focusMarkers(), 100);\n        }\n\n    },\n\n    mounted()\n    {\n        this.tempMap = new Map(this.$el, {\n            lat: this.lat, lng: this.lng, zoom: this.zoom\n        });\n\n        this.init = true;\n\n        Arr.each(this.callbacks, (callback) => callback())\n    },\n\n    methods: {\n\n        getMap()\n        {\n            return this.tempMap;\n        },\n\n        onMount(callback)\n        {\n            this.init ? callback() : this.callbacks.push(callback);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-map'\n        ];\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import { UUID, Obj, Num, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NMapMarker',\n\n    inject: {\n\n        NMap: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        lat: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        lng: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        drag: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        options: {\n            default()\n            {\n                return { style: 'default' };\n            },\n            type: [Object]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            id: UUID(), tempMarker: null\n        };\n    },\n\n    methods: {\n\n        importMarkerPosition()\n        {\n            this.tempMarker.marker.setPosition({\n                lat: this.lat, lng: this.lng\n            });\n        },\n\n        updateMarkerPosition()\n        {\n            this.$emit('update:lat', this.tempMarker.marker.getPosition().lat());\n            this.$emit('update:lng', this.tempMarker.marker.getPosition().lng());\n        },\n\n        initializeMarker()\n        {\n            let options = Obj.assign({\n                lat: Num.float(this.lat), lng: Num.float(this.lng), draggable: this.drag\n            }, this.options);\n\n            if ( ! Any.isEmpty(this.$slots.default) ) {\n                options.html = this.$el.innerHTML;\n            }\n\n            this.tempMarker = this.NMap.getMap().createMarker(this.id, options);\n\n            this.tempMarker.marker.addListener('position_changed',\n                Any.debounce(this.updateMarkerPosition));\n\n            this.tempMarker.marker.addListener('dragstart',\n                () => this.$emit('dragstart', this.tempMarker));\n\n            this.tempMarker.marker.addListener('dragend',\n                () => this.$emit('dragend', this.tempMarker));\n\n            this.tempMarker.marker.addListener('mouseover',\n                () => this.$emit('mouseenter', this.tempMarker));\n\n            this.tempMarker.marker.addListener('mouseout',\n                () => this.$emit('mouseleave', this.tempMarker));\n        },\n\n        setMarkerByAddress(address)\n        {\n            let successClosure = () => {\n                this.NMap.getMap().focusMarkers(null, this.NMap.zoom);\n            };\n\n            let errorClosure = () => {\n                this.Notify(this.trans('Address not found.'), 'danger');\n            };\n\n            this.NMap.getMap().setMarkerByAddress(this.id, address)\n                .then(successClosure, errorClosure);\n        }\n\n    },\n\n    watch: {\n\n        lat()\n        {\n            this.importMarkerPosition();\n        },\n\n        lng()\n        {\n            this.importMarkerPosition();\n        }\n\n    },\n\n    beforeMount()\n    {\n        this.NMap.onMount(this.initializeMarker);\n    },\n\n    render()\n    {\n        return (\n            <div style=\"display: none;\">\n                { this.$slots.default }\n            </div>\n        );\n    }\n\n}\n","import Map from './src/map/map';\nimport MapMarker from './src/map-marker/map-marker';\n\nexport default function (App) {\n    App.component(Map.name, Map);\n    App.component(MapMarker.name, MapMarker);\n}\n\n","import { Any, Str, Obj, Dom } from \"@kizmann/pico-js\";\n\nclass AlertFrame {\n\n    el = null;\n\n    text = '';\n\n    icon = '';\n\n    type = '';\n\n    options = {\n        iconPrimary: nano.Icons.info,\n        iconSecondary: nano.Icons.info,\n        iconSuccess: nano.Icons.success,\n        iconWarning: nano.Icons.warning,\n        iconDanger: nano.Icons.danger,\n        iconInfo: nano.Icons.info\n    };\n\n    constructor(text, type = 'primary', options = {})\n    {\n        this.text = text;\n        this.type = type;\n\n        this.options = Obj.assign(this.options, options);\n\n        this.render();\n    }\n\n    getIcon()\n    {\n        return Obj.get(this.options,\n            'icon' + Str.ucfirst(this.type));\n    }\n\n    append(el = document.body)\n    {\n        this.el.appendTo(el);\n\n        Dom.find(document.body).on('keydown', (event) => {\n            if ( event.which === 27 ) {\n                this.remove();\n            }\n        }, 'n-alert');\n\n        setTimeout(() => this.el.addClass('n-active'), 100);\n    }\n\n    remove()\n    {\n        Dom.find(document.body).off('keydown', null, 'n-alert');\n\n        this.el.get(0).remove();\n    }\n\n    render()\n    {\n        let classList = [\n            'n-alert-frame',\n            'n-alert-frame--' + this.type,\n            'n-alert-frame--' + Alert.size\n        ];\n\n        this.el = Dom.make('div', {\n            classList: classList.join(' ')\n        });\n\n        let backdrop = Dom.make('div', {\n            classList: 'n-alert-backdrop', onclick: () => this.remove()\n        });\n\n        backdrop.onClick = () => {\n            this.remove();\n        };\n\n        backdrop.appendTo(this.el);\n\n        let frame = Dom.make('div', {\n            classList: 'n-alert'\n        });\n\n        frame.appendTo(this.el);\n\n        let icon = Dom.make('div', {\n            classList: 'n-alert__icon'\n        });\n\n        icon.appendTo(frame);\n\n        let iconSpan = Dom.make('span', {\n            classList: this.getIcon()\n        });\n\n        iconSpan.appendTo(icon);\n\n        let text = Dom.make('div', {\n            classList: 'n-alert__text'\n        });\n\n        text.html(this.text).appendTo(frame);\n    }\n\n}\n\nexport default class Alert {\n\n    static alias = 'Alert';\n\n    static size = nano.Settings.notifySize;\n\n    static alert = null;\n\n    static handle(...args)\n    {\n        if ( ! Any.isEmpty(Alert.alert) ) {\n            Alert.alert.remove();\n        }\n\n        Alert.alert = new AlertFrame(...args);\n\n        Alert.alert.append();\n\n        return Alert;\n    }\n\n}\n","import Alert from './src/alert/alert';\n\nexport default function (App) {\n    App.config.globalProperties[Alert.alias] = window[Alert.alias] = Alert.handle;\n}\n","import { UUID, Str, Obj, Dom } from \"@kizmann/pico-js\";\n\nclass Notification {\n\n    el = null;\n\n    text = '';\n\n    icon = '';\n\n    type = '';\n\n    options = {\n        duration: 4500,\n        iconPrimary: nano.Icons.info,\n        iconSecondary: nano.Icons.info,\n        iconSuccess: nano.Icons.success,\n        iconWarning: nano.Icons.warning,\n        iconDanger: nano.Icons.danger,\n        iconInfo: nano.Icons.info\n    };\n\n    constructor(text, type = 'primary', options = {})\n    {\n        this.text = text;\n        this.type = type;\n\n        this.options = Obj.assign(this.options, options);\n\n        this.render();\n    }\n\n    getIcon()\n    {\n        return Obj.get(this.options,\n            'icon' + Str.ucfirst(this.type));\n    }\n\n    append(el = document.body)\n    {\n        this.el.appendTo(el);\n\n        setTimeout(() => this.el.addClass('n-active'), 100);\n\n        return this;\n    }\n\n    remove()\n    {\n        this.el.get(0).remove();\n\n        return this;\n    }\n\n    render()\n    {\n        let classList = [\n            'n-notification',\n            'n-notification--' + this.type\n        ];\n\n        this.el = Dom.make('div', {\n            classList: classList.join(' '), onclick: () => this.remove()\n        });\n        \n\n        let icon = Dom.make('div', {\n            classList: 'n-notification__icon'\n        });\n\n        icon.appendTo(this.el);\n\n        let iconSpan = Dom.make('span', {\n            classList: this.getIcon()\n        });\n\n        iconSpan.appendTo(icon);\n\n        let text = Dom.make('div', {\n            classList: 'n-notification__text'\n        });\n\n        text.html(this.text).appendTo(this.el);\n    }\n\n}\n\nexport default class Notify {\n\n    static alias = 'Notify';\n\n    static size = nano.Settings.notifySize;\n\n    static position = nano.Settings.notifyPosition;\n\n    static notifications = {};\n\n    static handle(...args)\n    {\n        let uid = Notify.create(undefined, ...args);\n\n        let wrapper = Notify.getWrapper();\n\n        // Append element to dom\n        Notify.notifications[uid].append(wrapper);\n\n        // Queue remove\n        setTimeout(() => Notify.remove(uid),\n            Notify.notifications[uid].options.duration);\n\n        return uid;\n    }\n\n    static create(uid = UUID(), ...args)\n    {\n        Notify.notifications[uid] = new Notification(...args);\n\n        return uid;\n    }\n\n    static remove(uid)\n    {\n        if ( Notify.notifications[uid] === undefined ) {\n            return;\n        }\n\n        // Remove dom element\n        Notify.notifications[uid].remove();\n\n        // Remove from list\n        delete Notify.notifications[uid];\n    }\n\n    static getWrapper()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let style = {\n            'z-index': window.zIndex + 100\n        };\n\n        let classList = [\n            'n-notification-frame',\n            'n-notification-frame--' + this.size,\n            'n-notification-frame--' + this.position\n        ];\n\n        if ( Dom.find('.n-notification-frame').empty() === true ) {\n            Dom.make('div', { classList: classList.join(' ') }).appendTo(document.body);\n        }\n\n        Dom.find('.n-notification-frame').css(style);\n\n        return Dom.find('.n-notification-frame');\n    }\n\n}\n","import Notifcation from './src/notification/notification';\n\nexport default function (App) {\n    App.config.globalProperties[Notifcation.alias] = window[Notifcation.alias] = Notifcation.handle;\n}\n","export default {\n\n    name: 'NEmptyIcon',\n\n    props: {\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-empty-icon',\n            'n-empty-icon--' + this.size,\n            'n-empty-icon--' + this.type\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-empty-icon__frame\">\n                    { /* Icon  */ }\n                </div>\n                <div class=\"n-empty-icon__text\">\n                    { this.$slots.default && this.$slots.default() }\n                </div>\n            </div>\n        );\n    }\n\n}\n","import EmptyIcon from './src/empty-icon/empty-icon';\n\nexport default function (App) {\n    App.component(EmptyIcon.name, EmptyIcon);\n}\n","import { Arr, Obj, Dom, Any, Str, Event } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NScrollbar',\n\n    provide()\n    {\n        return {\n            NScrollbar: this\n        };\n    },\n\n    props: {\n\n        options: {\n            default()\n            {\n                return {};\n            },\n            type: [Object]\n        },\n\n        relative: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        fixture: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        allowNative: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowY: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        overflowX: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        offsetY: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        offsetX: {\n            default()\n            {\n                return 10;\n            },\n            type: [Number]\n        },\n\n        framerate: {\n            default()\n            {\n                return 24;\n            },\n            type: [Number]\n        },\n\n        wrapClass: {\n            default()\n            {\n                return 'n-scrollbar__wrap';\n            }\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            native: false\n        };\n    },\n\n    beforeMount()\n    {\n        this.adaptScrollBehavior();\n    },\n\n    mounted()\n    {\n        this.bindAdaptHeight();\n        this.bindAdaptWidth();\n\n        let passive = {\n            passive: true, uid: this._.uid\n        };\n\n        Event.bind('NScrollbar:resize',\n            this.onResize, this._.uid);\n\n        Event.bind('NResizer:moved',\n            this.onUpdate, this._.uid);\n\n        Dom.find(window).on('resize', \n            this.onResize, passive);\n    \n        Dom.find(this.$refs.content).on('scroll', \n            this.onScroll, passive);\n    },\n\n    updated()\n    {\n        if ( this.passedHeight || this.passedWidth ) {\n            Dom.find(this.$el).addClass('n-ready');\n        }\n    },\n\n    beforeUnmount()\n    {\n        this.unbindAdaptHeight();\n        this.unbindAdaptWidth();\n\n        let passive = {\n            passive: true, uid: this._.uid\n        };\n\n        Event.unbind('NScrollbar:resize', \n            this._.uid);\n\n        Event.unbind('NResizer:moved', \n            this._.uid);\n\n        Dom.find(window).off('resize', \n            null, passive);\n\n        Dom.find(this.$el).off('scroll', \n            null, passive);\n    },\n\n    methods: {\n\n        scrollTo(x = 0, y = 0, delay = 0)\n        {\n            Any.delay(() => this.onScrollTo(x, y), delay);\n        },\n\n        onScrollTo(x = 0, y = 0)\n        {\n            this.$refs.content.scrollTop = y;\n            this.$refs.content.scrollLeft = x;\n        },\n\n        scrollIntoView(selector, delay = 0)\n        {\n            Any.delay(() => this.onScrollIntoView(selector), delay);\n        },\n\n        onScrollIntoView(selector)\n        {\n            let $el = Dom.find(this.$el).find(selector);\n\n            let scrollTop = this.$refs.content\n                .scrollTop;\n\n            let outerHeight = this.$refs.content.\n                clientHeight;\n\n            let offsetTop = $el.offsetTop(this.$el);\n\n            if ( offsetTop < scrollTop ) {\n                this.$refs.content.scrollTop = offsetTop;\n            }\n\n            if ( offsetTop + $el.height() >= scrollTop + outerHeight ) {\n                this.$refs.content.scrollTop = offsetTop - outerHeight + $el.height();\n            }\n\n            let scrollLeft = this.$refs.content\n                .scrollLeft;\n\n            let outerWidth = this.$refs.content.\n                clientWidth;\n\n            let offsetLeft = $el.offsetLeft(this.$el);\n\n            if ( offsetLeft < scrollLeft ) {\n                this.$refs.content.scrollLeft = offsetLeft;\n            }\n\n            if ( offsetLeft + $el.width() >= scrollLeft + outerWidth ) {\n                this.$refs.content.scrollLeft = offsetLeft - outerWidth + $el.width();\n            }\n        },\n\n        adaptScrollBehavior()\n        {\n            let $dom = Dom.make('div', { classList: ['n-scrollbar-test'] })\n                .appendTo(document.body).get(0);\n\n            Dom.make('div').appendTo($dom);\n\n            this.native = $dom.clientWidth === $dom.offsetWidth ||\n                $dom.clientHeight === $dom.offsetHeight;\n\n            $dom.remove();\n        },\n\n        adaptScrollHeight()\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            // let offsetHeight = this.$refs.content.clientHeight -\n            //     this.$refs.content.offsetHeight;\n            //\n            // let offsetWidth = this.$refs.content.clientWidth -\n            //     this.$refs.content.offsetWidth;\n\n            let outerHeight = this.$refs.content.\n                clientHeight|| 0;\n\n            // if ( offsetHeight === 0 && this.overflowX ) {\n            //     outerHeight -= 15;\n            // }\n\n            let innerHeight = this.$refs.content\n                .scrollHeight || 0;\n\n            // if ( offsetHeight === 0 && this.overflowX ) {\n            //     innerHeight -= 15;\n            // }\n\n            let isSameOld = outerHeight === this.outerHeight && \n                innerHeight === this.innerHeight;\n\n            if ( isSameOld ) {\n                return;\n            }\n\n            this.outerHeight = outerHeight;\n            this.innerHeight = innerHeight;\n\n            let height = (outerHeight / innerHeight) \n                * outerHeight;\n\n            let barHeight = Math.max(height, 50);\n\n            let maxHeight = Math.ceil((outerHeight / innerHeight) * \n                (innerHeight - outerHeight));\n        \n            this.heightRatio = (maxHeight - (barHeight - height) \n                - this.offsetY) / maxHeight;\n\n            Dom.find(this.$refs.vbar).css({\n                height: (this.barHeight = Math.ceil(barHeight)) + 'px'\n            });\n\n            // let hasNativeBar = offsetWidth !== 0 && this.overflowY;\n            //\n            // if ( hasNativeBar ) {\n            //     Dom.find(this.$el).addClass('has-native-vbar');\n            // }\n            //\n            // if ( hasNativeBar && this.overflowX ) {\n            //     Dom.find(this.$el).addClass('has-native-hbar');\n            // }\n\n            let hasVtrack = outerHeight && outerHeight < innerHeight;\n\n            if ( hasVtrack ) {\n                Dom.find(this.$el).addClass('has-vtrack');\n            }\n\n            if ( ! hasVtrack ) {\n                Dom.find(this.$el).removeClass('has-vtrack');\n            }\n\n            // if ( hasVtrack && ! hasNativeBar ) {\n            //     Event.fire('NScrollbar:native');\n            // }\n\n            this.adaptScrollPosition();\n        },\n\n        adaptScrollWidth()\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            // let offsetWidth = this.$refs.content.clientWidth -\n            //     this.$refs.content.offsetWidth;\n            //\n            // let offsetHeight = this.$refs.content.clientHeight -\n            //     this.$refs.content.offsetHeight;\n\n            let outerWidth = this.$refs.content.\n                clientWidth || 0;\n                \n            // if ( offsetWidth === 0 && this.overflowY ) {\n            //     outerWidth -= 15;\n            // }\n\n            let innerWidth = this.$refs.content\n                .scrollWidth || 0;\n\n            // if ( offsetWidth === 0 && this.overflowY ) {\n            //     innerWidth -= 15;\n            // }\n\n            let isSameOld = outerWidth === this.outerWidth && \n                innerWidth === this.innerWidth;\n\n            if ( isSameOld ) {\n                return;\n            }\n\n            this.outerWidth = outerWidth;\n            this.innerWidth = innerWidth;\n\n            let width = (outerWidth / innerWidth) \n                * outerWidth;\n\n            let barWidth = Math.max(width, 50);\n\n            let maxWidth = Math.ceil((outerWidth / innerWidth) * \n                (innerWidth - outerWidth));\n        \n            this.widthRatio = (maxWidth - (barWidth - width) \n                - this.offsetX) / maxWidth;\n\n            Dom.find(this.$refs.hbar).css({\n                width: (this.barWidth = Math.ceil(barWidth)) + 'px'\n            });\n\n            // let hasNativeBar = offsetHeight && this.overflowX;\n    \n            // if ( hasNativeBar ) {\n            //     Dom.find(this.$el).addClass('has-native-hbar');\n            // }\n            //\n            // if ( hasNativeBar && this.overflowY ) {\n            //     Dom.find(this.$el).addClass('has-native-vbar');\n            // }\n\n            let hasHtrack = outerWidth && outerWidth < innerWidth;\n\n            if ( hasHtrack ) {\n                Dom.find(this.$el).addClass('has-htrack');\n            }\n\n            if ( ! hasHtrack ) {\n                Dom.find(this.$el).removeClass('has-htrack');\n            }\n\n            // if ( hasHtrack && ! hasNativeBar ) {\n            //     Event.fire('NScrollbar:native');\n            // }\n\n            this.adaptScrollPosition();\n        },\n\n        adaptScrollPosition(scroll = {})\n        {\n            if ( this.native ) {\n                return;\n            }\n\n            if ( ! scroll.top ) {\n                scroll.top = this.$refs.content.scrollTop;\n            }\n\n            if ( ! scroll.left ) {\n                scroll.left = this.$refs.content.scrollLeft;\n            }\n\n            let vbarTop= Math.ceil((this.outerHeight / this.innerHeight) * \n                scroll.top * this.heightRatio) || 0;\n\n            if ( ! this.vbarTop || vbarTop !== this.vbarTop ) {\n\n                Dom.find(this.$refs.vbar).css({\n                    transform: `translateY(${vbarTop}px) translateZ(0)`\n                });\n\n                this.vbarTop = vbarTop;\n            }\n\n            let hbarLeft =  Math.ceil((this.outerWidth / this.innerWidth) * \n                scroll.left * this.widthRatio) || 0;\n\n            if ( ! this.hbarLeft || hbarLeft !== this.hbarLeft ) {\n\n                Dom.find(this.$refs.hbar).css({\n                    transform: `translateX(${hbarLeft}px) translateZ(0)`\n                });\n                \n                this.hbarLeft = hbarLeft;\n            }\n        },\n\n        adaptHeight()\n        {\n            if ( ! this.cacheChildEl ) {\n                this.cacheChildEl = Dom.find(this.$refs.content).child();\n            }\n\n            let height = this.cacheChildEl\n                .height();\n\n            if ( ! this.cacheWindwoEl ) {\n                this.cacheWindwoEl = Dom.find(this.$el);\n            }\n\n            let window = this.cacheWindwoEl\n                .innerHeight();\n\n            if ( height === this.passedHeight && window === this.windowCache ) {\n                return;\n            }\n\n            this.windowCache = window;\n\n            if ( this.overflowY ) {\n                this.adaptScrollHeight();\n            }\n\n            if ( window ) {\n                this.passedHeight = height;\n            }\n\n            let style = {\n                height: (height + 1) + 'px'\n            };\n\n            if ( ! this.relative ) {\n                return Any.delay(this.onSizechange, 100);\n            }\n\n            Dom.find(this.$refs.spacer).child().css(style);\n        },\n\n        bindAdaptHeight()\n        {\n            this.refreshHeight = setInterval(this.adaptHeight, \n                1000 / this.framerate);\n        },\n\n        unbindAdaptHeight()\n        {\n            clearInterval(this.refreshHeight);\n        },\n\n        adaptWidth()\n        {\n            if ( this.resizeTimer ) {\n                return;\n            }\n\n            let width = Dom.find(this.$refs.content)\n                .child().width();\n\n            let window = Dom.find(this.$el)\n                .innerWidth();\n\n            if ( width === this.passedWidth ) {\n                return;\n            }\n\n            if ( this.overflowX ) {\n                this.adaptScrollWidth();\n            }\n\n            if ( window ) {\n                this.passedWidth = width;\n            }\n\n            let style = {\n                width: width + 'px'\n            };\n\n            if ( this.fixture ) {\n                this.onUpdate();\n            }\n\n            if ( ! this.relative ) {\n                return Any.delay(this.onSizechange, 100);\n            }\n\n            Dom.find(this.$refs.spacer).child().css(style);\n        },\n\n        bindAdaptWidth()\n        {\n            this.refreshWidth = setInterval(this.adaptWidth, \n                1000 / this.framerate);\n        },\n\n        unbindAdaptWidth()\n        {\n            clearInterval(this.refreshWidth);\n        },\n\n        onScroll(event)\n        {\n            let scroll = {\n                top: this.$refs.content.scrollTop,\n                left: this.$refs.content.scrollLeft\n            };\n\n            let scrollUpdate = () => {\n                this.$emit('scrollupdate', scroll.top, scroll.left);\n            }\n            \n            this.$nextTick(scrollUpdate);\n            this.adaptScrollPosition(scroll);\n        },\n\n        onSizechange(event)\n        {\n            let height = Dom.find(this.$el).height();\n            let width = Dom.find(this.$el).width();\n\n            if ( ! height || ! width ) {\n                return;\n            }\n\n            if ( this.passedHeight || this.passedWidth ) {\n                Dom.find(this.$el).addClass('is-ready');\n            }\n\n            this.$emit('sizechange', height, width, this.$el);\n        },\n\n        onResize()\n        {\n            if ( ! this.fixture ) {\n                return;\n            }\n\n            Dom.find(this.$refs.content)\n                .child().css(null);\n\n            clearTimeout(this.resizeTimer);\n\n            this.resizeTimer = setTimeout(\n                this.onUpdate, 500);\n            \n            Dom.find(this.$el).fire('resized');\n        },\n\n        onUpdate()\n        {\n            if ( ! this.fixture ) {\n                return;\n            }\n\n            let $inner = Dom.find(this.$refs.content)\n                .child();\n\n            let height = $inner.actual(() => {\n                return $inner.scrollHeight();\n            });\n\n            if ( height !== this.passedHeight ) {\n                $inner.css({ height: height + 'px' });\n            }\n\n            let width = $inner.actual(() => {\n                return $inner.scrollWidth();\n            });\n\n            if ( width !== this.passedWidth ) {\n                $inner.css({ width: width + 'px' });\n            }\n\n            delete this.resizeTimer;\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onVbarMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.stopPropagation();\n\n            Dom.find(document).on(this.mousemove, \n                this.onVbarMousemove, this._.uid);\n\n            Dom.find(document).on(this.mouseup, \n                this.onVbarMouseup, this._.uid);\n\n            this.scrollTop = this.$refs.content\n                .scrollTop;\n\n            this.clientY = this.getTouchEvent(event)\n                .clientY;\n        },\n\n        onVbarMousemove(event)\n        {\n            let clientY = this.getTouchEvent(event)\n                .clientY;\n\n            let top = (this.outerHeight / this.innerHeight) * \n                this.scrollTop * this.heightRatio;\n\n            let offset = (clientY - this.clientY) + top;\n\n            let height = (this.outerHeight - \n                    this.barHeight - this.offsetY);\n\n            this.$refs.content.scrollTop = offset / height * \n                (this.innerHeight - this.outerHeight);\n        },\n\n        onVbarMouseup(event)\n        {\n            Dom.find(document).off(this.mousemove, \n                null, this._.uid);\n\n            Dom.find(document).off(this.mouseup, \n                null, this._.uid);\n        },\n\n        onHbarMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n            \n            event.stopPropagation();\n\n            Dom.find(document).on(this.mousemove, \n                this.onHbarMousemove, this._.uid);\n\n            Dom.find(document).on(this.mouseup, \n                this.onHbarMouseup, this._.uid);\n\n            this.scrollLeft = this.$refs.content\n                .scrollLeft;\n\n            this.clientX = event.clientX;\n        },\n\n        onHbarMousemove(event)\n        {\n            let top = (this.outerWidth / this.innerWidth) * \n                this.scrollLeft * this.widthRatio;\n\n            let offset = (event.clientX - this.clientX) + top;\n\n            let width = (this.outerWidth - \n                    this.barWidth - this.offsetX);\n\n            this.$refs.content.scrollLeft = offset / width * \n                (this.innerWidth - this.outerWidth);\n        },\n\n        onHbarMouseup(event)\n        {\n            Dom.find(document).off(this.mousemove, \n                null, this._.uid);\n\n            Dom.find(document).off(this.mouseup, \n                null, this._.uid);\n        }\n\n    },\n\n    render()\n    {\n        let classList = [\n            'n-scrollbar'\n        ];\n\n        if ( this.native ) {\n            classList.push('n-scrollbar--native');\n        }\n\n        if ( this.touch ) {\n            classList.push('n-scrollbar--touch');\n        }\n\n        if ( window.WIN ) {\n            classList.push('n-windows');\n        }\n\n        if ( this.overflowY ) {\n            classList.push('n-overflow-y');\n        }\n\n        if ( this.overflowX ) {\n            classList.push('n-overflow-x');\n        }\n\n        let vbarProps = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.onVbarMousedown\n        };\n\n        let hbarProps = {\n            ['on' + Str.ucfirst(this.mousedown)]: this.onHbarMousedown\n        };\n\n        return (\n            <div class={classList} {...Obj.except(this.$attrs, ['class'])}>\n                <div class=\"n-scrollbar-content\" ref=\"content\">\n                    <div class={this.wrapClass}>\n                        { this.$slots.default && this.$slots.default() }\n                    </div>\n                </div>\n                <div class=\"n-scrollbar-spacer\" ref=\"spacer\">\n                    <div class={this.wrapClass}>\n                        { /* Adapt inner height */ }\n                    </div>\n                </div>\n                <div ref=\"hbar\" class=\"n-scrollbar-h\" {...hbarProps}></div>\n                <div ref=\"vbar\" class=\"n-scrollbar-v\" {...vbarProps}></div>\n            </div>\n        );\n    }\n\n}\n","import Scrollbar from './src/scrollbar/scrollbar.next';\n\nexport default function (App) {\n    App.component(Scrollbar.name, Scrollbar);\n}","import { UUID, Num, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NLoader',\n\n    inject: {\n\n        NLoader: {\n            default: undefined\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NLoader: this\n        };\n    },\n\n    props: {\n\n        visible: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        minimum: {\n            default()\n            {\n                return 300;\n            },\n            type: [Number]\n        },\n\n        debounce: {\n            default()\n            {\n                return 300;\n            },\n            type: [Number]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempVisible: this.visible\n        };\n    },\n\n    methods: {\n\n        applyTimer()\n        {\n            this.timing = Date.now();\n\n            if ( this.visible) {\n                return this.tempVisible = this.visible;\n            }\n\n            this.startTimer();\n        },\n\n        startTimer()\n        {\n            let timing = Date.now() - this.timing;\n\n            if ( timing < this.minimum ) {\n                return this.restartTimer(timing);\n            }\n\n            this.timeout = setTimeout(() => this.tempVisible = false, \n                this.debounce);\n        },\n\n        restartTimer(timing = 0) {\n            Any.delay(this.startTimer, this.minimum - timing + 10);\n        }\n\n    },\n\n    watch: {\n\n        visible()\n        {\n            this.applyTimer();\n        }\n\n    },\n\n    mounted()\n    {\n        this.applyTimer();\n    },\n\n    render()\n    {\n        let classList = [\n            'n-loader', \n            'n-loader--' + this.size, \n            'n-loader--' + this.type\n        ];\n\n        if ( this.tempVisible ) {\n            classList.push('n-load');\n        }\n\n        return (\n            <div class={classList}>\n                { this.$slots.default && this.$slots.default() }\n            </div>\n        );\n    }\n}\n","import Loader from './src/loader/loader';\n\nexport default function (App) {\n    App.component(Loader.name, Loader);\n}\n","import { UUID, Arr, Obj, Dom, Any, Str, Locale, Event, Num } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NResizer',\n\n    inject: {\n\n        NScrollbar: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        width: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        minWidth: {\n            default()\n            {\n                return 60;\n            },\n            type: [Number]\n        },\n\n        maxWidth: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        group: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        position: {\n            default()\n            {\n                return 'right';\n            },\n            type: [String]\n        },\n\n        resizerWidth: {\n            default()\n            {\n                return 6;\n            },\n            type: [Number]\n        }\n\n    },\n\n    computed: {\n\n        touch() {\n            return !! ('ontouchstart' in window || \n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n\n    },\n\n    data()\n    {\n        return {\n            sizeFixed: false,\n            tempValue: this.modelValue,\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n    },\n\n    mounted()\n    {\n        if ( ! this.modelValue ) {\n            this.updateWidth();\n        }\n\n        if ( this.NScrollbar ) {\n            this.bindSizechange();\n        }\n\n        Event.bind('NResizer:move', \n            this.forceWidth, this._.uid);\n\n        Dom.find(window).on('resize', \n            Any.debounce(this.onResize, 500), this._.uid);\n    },\n\n    updated()\n    {\n        this.updateWidth();\n    },\n\n    unmounted()\n    {\n        if ( this.NScrollbar ) {\n            this.unbindSizechange();\n        }\n\n        Event.unbind('NResizer:move', \n            this._.uid);\n        \n        Dom.find(window).off('resize', \n            null, this._.uid);\n    },\n\n    methods: {\n\n        forceWidth(group)\n        {\n            if ( ! Arr.has(group, this.group) ) {\n                return;\n            }\n            \n            if ( ! this.tempValue || ! this.group.length ) {\n                return;\n            }\n\n            this.sizeFixed = true;\n\n            let style = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(style);\n        },\n\n        updateWidth()\n        {\n            let width = Dom.find(this.$el)\n                .width();\n\n            if ( width === this.tempValue ) {\n                return;\n            }\n\n            this.$emit('update:modelValue', \n                this.tempValue = width);\n            \n            this.updateHandle();\n        },\n\n        updateHandle()\n        {\n            let style = {};\n\n            if ( this.position === 'left' ) {\n                style.transform =`translateX(-${this.tempValue - this.resizerWidth}px)`\n            }\n    \n            if ( this.position === 'right' ) {\n                style.transform = `translateX(${this.tempValue - this.resizerWidth}px)`\n            }\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        bindSizechange()\n        {\n            Dom.find(this.NScrollbar.$el).on('resized', \n                Any.debounce(this.updateWidth, 50), this._.uid);\n        },\n\n        unbindSizechange()\n        {\n            Dom.find(this.NScrollbar.$el)\n                .off('resized', null, this._.uid);\n        },\n\n\n        onResize()\n        {\n            if ( this.NScrollbar ) {\n                return;\n            }\n\n            this.updateWidth();\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onLeftMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:move', this.group);\n            }\n\n            Dom.find(this.$el).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onLeftMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onLeftMousemove, 60), this._.uid);\n        },\n\n        onLeftMousemove(event)\n        {\n            this.clientX = (window.innerWidth - \n                this.getTouchEvent(event).clientX);\n\n            let offsetX = Dom.find(this.$el)\n                .offset('right');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('right');\n\n            let targetWidth = (this.clientX + scrollX - offsetX) -\n                (this.resizerWidth / 2);\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth,\n                    this.minWidth - this.resizerWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth,\n                    this.maxWidth - this.resizerWidth);\n            }\n\n            let style = {\n                transform: `translateX(-${targetWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        onLeftMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n\n            if ( ! this.clientX ) {\n                return;\n            }\n\n            let offsetX = Dom.find(this.$el)\n                .offset('right');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('right');\n\n            let targetWidth = this.clientX + scrollX - offsetX;\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth, this.minWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth, this.maxWidth);\n            }\n\n            this.tempValue = Math.round(targetWidth);\n\n            Dom.find(this.$el).removeClass('n-move');\n\n            let style = {\n                transform: `translateX(-${targetWidth - this.resizerWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n\n            let frameStyle = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(frameStyle);\n\n            delete this.clientX;\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:moved', this.group);\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        onRightMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:move', this.group);\n            }\n\n            Dom.find(this.$el).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onRightMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onRightMousemove, 60), this._.uid);\n        },\n\n        onRightMousemove(event)\n        {\n            this.clientX = this.getTouchEvent(event).clientX;\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('left');\n\n            let targetWidth = (this.clientX + scrollX - offsetX) -\n                (this.resizerWidth / 2);\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth,\n                    this.minWidth - this.resizerWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth,\n                    this.maxWidth - this.resizerWidth);\n            }\n\n            let style = {\n                transform: `translateX(${targetWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n        },\n\n        onRightMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n\n            if ( ! this.clientX ) {\n                return;\n            }\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let scrollX = Dom.find(this.$el)\n                .scroll('left');\n\n            let targetWidth = this.clientX + scrollX - offsetX;\n\n            if ( this.minWidth ) {\n                targetWidth = Math.max(targetWidth, this.minWidth);\n            }\n\n            if ( this.maxWidth ) {\n                targetWidth = Math.min(targetWidth, this.maxWidth);\n            }\n\n            this.tempValue = Math.round(targetWidth);\n\n            Dom.find(this.$el).removeClass('n-move');\n\n            let style = {\n                transform: `translateX(${targetWidth - this.resizerWidth}px)`\n            };\n\n            Dom.find(this.$refs.handle).css(style);\n\n            let frameStyle = {\n                width: this.tempValue + 'px', flex: '0 0 auto'\n            };\n\n            Dom.find(this.$el).css(frameStyle);\n\n            delete this.clientX;\n\n            if ( this.group.length ) {\n                Event.fire('NResizer:moved', this.group);\n            }\n\n            this.$emit('update:modelValue', this.tempValue);\n        }\n\n    },\n\n    renderHandle()\n    {\n        if ( this.disabled ) {\n            return null;\n        }\n        \n        let classList = [\n            'n-resizer__handle',\n        ];\n\n        let props = {};\n\n        if ( this.position === 'right' ) {\n            props['on' + Str.ucfirst(this.mousedown)] = this.onRightMousedown;\n        }\n\n        if ( this.position === 'left' ) {\n            props['on' + Str.ucfirst(this.mousedown)] = this.onLeftMousedown;\n        }\n\n        if ( this.resizerWidth ) {\n            props.width = this.resizerWidth + 'px';\n        }\n\n        return (\n            <div ref=\"handle\" class={classList} {...props}/>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-resizer',\n            'n-resizer--' + this.position,\n        ];\n\n        let style = {};\n\n        if ( this.width && ! this.tempValue ) {\n            style['width'] = this.width + 'px';\n        }\n\n        if ( this.width ) {\n            style['flex-basis'] = this.width + 'px';\n        }\n\n        if ( this.minWidth ) {\n            style['min-width'] = this.minWidth + 'px';\n        }\n\n        if ( this.maxWidth ) {\n            style['max-width'] = this.maxWidth + 'px';\n        }\n\n        return (\n            <div class={classList} style={style}>\n                { [this.$slots.default(), this.ctor('renderHandle')()] }\n            </div>\n        );\n    }\n\n}\n","import Resizer from './src/resizer/resizer';\n\nexport default function (App) {\n    App.component(Resizer.name, Resizer);\n}\n","import { UUID, Num, Arr, Obj, Any, Dom, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NModal',\n\n    inject: {\n\n        NScrollbar: {\n            default: undefined\n        }\n\n    },\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        update: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        selector: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        width: {\n            default()\n            {\n                return '50%';\n            },\n            type: [String]\n        },\n\n        height: {\n            default()\n            {\n                return 'auto';\n            },\n            type: [String]\n        },\n\n        title: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'center-center';\n            },\n            type: [String]\n        },\n\n        closable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        renderClose: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        },\n\n        tempValue()\n        {\n            this.startRefreshTimeout();\n        }\n\n    },\n\n    provide()\n    {\n        return {\n            NModal: this\n        };\n    },\n\n    data()\n    {\n        return {\n            target: null, tempValue: false\n        };\n    },\n\n    mounted()\n    {\n        this.target = Dom.find(this.selector || this.$el)\n            .previous().get(0);\n\n        Dom.find(document.body).on('mousedown',\n            this.eventClick, this._.uid);\n\n        Dom.find(document.body).on('keydown',\n            this.eventKeydown, this._.uid);\n\n        let showModal = () => {\n            this.tempValue = true;\n        };\n\n        if ( this.modelValue ) {\n            Any.delay(showModal, 100);\n        }\n\n        Dom.find(document.body).append(this.$el);\n    },\n\n    beforeUnmount()\n    {\n        this.$el.remove();\n    },\n\n    unmounted()\n    {\n        Dom.find(document.body).off('mousedown',\n            null, this._.uid);\n\n        Dom.find(document.body).off('keydown',\n            null, this._.uid);\n    },\n\n    methods: {\n\n        openModal(force = false, source = null)\n        {\n            if ( this.tempValue ) {\n                return;\n            }\n\n            if ( this.closable || force ) {\n                this.tempValue = true;\n            }\n\n            this.$emit('update:modelValue', true, source);\n        },\n\n        closeModal(force = false, source = null)\n        {\n            if ( ! this.tempValue ) {\n                return;\n            }\n\n            if ( ! this.update ) {\n                return this.$emit('close', source);\n            }\n\n            if ( this.closable || force ) {\n                this.tempValue = false;\n            }\n\n            this.$emit('update:modelValue', false, source);\n        },\n\n        stopRefreshTimeout()\n        {\n            clearTimeout(this.refresh);\n\n            Dom.find(this.$el).removeClass('n-ready');\n        },\n\n        startRefreshTimeout()\n        {\n            if ( ! this.tempValue ) {\n                return this.stopRefreshTimeout();\n            }\n\n            window.zIndex += 1;\n\n            Dom.find(this.$el).attr('data-modal',\n                window.zIndex);\n\n            Dom.find(this.$el).css({\n                'z-index': window.zIndex\n            });\n\n            this.queueRefreshTimeout();\n        },\n\n        queueRefreshTimeout()\n        {\n            if ( ! this.tempValue ) {\n                return this.stopRefreshTimeout();\n            }\n\n            this.refresh = setTimeout(() => {\n                Dom.find(this.$el).addClass('n-ready');\n            }, 100);\n        },\n\n        eventClick(event, el)\n        {\n            if ( this.disabled || event.which !== 1 ) {\n                return;\n            }\n\n            let result = !! Dom.find(el).closest(this.target);\n\n            if ( ! result && ! this.tempValue ) {\n                return;\n            }\n\n            if ( this.tempValue && this.closable ) {\n                result = ! Dom.find(el).closest(this.$refs.backdrop);\n            }\n\n            if ( result === this.tempValue ) {\n                return;\n            }\n\n            if ( ! result ) {\n                return this.closeModal(false, 'escape');\n            }\n\n            if ( this.listen ) {\n                this.openModal(true, 'selector');\n            }\n        },\n\n        eventKeydown(event, el)\n        {\n            if ( ! this.tempValue || event.which !== 27 ) {\n                return;\n            }\n\n            let extractIndex = (modal) => {\n                return Dom.find(modal).attr('data-modal');\n            };\n\n            let indexes = Dom.find('.n-modal:not(.n-hidden)')\n                .each(extractIndex);\n\n            let index = Dom.find(this.$el).attr('data-modal');\n\n            if ( Arr.last(indexes.sort()) !== index ) {\n                return;\n            }\n\n            this.closeModal(false, 'escape');\n        },\n\n    },\n\n    renderClose()\n    {\n        if ( ! this.renderClose || ! this.closable ) {\n            return null;\n        }\n\n        let props = {\n            onClick: () => this.closeModal(false, 'escape')\n        };\n\n        return (\n            <div class=\"n-modal__close\" {...props}>\n                <span class={nano.Icons.times}></span>\n            </div>\n        );\n    },\n\n    renderHeader()\n    {\n        if ( ! this.$slots.header && ! this.title ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-modal__header\">\n                { [this.$slots.header && this.$slots.header({ closeModal: this.closeModal }) || this.title, this.ctor('renderClose')()] }\n            </div>\n        );\n    },\n\n    renderFooter()\n    {\n        if ( ! this.$slots.footer ) {\n            return null;\n        }\n\n        return (\n            <div class=\"n-modal__footer\">\n                { this.$slots.footer({ closeModal: this.closeModal }) }\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        let bodyHtml = (\n            <NScrollbar ref=\"scrollbar\" relative={true} wrapClass=\"n-modal__wrap\">\n                { this.$slots.default && this.$slots.default({ closeModal: this.closeModal }) }\n            </NScrollbar>\n        );\n\n        if ( this.$slots.body ) {\n            bodyHtml = this.$slots.body({ closeModal: this.closeModal });\n        }\n\n        return (\n            <div class=\"n-modal__body\">\n                { bodyHtml }\n            </div>\n        );\n    },\n\n    renderFrame()\n    {\n        if ( ! this.tempValue ) {\n            return null;\n        }\n\n        let style = {\n            width: this.width, height: this.height\n        };\n\n        let innerHtml = [\n            this.ctor('renderHeader')(),\n            this.ctor('renderBody')(),\n            this.ctor('renderFooter')(),\n        ]\n\n        return (\n            <div class=\"n-modal__frame\" style={style}>\n                { this.$slots.raw ? this.$slots.raw() : innerHtml }\n            </div>\n        );\n    },\n\n    renderBackdrop()\n    {\n        return (\n            <div ref=\"backdrop\" class=\"n-modal__backdrop\"></div>\n        );\n    },\n\n    render()\n    {\n        if ( ! window.zIndex ) {\n            window.zIndex = 9000;\n        }\n\n        let classList = [\n            'n-modal',\n            'n-modal--' + this.size,\n            'n-modal--' + this.type,\n            'n-modal--' + this.position\n        ];\n\n        if ( this.tempValue ) {\n            this.queueRefreshTimeout();\n        }\n\n        if ( this.renderClose ) {\n            classList.push('n-closable');\n        }\n\n        if ( ! this.tempValue ) {\n            classList.push('n-hidden');\n        }\n\n        let innerHtml = null;\n\n        if ( this.tempValue ) {\n            innerHtml = this.ctor('renderFrame')();\n        }\n\n        return (\n            <div class={classList}>\n                { [innerHtml, this.ctor('renderBackdrop')()] }\n            </div>\n        );\n    }\n\n}\n","import Modal from './src/modal/modal';\n\nexport default function (App) {\n    App.component(Modal.name, Modal);\n}\n","import { h } from \"vue\";\nimport { Obj } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NInput',\n\n    inject: {\n\n        NForm: {\n            default: undefined\n        }\n\n    },\n\n    inheritAttrs: false,\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        iconPosition: {\n            default()\n            {\n                return 'after';\n            },\n            type: [String]\n        },\n\n        iconDisabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        nativeType: {\n            default()\n            {\n                return 'text';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false, tempValue: this.modelValue || ''\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        onIconClick(event)\n        {\n            if ( event.clientX || event.clientY ) {\n                this.$emit('icon-click', event);\n            }\n        },\n\n        onInput(event)\n        {\n            this.$emit('update:modelValue',\n                this.tempValue = event.target.value);\n        },\n\n        onKeydown(event)\n        {\n            if ( event.which !== 13 ) {\n                return;\n            }\n\n            event.preventDefault();\n\n            if ( ! this.NForm ) {\n                return;\n            }\n\n            this.NForm.onSubmit(event);\n        },\n\n        onFocus(event)\n        {\n            this.focus = true;\n        },\n\n        onBlur(event)\n        {\n            this.focus = false;\n        }\n\n    },\n\n    renderIcon()\n    {\n        if ( !this.icon ) {\n            return null;\n        }\n\n        let disabled = this.disabled ||\n            this.iconDisabled;\n\n        let props = {\n            type: 'input',\n            icon: this.icon,\n            size: this.size,\n            square: true,\n            disabled: disabled,\n        };\n\n        if ( !disabled ) {\n            props.onClick = this.onIconClick;\n        }\n\n        return (<NButton {...props} />);\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs, [\n            'class', 'style'\n        ]);\n\n        Obj.assign(props, {\n            value: this.tempValue,\n            type: this.nativeType,\n            disabled: this.disabled,\n            placeholder: this.placeholder,\n            onInput: this.onInput,\n            onFocus: this.onFocus,\n            onBlur: this.onBlur,\n            onKeydown: this.onKeydown\n        });\n\n        return h('input', props);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-input',\n            'n-input--' + this.size,\n            'n-input--' + this.type,\n        ];\n\n        if ( this.icon ) {\n            classList.push('n-input--icon');\n            classList.push('n-input--icon-' + this.iconPosition);\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        let props = Obj.only(this.$attrs, ['style'], {\n            class: this.cmer(classList)\n        });\n\n        let innerHtml = [];\n\n        if ( this.iconPosition === 'before' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        innerHtml.push(this.ctor('renderInput')());\n\n        if ( this.iconPosition === 'after' ) {\n            innerHtml.push(this.ctor('renderIcon')());\n        }\n\n        return h('div', props, innerHtml);\n    }\n\n}\n","import Input from './src/input/input';\n\nexport default function (App) {\n    App.component(Input.name, Input);\n}\n","import { Arr, Obj, Num, Now, Any, Dom, Locale } from \"@kizmann/pico-js\";\nimport { h } from \"vue\";\n\nexport default {\n\n    name: 'NInputNumber',\n\n    inheritAttrs: false,\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        clearValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        min: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return Number.MAX_VALUE;\n            },\n            type: [Number]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        clearable: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        stepSize: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        precision: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        format: {\n            default()\n            {\n                return ':count';\n            },\n            type: [String]\n        },\n\n        decimals: {\n            default()\n            {\n                return Locale.trans('.');\n            },\n            type: [String]\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = Num.float(value);\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            focus: false, tempValue: Num.float(this.modelValue),\n        }\n    },\n\n    methods: {\n\n        clear()\n        {\n            this.$emit('update:modelValue', this.clearValue);\n        },\n\n        getDisplayValue()\n        {\n            if ( Any.isNull(this.modelValue) ) {\n                return null;\n            }\n\n            let value = Num.format(this.tempValue,\n                this.decimals, ' ', this.precision);\n\n            return Locale.trans(this.format, { count: value });\n        },\n\n        nextStep()\n        {\n            if ( isNaN(this.tempValue) ) {\n                this.tempValue = 0;\n            }\n\n            let value = this.tempValue + this.stepSize;\n\n            if ( this.max < value ) {\n                return;\n            }\n\n            value = Num.float(value).toFixed(this.precision);\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n        },\n\n        onNextDown()\n        {\n            this.nextStep();\n\n            this.nextTimeout = setTimeout(() => {\n                this.nextInterval = setInterval(this.nextStep, 100);\n            }, 400);\n\n            Dom.find(document).on('mouseup', this.onNextUp,\n                this._.uid);\n        },\n\n        onNextUp()\n        {\n            clearTimeout(this.nextTimeout);\n            clearInterval(this.nextInterval);\n\n            Dom.find(document).off('mouseup', null,\n                this._.uid);\n        },\n\n        prevStep()\n        {\n            if ( isNaN(this.tempValue) ) {\n                this.tempValue = 0;\n            }\n\n            let value = this.tempValue - this.stepSize;\n\n            if ( this.min > value ) {\n                return;\n            }\n\n            value = Num.float(value).toFixed(this.precision);\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n        },\n\n        onPrevDown()\n        {\n            this.prevStep();\n\n            this.prevTimeout = setTimeout(() => {\n                this.prevInterval = setInterval(this.prevStep, 100);\n            }, 400);\n\n            Dom.find(document).on('mouseup', this.onPrevUp,\n                this._.uid);\n        },\n\n        onPrevUp()\n        {\n            clearTimeout(this.prevTimeout);\n            clearInterval(this.prevInterval);\n\n            Dom.find(document).off('mouseup', null,\n                this._.uid);\n        },\n\n        onKeydown(event)\n        {\n            if ( event.which === 13 ) {\n                this.onInput(event);\n            }\n        },\n\n        onFocus(event)\n        {\n            this.focus = true;\n        },\n\n        onBlur(event)\n        {\n            this.onInput(event);\n\n            this.focus = false;\n        },\n\n        onInput(event)\n        {\n            let value = event.target.value;\n\n            let format = this.format.replace(':count',\n                `([0-9\\\\,\\\\.\\\\-\\\\s]+)`);\n\n            let regex = new RegExp(`^${format}$`);\n\n            let match = value.match(regex);\n\n            if ( ! match ) {\n                return event.target.value = this.getDisplayValue();\n            }\n\n            value = match[1].replace(',', '.')\n                .replace(/\\s/, '');\n\n            value = Num.float(value).toFixed(this.precision);\n\n            if ( value < this.min ) {\n                value = this.min;\n            }\n\n            if ( value > this.max ) {\n                value = this.max;\n            }\n\n            this.$emit('update:modelValue',\n                this.tempValue = Num.float(value));\n\n            event.target.value = this.getDisplayValue();\n        }\n\n    },\n\n    renderPrev()\n    {\n        let disabled = this.disabled ||\n            this.tempValue <= this.min;\n\n        let props = {\n            type:       'input-number',\n            size:       this.size,\n            icon:       'fa fa-minus',\n            square:     true,\n            disabled:   disabled,\n            onMousedown:    this.onPrevDown,\n        };\n\n        return (<NButton {...props} />);\n    },\n\n    renderNext()\n    {\n        let disabled = this.disabled ||\n            this.tempValue >= this.max;\n\n        let props = {\n            type:       'input-number',\n            size:       this.size,\n            icon:       'fa fa-plus',\n            square:     true,\n            disabled:   disabled,\n            onMousedown:    this.onNextDown,\n        };\n\n        return (<NButton {...props} />);\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs,\n            ['class', 'style']);\n\n        Obj.assign(props, {\n            disabled:       this.disabled,\n            placeholder:    this.placeholder,\n            onKeydown:      this.onKeydown,\n            onFocus:         this.onFocus,\n            onBlur:         this.onBlur,\n        });\n\n        if ( this.modelValue !== null ) {\n            props.value = this.getDisplayValue();\n        }\n\n        return h('input', props);\n    },\n\n    renderClear()\n    {\n        if ( ! this.clearable || Any.isEmpty(this.tempValue) ) {\n            return null;\n        }\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.clear;\n        }\n\n        return (\n            <div class=\"n-input-number__clear\" {...props}>\n                <i class={nano.Icons.times}></i>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-input-number',\n            'n-input-number--' + this.type,\n            'n-input-number--' + this.size,\n        ];\n\n        if ( Any.isEmpty(this.modelValue) ) {\n            classList.push('n-empty');\n        }\n\n        if ( this.clearable ) {\n            classList.push('n-clearable');\n        }\n\n        if ( this.focus ) {\n            classList.push('n-focus');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderPrev')() }\n                { this.ctor('renderInput')() }\n                { this.ctor('renderClear')() }\n                { this.ctor('renderNext')() }\n            </div>\n        );\n    }\n\n}","import InputNumber from \"./src/input-number/input-number\";\n\nexport default function (App) {\n    App.component(InputNumber.name, InputNumber);\n}","import { h } from \"vue\";\nimport {Obj, Any, UUID} from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTextarea',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        autoRows: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        maxRows: {\n            default()\n            {\n                return 12;\n            },\n            type: [Number]\n        },\n\n        minRows: {\n            default()\n            {\n                return 4;\n            },\n            type: [Number]\n        },\n\n        maxLength: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        eventInput(event)\n        {\n            this.$emit('update:modelValue', \n                this.tempValue = event.target.value);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue || ''\n        };\n    },\n\n    renderInput()\n    {\n        let props = Obj.except(this.$attrs, ['class', 'style']);\n\n        Obj.assign(props, {\n            value:          this.tempValue,\n            rows:           this.minRows,\n            disabled:       this.disabled,\n            placeholder:    this.placeholder,\n            onInput:        this.eventInput,\n        });\n\n        if ( this.maxLength !== 0 ) {\n            props.maxLength = this.maxLength;\n        }\n\n        let currentRows = (this.tempValue.match(/\\n/g) || []).length + 1;\n\n        if ( this.autoRows && props.rows < currentRows ) {\n            props.rows = currentRows <= this.maxRows ? currentRows : this.maxRows;\n        }\n\n        return h('textarea', props);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-textarea',\n            'n-textarea--' + this.size,\n            'n-textarea--' + this.type,\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        let props = Obj.only(this.$attrs, ['style'], {\n            class: this.cmer(classList)\n        });\n\n        return h('div', props, [this.ctor('renderInput')()]);\n    }\n\n}\n","import Textarea from './src/textarea/textarea';\n\nexport default function (App) {\n    App.component(Textarea.name, Textarea);\n}","import { Obj, Arr, Any, Num, Dom, Event } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSlider',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        range: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        steps: {\n            default()\n            {\n                return 1;\n            }\n        },\n\n        labels: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        min: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return 100;\n            },\n            type: [Number]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            index: 0, width: null, tempValue: [null, null]\n        };\n    },\n\n    computed: {\n\n        selector()\n        {\n            return `[data-index=\"${this.index}\"]`;\n        },\n\n        fixmin()\n        {\n            return Any.isArray(this.steps) ? Arr.first(this.steps) : this.min;\n        },\n\n        fixmax()\n        {\n            return Any.isArray(this.steps) ? Arr.last(this.steps) : this.max;\n        },\n\n        minmax()\n        {\n            return this.fixmax - this.fixmin;\n        },\n\n        touch() {\n            return !! ('ontouchstart' in window ||\n                navigator.msMaxTouchPoints);\n        },\n\n        mousedown() {\n            return this.touch ? 'touchstart' :\n                'mousedown';\n        },\n\n        mousemove() {\n            return this.touch ? 'touchmove' :\n                'mousemove';\n        },\n\n        mouseup() {\n            return this.touch ? 'touchend' :\n                'mouseup';\n        }\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            this.getPseudoValue();\n        }\n\n    },\n\n    mounted()\n    {\n        Dom.find(window).on('resize',\n            Any.debounce(this.onResize, 500), this._.uid);\n\n        this.onResize();\n        this.getPseudoValue();\n    },\n\n    unmounted()\n    {\n        Dom.find(window).off('resize',\n            null, this._.uid);\n    },\n\n    methods: {\n\n        onResize()\n        {\n            this.width = Dom.find(this.$el).width();\n        },\n\n        getPseudoValue()\n        {\n            let value = this.modelValue;\n\n            if ( Any.isNull(value) ) {\n                value = this.fixmax;\n            }\n            if ( ! Any.isArray(value) ) {\n                value = [this.fixmin, value];\n            }\n\n            return this.tempValue = value;\n        },\n\n        setModelValue()\n        {\n            let value = this.tempValue;\n\n            if ( ! this.range ) {\n                value = this.tempValue[1];\n            }\n\n            this.$emit('update:modelValue', value);\n        },\n\n        getValPos(value)\n        {\n            return Num.fixed(this.width / this.minmax * (value - this.fixmin), 2) + 'px';\n        },\n\n        getValStyle(value)\n        {\n            return 'transform: translateX(' + this.getValPos(value) + ');';\n        },\n\n        getBarPos()\n        {\n            return Num.fixed(this.width / this.minmax * (this.tempValue[0] - this.fixmin), 2) + 'px';\n        },\n\n        getBarWidth()\n        {\n            return Num.fixed(this.width / this.minmax * (this.tempValue[1] - this.tempValue[0]), 2) + 'px';\n        },\n\n        getBarStyle()\n        {\n            return 'max-width: ' + this.getBarWidth() + '; ' +\n                'transform: translateX(' + this.getBarPos() + ');';\n        },\n\n        getClosestValue(width)\n        {\n            if ( Any.isNumber(this.steps) ) {\n                return Num.round(width / this.steps) * this.steps;\n            }\n\n            let range = Arr.last(this.steps) -\n                Arr.first(this.steps);\n\n            let diff = Arr.each(this.steps, (step) => {\n                return Math.abs((range / 100 * width) - step + this.fixmin);\n            });\n\n            let index = Arr.findIndex(diff, Math.min(...diff));\n\n            return this.steps[index];\n        },\n\n        getTouchEvent(event)\n        {\n            if ( ! this.touch ) {\n                return event;\n            }\n\n            return event.touches[0] || event.changedTouches[0];\n        },\n\n        onMousedown(event)\n        {\n            if ( ! Arr.has([0, 1], event.which) ) {\n                return;\n            }\n\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(this.$el).find(this.selector).addClass('n-move');\n            Dom.find(document.body).addClass('n-move');\n\n            Dom.find(document).on(this.mouseup,\n                Any.framerate(this.onMouseup, 60), this._.uid);\n\n            Dom.find(document).on(this.mousemove,\n                Any.framerate(this.onMousemove, 60), this._.uid);\n        },\n\n        onMousemove(event)\n        {\n            this.clientX = this.getTouchEvent(event).clientX;\n\n            let offsetX = Dom.find(this.$el)\n                .offset('left');\n\n            let relativeWidth = (this.clientX - offsetX) / this.width * 100;\n\n            let closestValue = this.getClosestValue(relativeWidth);\n\n            if ( closestValue < this.fixmin ) {\n                closestValue = this.fixmin;\n            }\n\n            if ( closestValue > this.fixmax ) {\n                closestValue = this.fixmax;\n            }\n\n            let stepMin = this.tempValue[0] + this.steps;\n\n            if ( this.index === 1 && closestValue < stepMin ) {\n                closestValue = stepMin;\n            }\n\n            let stepMax = this.tempValue[1] - this.steps;\n\n            if ( this.index === 0 && closestValue > stepMax ) {\n                closestValue = stepMax;\n            }\n\n            this.tempValue[this.index] = closestValue;\n        },\n\n        onMouseup(event)\n        {\n            event.preventDefault();\n            event.stopPropagation();\n\n            Dom.find(document).off(this.mouseup, null, this._.uid);\n            Dom.find(document).off(this.mousemove, null, this._.uid);\n\n            Dom.find(this.$el).find(this.selector).removeClass('n-move');\n            Dom.find(document.body).removeClass('n-move');\n\n            this.setModelValue();\n        },\n\n    },\n\n    renderHandle(value, index)\n    {\n        let handleProps = {\n            'data-value': value,\n            'data-index': index,\n            style: this.getValStyle(value)\n        };\n\n        handleProps['onMousedown'] = (event) => {\n            this.onMousedown(event, this.index = index);\n        };\n\n        let key = Arr.findIndex(this.steps, value);\n\n        return (\n            <div class=\"n-slider__handle\" {...handleProps}>\n                <span>{ Obj.get(this.labels, key, value) }</span>\n            </div>\n        );\n    },\n\n    renderHandles()\n    {\n        let values = Arr.clone(this.tempValue);\n\n        if ( ! this.range ) {\n            delete values[0];\n        }\n\n        return Arr.each(values, (value, index) => {\n            return this.ctor('renderHandle')(value, index);\n        });\n    },\n\n    renderBar()\n    {\n        let barProps = {\n            style: this.getBarStyle()\n        };\n\n        return (\n            <div class=\"n-slider__bar\">\n                <div class=\"n-slider__range\" {...barProps}></div>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-slider',\n            'n-slider--' + this.size\n        ];\n\n        if ( this.range ) {\n            classList.push('n-range');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderBar')() }\n                { this.ctor('renderHandles')() }\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Slider from './src/slider/slider';\n\nexport default function (App) {\n    App.component(Slider.name, Slider);\n}","import { Obj, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NSwitch',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        onValue: {\n            default()\n            {\n                return true;\n            }\n        },\n\n        offValue: {\n            default()\n            {\n                return false;\n            }\n        },\n\n        onType: {\n            default()\n            {\n                return 'primary';\n            }\n        },\n\n        offType: {\n            default()\n            {\n                return 'default';\n            }\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            }\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.modelValue\n        };\n    },\n\n    methods: {\n\n        eventClick()\n        {\n            let tempValue = this.onValue;\n\n            if ( this.tempValue === this.onValue ) {\n                tempValue = this.offValue;\n            }\n\n            this.$emit('update:modelValue', this.tempValue = tempValue);\n        }\n\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        }\n\n    },\n\n    renderSwitch()\n    {\n        let classList = [\n            'n-switch__switch'\n        ];\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.eventClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                <span></span>\n            </div>\n        )\n    },\n\n    renderLabel()\n    {\n        if ( ! this.$slots.default ) {\n            return null;\n        }\n\n        let classList = [\n            'n-switch__label',\n        ];\n\n        let props = {};\n\n        if ( ! this.disabled ) {\n            props.onMousedown = this.eventClick;\n        }\n\n        return (\n            <div class={classList} {...props}>\n                { this.$slots.default() }\n            </div>\n        )\n    },\n\n    render()\n    {\n        let classList = [\n            'n-switch',\n            'n-switch--' + this.size\n        ];\n\n        if ( this.tempValue === this.onValue ) {\n            classList.push('n-switch--' + this.onType);\n        }\n\n        if ( this.tempValue === this.offValue) {\n            classList.push('n-switch--' + this.offType);\n        }\n\n        if ( this.tempValue === this.onValue ) {\n            classList.push('n-on');\n        }\n\n        if ( this.tempValue === this.offValue ) {\n            classList.push('n-off');\n        }\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderSwitch')() }\n                { this.ctor('renderLabel')() }\n            </div>\n        );\n    }\n\n}\n","import Vue from \"vue\";\n\nimport Switch from './src/switch/switch';\n\nexport default function (App) {\n    App.component(Switch.name, Switch);\n}","import { Obj, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NConfirm',\n\n    props: {\n\n        visible: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        listen: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        update: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        selector: {\n            default()\n            {\n                return null;\n            },\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        width: {\n            default()\n            {\n                return 'auto';\n            },\n            type: [String]\n        },\n\n        position: {\n            default()\n            {\n                return 'center-center';\n            },\n            type: [String]\n        },\n\n        closable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        confirmText: {\n            default()\n            {\n                return Locale.trans('Confirm');\n            },\n            type: [String]\n        },\n\n        abortText: {\n            default()\n            {\n                return Locale.trans('Abort');\n            },\n            type: [String]\n        }\n\n    },\n\n    watch: {\n\n        visible()\n        {\n            if ( this.visible !== this.tempVisible ) {\n                this.tempVisible = this.visible;\n            }\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempVisible: this.visible\n        };\n    },\n\n    methods: {\n\n        abort(event)\n        {\n            this.$refs.modal.closeModal(true, 'self');\n            this.$emit('abort');\n        },\n\n        confirm(event)\n        {\n            this.$refs.modal.closeModal(true, 'self');\n            this.$emit('confirm');\n        },\n\n        eventInput(value, source)\n        {\n            if ( ! value && source !== 'self' ) {\n                this.$emit('abort');\n            }\n\n            this.$emit('update:visible', this.tempVisible = value);\n        }\n\n    },\n\n    renderIcon()\n    {\n        return (\n            <div class=\"n-confirm__icon\">\n                <span class={nano.Icons[this.type]}></span>\n            </div>\n        );\n    },\n\n    renderBody()\n    {\n        return (\n            <div class=\"n-confirm__body\">\n                { this.$slots.default && this.$slots.default() || this.trans('Are you sure?') }\n            </div>\n        );\n    },\n\n    renderAction()\n    {\n        let classList = [\n            'n-confirm__action'\n        ];\n\n        if ( window.WIN ) {\n            classList.push('n-reverse');\n        }\n\n        return (\n            <div class={classList}>\n                <NButton size={this.size} type={this.type} link={true} onClick={this.abort}>\n                    { this.abortText }\n                </NButton>\n                <NButton size={this.size} type={this.type} link={false} onClick={this.confirm}>\n                    { this.confirmText }\n                </NButton>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-confirm',\n            'n-confirm--' + this.type,\n            'n-confirm--' + this.size\n        ];\n\n        let props = {\n            type: 'default',\n            selector: this.selector,\n            listen: this.listen,\n            update: this.update,\n            width: this.width,\n            position: this.position,\n            closable: this.closable,\n            modelValue: this.tempVisible,\n        };\n\n        // Override input listener\n        props['onUpdate:modelValue'] = this.eventInput;\n\n        let innerHtml = {\n            raw: () => (\n                <div class={classList}>\n                    { this.ctor('renderIcon')() }\n                    { this.ctor('renderBody')() }\n                    { this.ctor('renderAction')() }\n                </div>\n            )\n        };\n\n        return (\n            <NModal ref=\"modal\" {...props}>\n                { innerHtml }\n            </NModal>\n        );\n    }\n\n}\n","import Confirm from './src/confirm/confirm';\n\nexport default function (App) {\n    App.component(Confirm.name, Confirm);\n}\n","import { Str, Arr, Obj, Any, UUID } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NTransfer',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        options: {\n            default()\n            {\n                return [];\n            },\n            type: [Array]\n        },\n\n        sourceLabel: {\n            default()\n            {\n                return 'Source';\n            },\n            type: [String]\n        },\n\n        targetLabel: {\n            default()\n            {\n                return 'Target';\n            },\n            type: [String]\n        },\n\n        labelProp: {\n            default()\n            {\n                return 'label';\n            },\n            type: [String]\n        },\n\n        uniqueProp: {\n            default()\n            {\n                return 'id';\n            },\n            type: [String]\n        }\n\n    },\n\n    computed: {\n\n        sourceChecked()\n        {\n            return !! this.selectedSource.length && \n                this.selectedSource.length === this.tempSource.length;\n        },\n\n        sourceIntermediate()\n        {\n            return !! this.selectedSource.length && \n                this.selectedSource.length !== this.tempSource.length;\n        },\n\n        targetChecked()\n        {\n            return !! this.selectedTarget.length && \n                this.selectedTarget.length === this.tempTarget.length;\n        },\n\n        targetIntermediate()\n        {\n            return !! this.selectedTarget.length && \n                this.selectedTarget.length !== this.tempTarget.length;\n        },\n\n        tempSource()\n        {\n            let source = Arr.filter(this.options, (item) => {\n                return ! Arr.find(this.tempValue, { [this.uniqueProp]: item[this.uniqueProp] });\n            });\n\n            if ( Any.isEmpty(this.sourceSearch) ) {\n                return Arr.clone(source);\n            }\n\n            let searchPattern = new RegExp(this.sourceSearch, 'i');\n\n            source = Arr.filter(source, (item) => {\n                return item[this.labelProp].match(searchPattern);\n            });\n\n            return Arr.clone(source);\n        },\n\n        tempTarget()\n        {\n            let target = Arr.filter(this.options, (item) => {\n                return !! Arr.find(this.tempValue, { [this.uniqueProp]: item[this.uniqueProp] });\n            });\n\n            if ( Any.isEmpty(this.targetSearch) ) {\n                return Arr.clone(target);\n            }\n\n            let searchPattern = new RegExp(this.targetSearch, 'i');\n\n            target = Arr.filter(target, (item) => {\n                return item[this.labelProp].match(searchPattern);\n            });\n\n            return Arr.clone(target);\n        }\n\n    },\n    data()\n    {\n        return {\n            uid: UUID(),\n            tempValue: this.modelValue,\n            sourceSearch: '',\n            targetSearch: '',\n            selectedSource: [],\n            selectedTarget: []\n        };\n    },\n\n    watch: {\n\n        modelValue(value)\n        {\n            if ( value !== this.tempValue ) {\n                this.tempValue = value;\n            }\n        }\n\n    },\n\n    methods: {\n\n        moveItemsTarget(options)\n        {\n            Arr.each(options, (source) => {\n\n                let item = Arr.find(this.options, {\n                    [this.uniqueProp]: source\n                });\n\n                Arr.add(this.tempValue, item, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.$emit('input', this.tempValue);\n        },\n\n        moveItemsSource(options)\n        {\n            Arr.each(options, (source) => {\n\n                Arr.remove(this.tempValue, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.$emit('input', this.tempValue);\n        },\n\n        moveRowTarget(node)\n        {\n            // Get node unique\n            let target = node.value[this.uniqueProp];\n\n            // Remove item from selected list\n            Arr.remove(this.selectedTarget, target);\n\n            this.tempValue = Arr.remove(this.tempValue, {\n                [this.uniqueProp]: target\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveRowSource(node)\n        {\n            // Get node unique\n            let source = node.value[this.uniqueProp];\n\n            // Remove item from selected list\n            Arr.remove(this.selectedSource, source);\n\n            Arr.add(this.tempValue, node.item, source, {\n                [this.uniqueProp]: source\n            });\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveToSource()\n        {\n            Arr.each(this.selectedTarget, (target) => {\n\n                Arr.remove(this.tempValue, {\n                    [this.uniqueProp]: target\n                });\n\n            });\n\n            this.selectedTarget = [];\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        moveToTarget()\n        {\n            Arr.each(this.selectedSource, (source) => {\n\n                let item = Arr.find(this.options, {\n                    [this.uniqueProp]: source\n                });\n\n                Arr.add(this.tempValue, item, {\n                    [this.uniqueProp]: source\n                });\n\n            });\n\n            this.selectedSource = [];\n\n            this.$emit('update:modelValue', this.tempValue);\n        },\n\n        updateSelectedSource(selected)\n        {\n            this.selectedSource = selected;\n        },\n\n        updateSelectedTarget(selected)\n        {\n            this.selectedTarget = selected;\n        }\n\n    },\n\n    renderSourceSelect()\n    {\n        let props = {\n            modelValue: this.sourceChecked,\n            size: this.size,\n            type: this.type,\n            intermediate: this.sourceIntermediate,\n            disabled: ! this.tempSource.length\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.$refs.source.selectAll();\n        };\n\n        return (\n            <div class=\"n-transfer__select\">\n                <NCheckbox {...props} />\n            </div>\n        );\n    },\n\n    renderSourceTitle()\n    {\n        let labelHtml = (\n            <span class=\"n-transfer__item-title\">\n                { this.sourceLabel }\n            </span>\n        );\n\n        let counterHtml = (\n            <span class=\"n-transfer__item-count\">\n                { this.tempSource.length }\n            </span>\n        );\n\n        return (\n            <div class=\"n-transfer__title\">\n                { [labelHtml, counterHtml] }\n            </div>\n        );\n    },\n\n    renderSourceHeader()\n    {\n        return (\n            <div class=\"n-transfer__header\">\n                { this.ctor('renderSourceSelect')() }\n                { this.ctor('renderSourceTitle')() }\n            </div>\n        );\n    },\n\n    renderSourceSearch()\n    {\n        let props = {\n            placeholder: this.trans('Search item'),\n            size: this.size,\n            type: this.type,\n            icon: nano.Icons.times,\n            iconDisabled: ! this.sourceSearch\n        };\n\n        props['onIconClick'] = () => {\n            this.sourceSearch = '';\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.selectedSource = [];\n        };\n\n        return (\n            <div class=\"n-transfer__search\">\n                <NInput vModel={this.sourceSearch} {...props} />\n            </div>\n        )\n    },\n\n    renderSourceBody()\n    {\n        let props = {\n            group: [this.uid + 'source'],\n            allowGroups: [this.uid + 'target'],\n            items: this.tempSource,\n            size: this.size,\n            type: this.type,\n            renderSelect: true,\n            selected: this.selectedSource,\n            safezone: () => -10,\n            disableMove: true,\n            renderNode: this.ctor('renderNode'),\n            onMove: this.moveItemsSource,\n            'onRowDblclick': this.moveRowSource,\n            'onUpdate:selected': this.updateSelectedSource\n        };\n\n        return (\n            <NDraglist ref=\"source\" class=\"n-transfer__body\" {...props} />\n        );\n    },\n\n    renderTargetSelect()\n    {\n        let props = {\n            modelValue: this.targetChecked,\n            size: this.size,\n            type: this.type,\n            intermediate: this.targetIntermediate,\n            disabled: ! this.tempTarget.length\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.$refs.target.selectAll();\n        };\n\n        return (\n            <div class=\"n-transfer__select\">\n                <NCheckbox {...props} />\n            </div>\n        );\n    },\n\n    renderTargetTitle()\n    {\n        let labelHtml = (\n            <span class=\"n-transfer__item-title\">\n                { this.targetLabel }\n            </span>\n        );\n\n        let counterHtml = (\n            <span class=\"n-transfer__item-count\">\n                { this.tempTarget.length }\n            </span>\n        );\n\n        return (\n            <div class=\"n-transfer__title\">\n                { [labelHtml, counterHtml] }\n            </div>\n        );\n    },\n\n    renderTargetHeader()\n    {\n        return (\n            <div class=\"n-transfer__header\">\n                { this.ctor('renderTargetSelect')() }\n                { this.ctor('renderTargetTitle')() }\n            </div>\n        );\n    },\n\n    renderTargetSearch()\n    {\n        let props = {\n            placeholder: this.trans('Search item'),\n            size: this.size,\n            type: this.type,\n            icon: nano.Icons.times,\n            iconDisabled: ! this.targetSearch\n        };\n\n        props['onIconClick'] = () => {\n            this.targetSearch = '';\n        };\n\n        props['onUpdate:modelValue'] = () => {\n            this.selectedTarget = [];\n        };\n\n        return (\n            <div class=\"n-transfer__search\">\n                <NInput vModel={this.targetSearch} {...props} />\n            </div>\n        )\n    },\n\n    renderTargetBody()\n    {\n        let props = {\n            group: [this.uid + 'target'],\n            allowGroups: [this.uid + 'source'],\n            items: this.tempTarget,\n            size: this.size,\n            type: this.type,\n            renderSelect: true,\n            selected: this.selectedTarget,\n            safezone: () => -1,\n            disableMove: true,\n            renderNode: this.ctor('renderNode'),\n            onMove: this.moveItemsTarget,\n            'onRowDblclick': this.moveRowTarget,\n            'onUpdate:selected': this.updateSelectedTarget\n        };\n\n        return (\n            <NDraglist ref=\"target\" class=\"n-transfer__body\" {...props} />\n        );\n    },\n\n    renderNode(props)\n    {\n        if ( this.$slots.default ) {\n            return this.$slots.default(props);\n        }\n\n        return (\n            <div class=\"n-transfer__item\">\n                { Obj.get(props.item, this.labelProp) }\n            </div>\n        );\n    },\n\n    renderMoveSource()\n    {\n        let props = {\n            disabled: ! this.selectedSource.length,\n            size: this.size,\n            type: this.type,\n            square: true, \n            icon: nano.Icons.angleRight,\n            onClick: this.moveToTarget\n        };\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderMoveTarget()\n    {\n        let props = {\n            disabled: ! this.selectedTarget.length,\n            size: this.size,\n            type: this.type,\n            square: true, \n            icon: nano.Icons.angleLeft,\n            onClick: this.moveToSource\n        };\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    render($render)\n    {\n        let classList = [\n            'n-transfer',\n            'n-transfer--' + this.size,\n            'n-transfer--' + this.type,\n        ]\n\n        return (\n            <div class={classList}>\n                <div class=\"n-transfer__panel\">\n                    { this.ctor('renderSourceHeader')() }\n                    { this.ctor('renderSourceSearch')() }\n                    { this.ctor('renderSourceBody')() }\n                </div>\n                <div class=\"n-transfer__controls\">\n                    { this.ctor('renderMoveSource')() }\n                    { this.ctor('renderMoveTarget')() }\n                </div>\n                <div class=\"n-transfer__panel\">\n                    { this.ctor('renderTargetHeader')() }\n                    { this.ctor('renderTargetSearch')() }\n                    { this.ctor('renderTargetBody')() }\n                </div>\n            </div>\n        );\n    }\n\n}","import Transfer from \"./src/transfer/transfer\";\n\nexport default function (App) {\n    App.component(Transfer.name, Transfer);\n}","import { Str, Num, Arr, Any } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NPaginator',\n\n    props: {\n\n        page: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        limit: {\n            default()\n            {\n                return 100;\n            },\n            type: [Number]\n        },\n\n        limitOptions: {\n            default()\n            {\n                return [25, 50, 100, 500, 1000, 2500];\n            },\n        },\n\n        total: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'primary';\n            },\n            type: [String]\n        },\n\n        maxPages: {\n            default()\n            {\n                return 5;\n            },\n            type: [Number]\n        },\n\n        layout: {\n            default()\n            {\n                return [\n                    'limit', 'count', 'spacer', 'goto', 'pages'\n                ]\n            },\n            type: [Array]\n        }\n\n    },\n\n    computed: {\n\n        pages()\n        {\n            return Num.ceil(this.total / this.tempLimit);\n        },\n\n        pageOptions()\n        {\n            return Arr.make(this.pages || 1);\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempPage: this.page, \n            tempLimit: this.limit,\n        }\n    },\n\n    methods: {\n\n        forcePage(page)\n        {\n            if ( page !== this.tempPage ) {\n                this.tempPage = page;\n            }\n        },\n\n        updatePaginate()\n        {\n            let paginate = {\n                page: this.tempPage, limit: this.tempLimit\n            };\n\n            this.$emit('paginate', paginate);\n        },\n\n        onPrevPage()\n        {\n            this.onPageInput(this.tempPage - 1);\n        },\n\n        onNextPage()\n        {\n            this.onPageInput(this.tempPage + 1);\n        },\n\n        onFirstPage()\n        {\n            this.onPageInput(1);\n        },\n\n        onLastPage()\n        {\n            this.onPageInput(this.pages);\n        },\n\n        onPageInput(value)\n        {\n            this.$emit('update:page', this.tempPage = value);\n\n            this.updatePaginate();\n        },\n\n        onLimitInput(value)\n        {\n            this.$emit('update:limit', this.tempLimit = value);\n\n            if ( this.pages < this.tempPage ) {\n                this.$emit('update:page', this.tempPage = 1);\n            }\n\n            this.updatePaginate();\n        },\n\n    },\n\n    watch: {\n\n        page(value)\n        {\n            if ( value !== this.tempPage ) {\n                this.tempPage = value;\n            }\n        },\n\n        limit(value)\n        {\n            if ( value !== this.tempLimit ) {\n                this.tempLimit = value;\n            }\n        }\n\n    },\n\n    renderLimit()\n    {\n        let props = {\n            modelValue:     this.tempLimit,\n            size:           this.size,\n            type:           this.type,\n            optionsValue:  '$value.value',\n            optionsLabel:  '$value.label',\n        };\n\n        props.options = Arr.each(this.limitOptions, (limit) => {\n            return {\n                value: limit, label: this.choice(':count items', limit)\n            };\n        });\n\n        props['onUpdate:modelValue'] = this.onLimitInput;\n\n        return (\n            <div class=\"n-paginator__limit\">\n                <NSelect {...props} />\n            </div>\n        );\n    },\n\n    renderCount()\n    {\n        return (\n            <div class=\"n-paginator__count\">\n                { this.choice('No items|Total :count item|Total :count items', this.total) }\n            </div>\n        );\n    },\n\n    renderSpacer()\n    {\n        return (\n            <div class=\"n-paginator__spacer\">\n                { /* Nothing :( */ }\n            </div>\n        );\n    },\n\n    renderGoto()\n    {\n        let props = {\n            modelValue:     this.tempPage,\n            size:           this.size,\n            type:           this.type,\n            undefinedText:  '?',\n            optionsValue:   '$value.value',\n            optionsLabel:   '$value.label',\n        };\n\n        props.options = Arr.reduce(this.pageOptions, (merge, index) => {\n            return Arr.push(merge, {\n                value: index, label: index\n            });\n        }, []);\n\n        props['onUpdate:modelValue'] = this.onPageInput;\n\n        return (\n            <div class=\"n-paginator__goto\">\n                <NSelect {...props} />\n            </div>\n        );\n    },\n\n    renderPrev()\n    {\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleLeft,\n            onClick: this.onPrevPage\n        };\n\n        if ( this.tempPage - 1 < 1 ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderNext()\n    {\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleRight,\n            onClick: this.onNextPage\n        };\n\n        if ( this.tempPage + 1 > this.pages ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderFirst()\n    {\n        if ( this.pages < this.maxPages ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleDoubleLeft,\n            onClick: this.onFirstPage\n        };\n\n        if ( this.tempPage - 1 < 1 ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderLast()\n    {\n        if ( this.pages < this.maxPages ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            square: true,\n            size: this.size,\n            icon: nano.Icons.angleDoubleRight,\n            onClick: this.onLastPage\n        };\n\n        if ( this.tempPage + 1 > this.pages ) {\n            props.disabled = true;\n        }\n\n        return (\n            <NButton {...props} />\n        );\n    },\n\n    renderPage(index)\n    {\n        let page = this.tempPage;\n\n        let pages = Math.abs(this.maxPages / 2);\n\n        if ( page < pages ) {\n            page = pages;\n        }\n\n        let global = Array(this.pages).length;\n\n        if ( page > global - pages ) {\n            page = global - pages;\n        }\n\n        let current = Num.int(index);\n\n        if ( current < page - pages ) {\n            return null;\n        }\n\n        if ( current > Math.max(1, page + pages) ) {\n            return null;\n        }\n\n        let props = {\n            type: this.type,\n            size: this.size,\n        };\n\n        if ( current === this.tempPage ) {\n            props.disabled = true;\n        }\n\n        props.onClick = () => {\n            this.onPageInput(current);\n        };\n\n        return (\n            <NButton {...props}>{ current }</NButton>\n        );\n    },\n\n    renderPages()\n    {\n        let pages = Arr.each(this.pageOptions, (index) => {\n            return this.ctor('renderPage')(index);\n        });\n\n        return (\n            <div class=\"n-paginator__pages\">\n                { this.ctor('renderFirst')() }\n                { this.ctor('renderPrev')() }\n                { ...pages }\n                { this.ctor('renderNext')() }\n                { this.ctor('renderLast')() }\n            </div>\n        );\n    },\n\n    renderSlot(view)\n    {\n        let renderFunction = this.ctor('render' + \n            Str.ucfirst(view));\n\n        if ( Any.isFunction(renderFunction) ) {\n            return renderFunction();\n        }\n\n        return this.$slots[view] && this.$slots[view]();\n    },\n\n    render()\n    {\n        let className = [\n            'n-paginator',\n            'n-paginator--' + this.size,\n            'n-paginator--' + this.type\n        ];\n\n        return <div class={className}>\n            {\n                Arr.each(this.layout, (view) => {\n                    return this.ctor('renderSlot')(view);\n                })\n            }\n        </div>;\n    }\n}\n","import Paginator from './src/paginator/paginator';\n\nexport default function (App) {\n    App.component(Paginator.name, Paginator);\n}","import { Arr, Obj, Any, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NFile',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return null;\n            }\n        },\n\n        multiple: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        icon: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        },\n\n        placeholder: {\n            default()\n            {\n                return '';\n            },\n            type: [String]\n        },\n\n        clearable: {\n            default()\n            {\n                return true;\n            },\n            type: [Boolean]\n        },\n\n        clearableIcon: {\n            default()\n            {\n                return nano.Icons.times;\n            },\n            type: [String]\n        },\n\n        buttonText: {\n            default()\n            {\n                return Locale.trans('Select file');\n            },\n            type: [String]\n        }\n\n    },\n\n    data()\n    {\n        return {\n            tempValue: this.value\n        };\n    },\n\n    watch: {\n\n        modelValue()\n        {\n            if ( this.modelValue !== this.tempValue ) {\n                this.tempValue = this.modelValue;\n            }\n        }\n\n    },\n\n    methods: {\n\n        openContext()\n        {\n            this.$refs.input.click();\n        },\n\n        updateFile()\n        {\n            let tempValue = [\n                ...this.$refs.input.files\n            ];\n\n            if ( ! this.multiple ) {\n                tempValue = tempValue[0];\n            }\n\n            this.$emit('update:modelValue', this.tempValue = tempValue);\n        },\n\n        clearFile()\n        {\n            this.$emit('update:modelValue', null);\n        }\n\n    },\n\n    renderInput()\n    {\n        let props = {\n            size: this.size,\n            disabled: true,\n            iconDisabled: Any.isEmpty(this.tempValue)\n        };\n\n        props['onIconClick'] = this.clearFile;\n\n        if ( ! this.multiple ) {\n            props.modelValue = Obj.get(this.tempValue, 'name');\n        }\n\n        if ( this.multiple ) {\n            props.modelValue = Locale.choice(':count File|:count Files',\n                this.tempValue.length);\n        }\n\n        if ( this.clearable ) {\n            props.icon = this.clearableIcon;\n        }\n\n        return (\n            <NInput {...props}>\n                { /* Input field for text */ }\n            </NInput>\n        );\n    },\n\n    renderButton()\n    {\n        let props = {\n            size: this.size,\n            disabled: this.disabled,\n            icon: this.icon,\n            onClick: this.openContext\n        };\n\n        return (\n            <NButton {...props}>{this.buttonText}</NButton>\n        );\n    },\n\n    renderHidden()\n    {\n        let props = {\n            'onInput': this.updateFile\n        };\n\n        return (\n            <div class=\"n-file__input\">\n                <input ref=\"input\" type=\"file\" multiple={this.multiple} {...props}></input>\n            </div>\n        );\n    },\n\n    render()\n    {\n        let classList = [\n            'n-file'\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                { this.ctor('renderInput')() }\n                { this.ctor('renderButton')() }\n                { this.ctor('renderHidden')() }\n            </div>\n        )\n    }\n\n}\n","import File from './src/file/file';\n\nexport default function (App) {\n    App.component(File.name, File);\n}\n\n","import { Num, Arr, Locale } from \"@kizmann/pico-js\";\n\nexport default {\n\n    name: 'NRating',\n\n    props: {\n\n        modelValue: {\n            default()\n            {\n                return 0;\n            },\n            type: [Number]\n        },\n\n        steps: {\n            default()\n            {\n                return 0.5;\n            },\n            type: [Number]\n        },\n\n        fixed: {\n            default()\n            {\n                return 1;\n            },\n            type: [Number]\n        },\n\n        max: {\n            default()\n            {\n                return 5;\n            },\n            type: [Number]\n        },\n\n        size: {\n            default()\n            {\n                return 'md';\n            },\n            type: [String]\n        },\n\n        choice: {\n            default()\n            {\n                return ':count';\n            },\n            type: [String]\n        },\n\n        type: {\n            default()\n            {\n                return 'default';\n            },\n            type: [String]\n        },\n\n        disabled: {\n            default()\n            {\n                return false;\n            },\n            type: [Boolean]\n        }\n\n    },\n\n    computed: {\n\n        virtualValue()\n        {\n            return Num.fixed(1 / this.max * this.modelValue * 5, this.fixed);\n        },\n\n    },\n\n    renderStars()\n    {\n        let stars = [\n            1, 2, 3, 4, 5\n        ];\n\n        return Arr.each (stars, (rate) => {\n\n            let className = 'is-null';\n\n            if ( this.virtualValue >= rate - 0.5 ) {\n                className = 'is-half';\n            }\n\n            if ( this.virtualValue >= rate ) {\n                className = 'is-full';\n            }\n\n            return (\n                <span class={className}></span>\n            );\n        });\n    },\n\n    renderValue()\n    {\n        let vars = {\n            value: Num.format(this.modelValue, '.', '', this.fixed)\n        };\n\n        if ( this.$slots.default ) {\n            return this.$slots.default(vars);\n        }\n\n        return Locale.choice(this.choice, this.modelValue, vars);\n    },\n\n    render()\n    {\n        let classList = [\n            'n-rating',\n            'n-rating--' + this.size,\n            'n-rating--' + this.type\n        ];\n\n        if ( this.disabled ) {\n            classList.push('n-disabled');\n        }\n\n        return (\n            <div class={classList}>\n                <div class=\"n-rating__stars\">\n                    {this.ctor('renderStars')()}\n                </div>\n                <div class=\"n-rating__value\">\n                    {this.ctor('renderValue')()}\n                </div>\n            </div>\n        );\n    }\n\n}\n","import Rating from './src/rating/rating';\n\nexport default function (App) {\n    App.component(Rating.name, Rating);\n}\n"],"sourceRoot":""}
         |