@sme.up/ketchup 11.0.0-SNAPSHOT-20241118162146 → 11.0.0-SNAPSHOT-20241118171002

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.
@@ -0,0 +1 @@
1
+ {"version":3,"names":["KupAutocompleteProps","KupAutocompleteDisplayMode","getIdOfItemByDisplayMode","item","mode","separator","ItemsDisplayMode","CODE","id","DESCRIPTION","value","DESCRIPTION_AND_CODE","consistencyCheck","idIn","listData","listEl","selectMode","displayMode","e","validList","displayedValue","selected","detail","getItemByDisplayMode","data","getFirstItemSelected","trueValue","listNode","find","x","exists","node","i","length","getItemById","setSelected","found","toString","toLowerCase","kupAutocompleteCss","KupAutocompleteStyle0","KupAutocomplete","_KupAutocomplete_doConsistencyCheck","set","this","_KupAutocomplete_elStyle","undefined","_KupAutocomplete_listEl","_KupAutocomplete_kupManager","kupManagerInstance","_KupAutocomplete_textfieldWrapper","_KupAutocomplete_textfieldEl","_KupAutocomplete_clickCb","_KupAutocomplete_inputTimeout","KupComponentSizing","SMALL","onKupBlur","kupBlur","emit","comp","rootElement","inputValue","__classPrivateFieldGet","onKupChange","__classPrivateFieldSet","ret","_KupAutocomplete_instances","_KupAutocomplete_consistencyCheck","call","allowInconsistentValues","kupChange","onKupClick","kupClick","onKupFocus","kupFocus","onKupInput","_KupAutocomplete_openList","minimumChars","kupInput","onKupIconClick","classList","contains","_KupAutocomplete_closeList","showDropDownIcon","kupIconClick","open","onKupItemClick","focus","kupItemClick","listenKeydown","_KupAutocomplete_isListOpened","key","preventDefault","stopPropagation","focusNext","focusPrevious","select","then","getProps","descriptions","getValue","refresh","forceUpdate","setFocus","setProps","props","setValue","componentWillLoad","debug","logLoad","theme","register","initialValue","componentDidLoad","componentWillRender","logRender","componentDidRender","root","shadowRoot","f","querySelector","FTextFieldMDC","render","alert","danger","disabled","error","icon","info","isClearable","label","leadingLabel","readOnly","sizing","success","warning","fullHeight","fullWidth","h","Host","class","style","setKupStyle","componentWrapperId","FTextField","Object","assign","KupThemeIconValues","DROPDOWN","trailingIcon","onBlur","onClick","onChange","target","onFocus","onInput","window","clearTimeout","setTimeout","inputDelay","onIconClick","_KupAutocomplete_prepList","disconnectedCallback","dynamicPosition","unregister","remove","forceOpen","hasError","_a","trim","hasAlert","_b","topOffset","add","menuVisible","elStyle","height","minWidth","clientWidth","isRegistered","changeAnchor","KupDynamicPositionPlacement","AUTO","start","cb","el","addClickCallback","stop","removeClickCallback","serverHandledFilter","filter","isMenu","ref","KupBadgeProps","BadgeType","kupBadgeCss","KupBadgeStyle0","KupBadge","kupManager","INFO","imageEl","text","imageData","sizeX","sizeY","color","KupThemeColorValues","TEXT_ON_PRIMARY","FImage","type","KupButtonProps","kupButtonCss","KupButtonStyle0","KupButton","FButtonAlign","CENTER","FButtonStyling","RAISED","MEDIUM","checked","keyShortcut","keysBinding","bind","buttonType","contentAlign","iconOff","placeholderIcon","large","blackMode","neutral","pulsating","secondary","shaped","slim","styling","showSpinner","title","toggable","logMessage","KupDebugCategory","WARNING","FButton","KupButtonListProps","kupButtonListCss","KupButtonListStyle0","KupButtonList","index","subIndex","obj","getObjForEvent","onDropDownItemClick","checkDataset","newData","columns","row","toNode","renderButton","prepareDataFromTreeNode","wrapperClass","className","renderDropdownButton","dropdownOnly","getKupListDataForChildren","children","showIcons","contentalign","customStyle","ris","tn","push","indexInt","Number","subIndexInt","renderButtons","b","buttons","nrOfColumns","hostStyle","classObj","showSelection","dom","document","documentElement","create1","component","rows","cell","column","density","FCellPadding","NONE","renderKup","cells","name","FCell","layoutNumber","create2","cssClass","create3","create4","image","isImage","ketchup","objects","isIcon","shape","toUpperCase","FCellShapes","IMAGE","resource","imagePropsCells","imageProps","valuePropsCells","valueProps","create5","create6","create7","create8","KupDatePickerProps","SourceEvent","prepareCalendar","kupData","options","opts","resetStatus","k","Date","firstDayIndex","showPreviousNextMonthDays","months","dates","getMonthsAsString","curYear","getYear","curMonth","getMonth","yearRange","getInitEndYear","initYear","endYear","changeViewButtonLabel","getView","DATE","MONTH","YEAR","prevButtonProp","prevPage","prevButtonComp","nextButtonProp","nextPage","nextButtonComp","changeViewButtonProp","FLAT","changeView","goToTodayDateButton","language","translate","KupLanguageGeneric","TODAY","setDateToday","createCalendar","isNaN","getTime","day","getDate","month","year","getFullYear","getDay","setDay","setMonth","setYear","getFirstDayIndex","isShowPreviousNextMonthDays","calendarView","setView","createDaysCalendar","createMonthsCalendar","createYearsCalendar","days","getDaysOfWeekAsString","selectedDate","selectedDay","selectedMonth","selectedYear","thead","tbody","firstMonthDay","lastMonthDay","today","lastPreviousMonthDate","finish","currentDayIndex","firstMonthDayIndex","daysForRowAdded","substractDays","unshift","dayCount","currentRowLastItem","dayClass","dataIndex","fillString","itemClass","onCalendarItemClick","nextMonthDay","KupDateTimeFormatOptionsMonth","SHORT","monthCount","monthClass","onCalendarMonthYearItemClick","yearCount","yearClass","mm","yy","d","isIsoDate","toISOString","prepareClock","manageSeconds","hoursActive","minutesActive","secondsActive","prepTimeArea","isManageSeconds","getHoursActive","getMinutesActive","getSecondsActive","setElement","elem","getElement","elemId","getElementById","isRelatedTargetInThisComponent","createClock","onKupClockItemClick","setClockValueSelected","newValue","relatedTarget","KupCardBuiltInClockElements","CLOCK","idConc","indexOf","selectedTime","toDate","KupDatesFormats","ISO_TIME","ISO_TIME_WITHOUT_SECONDS","hh","getHours","getMinutes","ss","getSeconds","seconds","time","HOURS","KupCardCSSClasses","VISIBLE","setClockViewActive","switchView","HOURSCIRCLE","innerHTML","MINUTES","MINUTESCIRCLE","SECONDSCIRCLE","buildClock","SECONDS","confirmButtonProp","setTimeFromClock","hoursAct","minutesAct","secondsAct","elId","elCircleId","num","radius","offsetX","offsetY","selectedValue","y","divsArray","n","Math","cos","PI","sin","dataValue","calc","elClass","div","setClockTime","hoursEl","minutesEl","secondsEl","innerText","hoursCircleEl","minutesCircleEl","secondsCircleEl","getAttribute","premadeFormulas","KupLanguageTotals","AVERAGE","DIFFERENCE","PRODUCT","SUM","prepareColumnDropMenu","chipData","list","combobox","button","chipSet","visible","isNumber","numericalColumnsExist","enableMerge","enableMove","prepareList","enableFormula","prepareCombobox","applyFormula","CALCULATE","OUTLINED","typeColumn","MERGE","MOVE","listClick","comboListData","numeric","receivingColumn","starterColumn","KupLanguageColumn","NO_FORMULA","comboData","selectable","helper","NON_NUMERICAL_IN_TABLE","NON_NUMERICAL","FORMULA","outlined","getCombobox","chip","res","currentFormula","mergeCb","moveCb","async","valueString","parts","split","hasDescription","description","includes","new","KupDataNewColumnTypes","MATH","newColumn","operation","formulaCb","result","String","prepareMessageBox","buttonsExist","cancelCb","confirmCb","ABORT","CONFIRM","prepareNumeric","localeValue","decimals","negative","getOptions","math","numbers","toLocaleString","clearButtonProp","clearValue","saveButtonProp","saveValue","decChar","getDecimalChar","colSpan","setSign","strVal","startsWith","maxLength","replace","maxIntegers","maxDecimals","substring","locale","inputArea","clearButton","submitButton","sttButton","passwordField","prepareOpenAIInterface","clear","disableInteractivity","status","submitCb","eventHandler","authCb","authJsx","inputType","helperEnabled","connectingJsx","active","layout","dimensions","errorJsx","getTextFormatted","m","matches","funs","lastIndex","match","slice","fun","endsWith","openAI","onFunClick","readyJsx","genChat","nodes","messages","forEach","navigator","clipboard","writeText","sttCb","textArea","ICON","slot","AUTOSCROLL","state","BUILT_IN_CARD","KupColumnMenuIds","compList","compArray","compType","dialogHeader","KupCardIds","DRAG_HANDLE","HEADER_BAR","DIALOG_TITLE","TITLE","DIALOG_CLOSE","collapsibleBar","EXPAND_ACTION","layoutSpecificEvents","KupCardSubEvents","BUTTON_CLICK","collapsibleCard","COLLAPSIBLE_CARD","EXPANDED","oldSizeY","TABBAR_CLICK","VIEW_SELECTOR","views","querySelectorAll","CARD_VIEW","view","VIEW_PREFIX","CHIP_ICONCLICK","COLUMNS_LIST","apply","BUTTON_APPLY","TREE_NODESELECTED","EXTRA_COLUMNS","treeNode","objKey","t","p","expandable","dataset","existingChip","splice","NEXT_ROW","PREVIOUS_ROW","chipArray","colorArray","textIndex","textArray","CSSVariables","PRIMARY","COLLAPSIBLE_WRAPPER","COLLAPSIBLE_ELEMENT","imageArray","divs","isEven","buttonArray","comboboxArray","slots","Array","prototype","textfieldArray","DIALOG_UNRESIZABLE","datatableArray","prevButton","KupLanguageRow","PREVIOUS","nextButton","NEXT","listArray","table","visibleColumnIndex","getVisibleColumn","currColumn","prevColumn","prevPrevColumn","parseInt","nextColumn","nextNextColumn","decimalSeparator","create9","lineBg","componentBg","BACKGROUND","textFg","TEXT","mainText","subText","JSON","parse","stringify","reverse","map","create10","create11","HAS_ACTIONS","colorIndex","imageIndex","progressbarArray","chartArray","onMouseEnter","currentTarget","scrollWidth","maxWidth","onMouseLeave","create12","checkboxArray","datepickerArray","timepickerArray","buttonsIds","BUTTON_REMOVE","BUTTON_GROUP","BUTTON_ADD_COLUMNS","HAS_CONTENT","create13","create14","autocompleteArray","objectArray","switchArray","tabbarArray","treeArray","tabsValues","viewIndex","visibleView","tab","switchesIds","switchEl","textfieldsIds","textfield","BUTTON_OPEN_IN_NEW","BUTTON_SEARCH","CLICKABLE_LINK","FILTERS","TEXTFIELD_FILTER","TEXTFIELD_FROM","TEXTFIELD_TO","COLUMNS","TEXTFIELD_FORMULA","FChipType","INPUT","globalFilter","SETTINGS","SWITCH_KEY","create15","sectionOneArray","sectionTwoArray","sectionTwoDetails","labels","values","genericButtons","isReservedID","createDropdown","OPTIONS","SHOW_ROW_OPTIONS","create16","create17","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_i","Symbol","iterator","_s","next","done","err","isArray","needle","padStart","len","pad","str","colorNames","tqw","q","qmrn","zr","bg","bsq","bck","nch","bvt","brwn","brw","ctb","hrt","chcT","cr","rnw","crns","crms","cn","Db","Dcn","Dgnr","Dgr","Dgrn","Dkhk","Dmgn","Dvgr","Drng","Drch","Dr","Dsmn","Dsgr","DsTb","DsTg","Dtrq","Dvt","ppnk","pskb","mgr","grb","rbrc","rwht","stg","chs","gnsb","st","g","gnr","gr","grn","grnw","hnw","htpn","nnr","ng","vr","khk","vnr","nrb","wngr","mnch","Lb","Lcr","Lcn","Lgnr","Lgr","Lgrn","Lpnk","Lsmn","Lsgr","Lskb","LsTg","Lstb","Lw","mgrn","nn","mgnt","mrn","mqm","mmb","mmrc","mmpr","msg","mmsT","mtr","mmvt","mnLb","ntc","mstr","mccs","vjw","nv","c","v","vrb","rng","rngr","rch","pgnr","pgrn","ptrq","pvtr","ppwh","pchp","pr","pnk","pm","pwrb","prp","cc","r","sbr","rb","sbrw","smn","nbr","sgrn","ssh","snn","svr","skb","sTb","sTgr","snw","stb","thst","tmT","trqs","vt","whT","wht","hts","w","wgrn","printNum","decs","arguments","toFixed","Color","a","that","parseString","input","_input$match$map","_input$match$map2","s","l","hsla","_input$match$map3","_input$match$map4","_r","_g","_a2","rgba","hexToRgb","nameToRgb","printRGB","alpha","rgb","vals","printHSL","mults","suff","hsl","printHex","hex","get","_rgba","_hsla","Error","hslToRgb","rgbToHsl","round","join","hash","_ref","_ref2","max","min","_ref3","_ref4","hue2rgb","EventBucket","_events","handler","addEventListener","isMatch","_doRemove","destroy","removeEventListener","parseHTML","htmlString","createElement","firstElementChild","dragTrack","eventBucket","area","callback","dragging","clamp","val","onMove","starting","bounds","getBoundingClientRect","width","clientX","clientY","relX","left","relY","top","onMouse","which","onTouch","touches","BG_TRANSP","HUES","EVENT_KEY","EVENT_CLICK_OUTSIDE","EVENT_TAB_MOVE","$","selector","context","stopEvent","onKey","bucket","keys","Picker","settings","popup","editor","editorFormat","cancelButton","defaultColor","onDone","onOpen","onClose","setOptions","_this","transfer","source","skipKeys","HTMLElement","parent","_popupInited","col","colour","_setColor","openProxy","openHandler","show","pointerEvents","toFocus","_domEdit","domElement","closeHandler","event","doHide","knownTime","__containedEvent","timeStamp","hide","movePopup","setColor","silent","flags","ex","failSilently","_setHSLA","setColour","toggled","_toggleDOM","_setPosition","html","template","wrapper","_domH","_domSL","_domA","_domSample","_domOkay","_domCancel","_ifPopup","_updateUI","_bindEvents","removeChild","_this2","events","addEvent","editInput","fromEditor","selectionStart","selectionEnd","popupCloseProxy","timeKeeper","onDoneProxy","elm","parentNode","appendChild","getComputedStyle","position","cssHue","cssHSL","hslString","cssHSLA","hslaString","uiH","uiSL","uiA","thumbH","thumbSL","thumbA","posX","child","posY","backgroundColor","opaque","transp","background","format","actionIf","actionElse","toVisible","displayStyle","toggle","display","textContent","StyleElement","kupCardCss","KupCardStyle0","KupCard","cardEvent","onKupEvent","scalingActive","componentWrapper","colorPicker","firstColorPickerChange","KupCardFamily","STANDARD","onKupClose","kupClose","kupEvent","KupCardProps","resizeCallback","resizeTimeout","layoutManager","setEvents","dialogClose","onclick","links","link","collapsible","card","clientHeight","COLLAPSIBLE_ACTIVE","getLayout","family","layoutFamily","method","BOX","boxLayouts","BUILT_IN","builtInLayouts","COLLAPSIBLE","collapsibleLayouts","DIALOG","dialogLayouts","FREE","freeLayouts","SCALABLE","scalableLayouts","standardLayouts","LAYOUT_NYI","dialog","dragHandle","unresizable","interact","dialogify","builtIn","builtinLayout","colorPickerOptions","changeCb","creationCb","dynColors","setProperty","colorContrast","autoscroll","scrollTop","scrollHeight","scalable","registerListeners","cardHeight","cardWidthLow","cardWidthHigh","multiplierStep","tooManyAttempts","multiplier","redrawCount","redraw","roundMultiplier","parseFloat","opacity","transition","rippleEl","MDCRipple","attachTo","resize","observe","kupReady","activeElement","tagName","unobserve","KupChartProps","ChartAspect","ChartType","getSerieDecode","serie","series","serieObj","convertColumns","axis","axisColumn","getColumnByName","code","convertRows","showMarks","kupDates","KupDates","kupObjects","KupObjects","currentRow","addMark","formatToNumber","isDate","parseDate","isTime","datetime","normalize","isTimestamp","ISO_DATE_TIME","kupChartCss","KupChartStyle0","KupChart","themeColors","themeText","Hbar","identifyRows","identify","offlineMode","createGoogleChartOptions","gChart","draw","gChartView","loadOfflineChart","loadGoogleChart","google","charts","setOnLoadCallback","createChart","createGoogleChart","isComboChart","visualization","ComboChart","chartContainer","types","Area","AreaChart","Bubble","BubbleChart","Cal","Calendar","Candlestick","CandlestickChart","Geo","GeoChart","BarChart","Line","LineChart","Pie","PieChart","Sankey","Scatter","ScatterChart","ColumnChart","getMainChartType","Unk","is3D","D3","asp","trendlines","colors","legend","textStyle","stacked","Vbar","isStacked","chartTitle","titleTextStyle","size","fontSize","serieType","idx","vAxes","hAxes","targetAxisIndex","vAxe","vAxis","hAxe","hAxis","slices","tableColumns","tableRows","dataTableColumns","role","gChartDataTable","arrayToDataTable","DataView","sorting","setRows","getSortedRows","addListener","onChartSelect","selectedItem","getSelection","date","rowIndex","getTableRowIndex","rowindex","colIndex","originalRowIndex","originalColIndex","getTableColumnIndex","getColumnProperty","colindex","kupChartClick","valueAsArray","sparkline","complianceCheck","ints","element","fetchThemeColors","cssVars","randomColor","version","cloneNode","console","componentWillUpdate","clearChart","componentDidUpdate","minHeight","KupCheckboxProps","kupCheckboxCss","KupCheckboxStyle0","KupCheckbox","indeterminate","FCheckbox","KupChipProps","kupChipCss","KupChipStyle0","KupChip","FChipSize","FChipStyling","isChoice","CHOICE","isFilter","FILTER","setProperties","stringifiedValues","_KupChip_instances","_KupChip_stringifiedValues","firstCheckedFound","j","message","displayId","onExpansionClick","primary","isExpanded","ctrlKey","_KupChip_changeHandler","FChip","KupColorPickerProps","kupColorPickerCss","KupColorPickerStyle0","KupColorPicker","clickCb","textfieldEl","picker","isPickerOpened","setHexValue","colorCheck","hexColor","createCard","cardData","openPicker","parentElement","closePicker","prepTextField","textfieldProps","INVALID_COLOR","widget","swatchOnly","KupComboboxProps","kupComboboxCss","KupComboboxStyle0","KupCombobox","_KupCombobox_kupManager","_KupCombobox_elStyle","_KupCombobox_listEl","_KupCombobox_textfieldWrapper","_KupCombobox_textfieldEl","_KupCombobox_clickCb","_KupCombobox_instances","_KupCombobox_consistencyCheck","isSelect","_KupCombobox_closeList","_KupCombobox_openList","initialValueChange","_KupCombobox_isListOpened","_KupCombobox_prepList","KupDataTableState","constructor","filters","expandGroups","groupLabelDisplay","GroupLabelDisplayMode","BOTH","enableSortableColumns","enableExtraColumns","forceOneLine","globalFilterValue","groups","headerIsPersistent","lazyLoadRows","loadMoreLimit","selection","SelectionMode","SINGLE","rowsPerPage","showFilters","showGroups","showHeader","showLoadMore","sortEnabled","sort","sortableColumnsMutateData","pageSelected","dragEnabled","dropEnabled","showFooter","load","toDebugString","KupColumnMenu","filtersColumnMenuInstance","FiltersColumnMenu","filtersRowsInstance","FiltersRows","resetTextualFilters","close","reposition","prepData","currentData","prepButton","checkbox","prepCheckbox","prepChip","datepicker","prepIntervalDatePicker","object","objs","switch","prepSwitch","tabbar","prepTabBar","prepTextfield","timepicker","prepIntervalTimePicker","isTree","columnName","getGroupByName","KupLanguageGrouping","DISABLE","ENABLE","removableColumns","HIDE","canObjHaveExtraColumns","canObjsHaveExtraColumns","ADD","APPLY","isStringObject","isCheckbox","checkBoxesFilter","getCheckBoxFilterValues","columnValues","getColumnValues","CHECKBOX_GLOBAL","KupLanguageCheckbox","ALL","getValueForDisplay2","CHECKED","UNCHECKED","Filters","valuesArrayContainsValue","chipProps","childColumn","ERROR","dataSet","initialData","isEmptyKupObj","isKey","KEY","isGroupActive","SWITCH_GROUP","GROUPS","isColumnFiltrableByInterval","concat","prepIntervalTextfield","filterInitialValue","getTextFilterValue","getValueForDisplay","KupLanguageSearch","SEARCH","enableColumnsFormula","interval","getIntervalTextFieldFilterValues","initialValueFrom","FilterInterval","FROM","initialValueTo","TO","intervalIndex","isInterval","helperWhenFocused","isTimeWithSeconds","suffixFrom","suffixTo","suffix","eventHandlers","compEvent","compID","subcomp","dataStorage","compEventType","isClickEvent","toggleGroup","closeColumnMenu","hideColumn","checkboxChange","setKey","saveTextualFilters","intervalChange","textfieldChange","textField","columnFilterTimeout","resetCurrentPage","newFilter","normalizeValue","newFilters","setTextFieldFilterValue","needNormalize","setIntervalTextFieldFilterValue","filterValueItem","addCheckboxFilter","removeCheckboxFilter","group","switchOn","kupDataTableCss","KupDataTableStyle0","KupDataTable","_KupDataTable_initialized","_KupDataTable_rows","_KupDataTable_rowsLength","_KupDataTable_paginatedRows","_KupDataTable_paginatedRowsLength","_KupDataTable_footer","_KupDataTable_kupManager","_KupDataTable_renderedRows","_KupDataTable_loadMoreEventCounter","_KupDataTable_loadMoreEventPreviousQuantity","_KupDataTable_theadRef","_KupDataTable_tableRef","_KupDataTable_originalData","_KupDataTable_originalDataLoaded","_KupDataTable_originalDataLoadedMaxId","_KupDataTable_tableAreaRef","_KupDataTable_stickyTheadRef","_KupDataTable_lastPointerDetails","_KupDataTable_customizeTopButtonRef","_KupDataTable_customizeTopPanelRef","_KupDataTable_sizedColumns","_KupDataTable_intObserver","_KupDataTable_navBarHeight","_KupDataTable_theadIntersecting","_KupDataTable_tableIntersecting","_KupDataTable_isSafariBrowser","_KupDataTable_isRestoringState","_KupDataTable_globalFilterTimeout","_KupDataTable_totalMenuCoords","_KupDataTable_clickTimeout","_KupDataTable_thRefs","_KupDataTable_rowsRefs","_KupDataTable_oldWidth","_KupDataTable_hold","_KupDataTable_interactableDrag","_KupDataTable_interactableDrop","_KupDataTable_interactableResize","_KupDataTable_interactableTouch","_KupDataTable_dropareaRef","_KupDataTable_removeDropareaRef","_KupDataTable_groupsDropareaRef","_KupDataTable_clickCb","_KupDataTable_clickCbCustomPanel","_KupDataTable_clickCbDropCard","_KupDataTable_resizeTimeout","_KupDataTable_columnMenuInstance","_KupDataTable_filtersColumnMenuInstance","_KupDataTable_filtersRowsInstance","_KupDataTable_detailCard","_KupDataTable_insertCard","_KupDataTable_actionsCard","_KupDataTable_confirmDeleteCard","_KupDataTable_confirmDeleteDialog","_KupDataTable_columnMenuCard","_KupDataTable_columnDropCard","_KupDataTable_columnDropCardAnchor","_KupDataTable_dropDownActionCardAnchor","_KupDataTable_insertCount","_KupDataTable_BUTTON_CANCEL_ID","_KupDataTable_BUTTON_SUBMIT_ID","_KupDataTable_FIELDS_FORM_ID","_KupDataTable_MESSAGE_ID","_KupDataTable_MESSAGE_WRAPPER_ID","_KupDataTable_INSERT_PREFIX","_KupDataTable_stickyHeaderPosition","_KupDataTable_instances","_KupDataTable_updateStickyHeaderSize","_KupDataTable_handleUpdateClick","command","kupUpdate","originalData","updatedData","getDiffData","_KupDataTable_FONTSIZE_CODES","_KupDataTable_FONTSIZE_DECODES","_KupDataTable_FONTSIZE_ICONS","_KupDataTable_DENSITY_DECODES","_KupDataTable_DENSITY_ICONS","_KupDataTable_GRID_CODES","_KupDataTable_GRID_DECODES","_KupDataTable_GRID_ICONS","DENSE","LoadMoreMode","PROGRESSIVE_THRESHOLD","PaginatorPos","TOP","ShowGrid","ROW","initWithPersistedState","store","stateId","getState","totals","persistState","somethingChanged","deepEqual","currentRowsPerPage","currentPage","selectRowsById","selectedRows","reduce","accumulator","currentIndex","prefix","rowsPerPageHandler","expandGroupsHandler","recalculateRows","groupState","_KupDataTable_forceGroupExpansion","filtersChanged","_KupDataTable_initRows","identifyAndInitRows","getRows","_KupDataTable_resetSelectedRows","decorateAndInitForUpdTable","decorateDataTable","updatableData","setup","operations","delete","MULTIPLE_CHECKBOX","_c","recalculateRowsAndUndoSelections","controlFixedRowsColumns","warnMessage","fixedColumns","fixedColumnsR","fixedRows","warn","recalculateData","_KupDataTable_calculateData","columnMenuAnchor","kupDataTableColumnMenu","collapseAll","deleteRows","ids","deletedRows","newRows","currentRows","clonedFrom","closeInsertCard","closeConfirmDeleteCard","getCards","messageWrapper","form","insertNewRow","expandAll","KupDataTableProps","getSelectedRows","selRows","kupColumnRemove","setGroupExpansionByDepth","modifier","toStream","streamlined","recursive","handleChildren","expand","maxDepth","depth","hasOwnProperty","shouldExpand","expanded","paginated","paginatedStream","getGroupDepth","firstGroup","traverseGroup","currentDepth","_KupDataTable_adjustGroupState","openColumnMenu","setAttribute","getVisibleColumns","recalcRows","lazyLoadCells","setCellValue","rowId","_KupDataTable_getRow","setSelectedRows","rowsIdentifiers","emitEvent","kupRowSelected","clickedColumn","clickedRow","toolbar","emptyDataLabel","EMPTY_DATA","_KupDataTable_setObserver","CSS","supports","safari","fs","showCustomization","_KupDataTable_customizePanelPosition","_KupDataTable_totalMenuPosition","_KupDataTable_checkScrollOnHover","_KupDataTable_didRenderObservers","_KupDataTable_didRenderInteractables","_KupDataTable_hideShowColumnDropArea","tableHeight","tableWidth","_KupDataTable_updateFixedRowsAndColumnsCssVariables","_KupDataTable_didLoadObservers","_KupDataTable_didLoadEventHandling","_KupDataTable_didLoadInteractables","kupDidLoad","getColumns","visibleColumns","isCodVer","_KupDataTable_isGrouping","currentGroup","getInternalState","defaultSortingFunction","receivingColumnIndex","sortedColumnIndex","useNewObject","toSort","_KupDataTable_moveSortedColumns","areTotalsSelected","onTotalsChange","_KupDataTable_closeTotalMenu","totalsCopy","TotalLabel","CANC","renderFooter","extraCells","selectRowCell","fixedCellStyle","_KupDataTable_composeFixedCellStyleAndClass","fixedCellClasses","actionsCell","_KupDataTable_hasRowActions","hasCodVer","action","hasCommandsWithBlankObj","commands","selectionStyleAndClass","footerCells","columnIndex","totalMenu","menuLabel","CALC","translation","CANCEL","COUNT","DISTINCT","MAX","MAXIMUM","MIN","MINIMUM","totalValue","TotalMode","_KupDataTable_isOpenedTotalMenuForColumn","keyboardNavigation","tabindex","footerValue","numberToFormattedString","footer","renderCustomizePanel","fontsize","grid","transpose","totalsMatrix","openedCustomSettings","_KupDataTable_renderDensityPanel","_KupDataTable_renderFontSizePanel","_KupDataTable_renderGridPanel","_KupDataTable_renderTransposeSwitch","_KupDataTable_renderTotalsMatrix","DRAG_AND_DROP","editableData","EDITABLE","TOGGLE","EXPERIMENTAL_FEAT","toggleMagicBox","enableExperimentalFeatures","url","AI_ASSISTANT","_KupDataTable_closeCustomSettings","actionWrapperWidth","_KupDataTable_getSizedColumns","_KupDataTable_calculateColspan","currentArray","_KupDataTable_renderRow","jsxRow","jr","header","_KupDataTable_renderHeader","stickyHeader","_KupDataTable_renderStickyHeader","paginatorTop","paginatorBottom","paginatorPos","_KupDataTable_renderPaginator","BOTTOM","groupChips","chipsData","_KupDataTable_removeGroup","tableClass","_KupDataTable_tableHasAutoWidth","COMPLETE","showGrid","COL","wrapClass","overflow","stickyEl","hidden","belowClass","autoselectOnAction","MULTIPLE","compCreated","_KupDataTable_renderUpdateButtons","_KupDataTable_onGlobalFilterChange","insertMode","kupSave","showDeleteButton","_KupDataTable_rowsDelete","showHistoryButton","kupHistory","_KupDataTable_rowInsertForm","__classPrivateFieldGet$6","cellData","slotData","cellSlotData","isEditable","_KupDataTable_columnGroupArea","_KupDataTable_columnRemoveArea","_KupDataTable_onCustomSettingsClick","ev","onPointerDown","_KupDataTable_getEventDetails","getEventPath","onPointerUp","onContextMenu","_KupDataTable_hasTotals","dynamicPositionElements","kupDynamicPositionAttribute","scrollOnHover","kupDidUnload","_KupDataTable_createDropCard","starter","receiving","_KupDataTable_closeDropCard","enableMergeColumns","CONCATENATE","_KupDataTable_handleColumnSort","_KupDataTable_setTransposedData","_KupDataTable__getRow","_KupDataTable_getTransposedData","_KupDataTable_switchToTotalsMatrix","totalsMatrixData","columnKey","totalsMatrixColumns","currentColumn","totalMode","totalModeKey","_KupDataTable_setObjForTotalsMatrix","totalsMatrixRows","updatedTotals","navBar","topBar","widthTable","offsetWidth","thCollection","thStickyCollection","widthTH","entries","entry","isIntersecting","delta","loadMoreStep","boundingClientRect","bottom","threshold","rootMargin","IntersectionObserver","tapCb","clone","details","kupDataTableClick","_KupDataTable_clickHandler","kupDataTableContextMenu","_KupDataTable_contextMenuHandler","doubletapCb","kupDataTableDblClick","_KupDataTable_dblClickHandler","holdCb","pointerType","on","KupPointerEventTypes","TAP","DOUBLETAP","HOLD","dropzone","accept","kupDraggableColumnAttr","drop","draggedTh","grouped","_KupDataTable_handleColumnGroup","removeAttribute","kupDragActiveAttr","deleted","dataCb","draggable","multiple","dropCb","onlyMerge","onlySort","isSameComponent","kupDragDrop","startCb","endCb","dropCallbacks","dragCallbacks","end","th","cursorChecker","ignoreFrom","KupDragEffect","CLONE","resizableColumns","rect","callbacks","move","resizable","allowFrom","edges","right","BADGE","kupDraggableCellAttr","dispatcher","KupDropEventTypes","DATATABLE","_KupDataTable_scrollStickyHeader","scrollLeft","_KupDataTable_rowsPointLength","_KupDataTable__rowsLength","_KupDataTable_paginatedRowsPointLength","count","kupResetSelectedRows","sizedColumns","_KupDataTable_rowDetail","transposedData","datatable","iconColumn","DETAIL","keyColumn","fieldColumn","keyCell","transposedColumnName","editable","iconCell","EDITABLE_KEY","EDITABLE_FIELD","transform","append","_KupDataTable_dropDownActions","dropDownActions","_KupDataTable_createDropDownActionsCard","_KupDataTable_closeRowActionsCard","_KupDataTable_prepareDataForActionsCard","_KupDataTable_filterRowActionsCard","_KupDataTable_clearSearchActionsCard","selectedObjectIndex","selectedObject","kupRowActionItemClick","rowActionsList","filteredList","hasAlmostTenElements","CARD_WIDTH","CARD_HEIGHT","pageWrapper","buttonWrapper","cancel","confirm","innerComp","kupInsertRow","createDeleteCard","CONFIRM_DELETE_X_ROWS","kupDeleteRow","insertRowsIds","startingRows","path","isHeader","isBody","isFooter","td","tr","filterRemove","FILTER_REMOVE","isGroupRow","originalEvent","_KupDataTable_onRemoveFilter","_KupDataTable_onColumnSort","isFocusable","metaKey","focusEl","_KupDataTable_onRowExpand","_KupDataTable_onRowClick","_KupDataTable_cellActionsMenuHandler","cellActions","buildCellActions","_KupDataTable_onRowActionExpanderClick","DataTableAreasEnum","HEADER","FOOTER","_KupDataTable_onTotalMenuOpen","_KupDataTable_filterRows","calcTotals","normalizeRows","_KupDataTable_groupRows","_KupDataTable_sortRows","_KupDataTable_adjustPaginator","paginateRows","filterRows","rowActions","visibleCols","_KupDataTable_forceRowGroupExpansion","childRow","numberOfRows","numberOfPages","ceil","columnCssIndex","columnCssIndexR","rowCssIndex","extraCellsCount","validFixedColumn","isInteger","validFixedColumnR","validFixedRowIndex","FixedCellsClasses","FixedCellsCSSVarsBase","prog","progIdx","absIdx","abs","columnsR","toRet","previousHeight","nextElementSibling","currentCell","previousWidth","totalFixedColumns","previousElementSibling","sortObj","newSortObj","sortMode","SortMode","A","D","newSort","removeFilter","_KupDataTable_getFilterValueForTooltip","getFilterValueForTooltip","inputEl","_KupDataTable_handlePageChange","pageNumber","newPage","pageChange","_KupDataTable_handleRowsPerPageChange","rowsNumber","rowsPerPageChange","unselectable","selectedRowsCopy","_KupDataTable_deselectColumn","selectedColumn","_KupDataTable_selectColumn","columnCells","_KupDataTable_handleRowSelect","_KupDataTable_onSelectAll","_KupDataTable_openTotalMenu","openedTotalMenu","groupRows","_KupDataTable_onLoadMoreClick","loadItems","loadMoreMode","CONSTANT","CONSTANT_INCREMENT","kupLoadMoreClick","_KupDataTable_adjustGroupStateFromRow","groupFromState","sortRows","_KupDataTable_getSortIcon","DESCENDING","ASCENDING","_KupDataTable_getSortDecode","_KupDataTable_isGroupExpanded","sortedColumn","receivingColIndex","findIndex","sortedColIndex","kupColumnMove","sourceColumn","targetColumn","_KupDataTable_applyLineBreaks","content","lineBreakCharacter","chunk","_KupDataTable_composeHeaderCellClassAndStyle","columnClass","thStyle","isBar","isButton","isChart","isProgressBar","isRadio","isVoCodver","specialExtraCellsCount","multiSelectColumn","margin","SELECTED","RENDERED","actionsColumn","dataColumns","hasFiltersForColumn","svgLabel","REMOVE_FILTERS","sortIcon","iconClass","keyIcon","currentCol","menu","level","previousRow","composedGroupLabel","LABEL","columnLabel","VALUE","COLLAPSED","jsxRows","indent","grouplabelcell","totalClass","groupRowIndex","rowActionsCell","actionsStyleAndClass","actionsOnRow","actions","buildRowActions","checkEveryActionHasOnlyIcon","imageProp","buildImageProp","textPopulatedRowActions","createActionsWithText","EXPAND","cellIndex","hideValuesRepetitions","indend","autoFillMissingCells","fcell","buildFCell","indents","previousValue","cellActionIcon","hasActionCell","kupCellActionIconClick","jsxCell","cellClass","cellStyle","fixedStyles","colWidth","span","rowSpan","rowClass","_KupDataTable_openCustomSettings","FPaginator","perPage","onLoadMore","onNextPage","onPrevPage","onPageChange","onRowsChange","DANGER","marginLeft","column2group","columnX","_KupDataTable_transcodeItem","searchIn","returnFrom","tmpCode","_KupDataTable_createListData","codes","icons","selectedCode","listItems","KupLanguageFontsize","BIG","KupLanguageGrid","COLUMN","KupLanguageDensity","WIDE","_KupDataTable_getFontSizeCodeFromDecode","decode","textfieldData","_KupDataTable_getDensityCodeFromDecode","_KupDataTable_getGridCodeFromDecode","TRANSPOSE_DATA","TOTALS_TABLE","_KupDataTable_renderCommandButton","commandObj","_KupDataTable_renderCommandDropDownButton","createRowWithInputFields","INPUT_FIELD","addRowHandler","newRow","deleteRowHandler","addConfirmButton","commandButtons","addCommands","addOperations","operationList","insert","enabled","ROW_ADD","onClickHandler","ROW_DELETE","op","kupDatePickerCss","KupDatePickerStyle0","KupDatePicker","pickerContainerEl","pickerEl","onKupDatePickerItemClick","setPickerValueSelected","onKupClearIconClick","kupClearIconClick","refreshPickerValue","onKupTextFieldSubmit","kupTextFieldSubmit","listenKeyup","watchFirstDayIndex","ISOvalue","notISOvalue","eventDetailValue","eventToRaise","isOnInputEvent","isAlphanumeric","isValidFormattedStringDate","ISO_DATE","refreshPickerComponentValue","getPickerValueSelected","getValueForPickerComponent","getTextFieldId","showIcon","onClearIconClick","onKeyDown","prepDatePicker","getDateForOutput","regex","test","KupDialogProps","kupDialogCss","KupDialogStyle0","KupDialog","_KupDialog_header","_KupDialog_kupManager","_KupDialog_recalcSafeguard","onReady","closeOnBackdropClick","recalcPosition","__classPrivateFieldGet$5","innerWidth","innerHeight","scrollY","autoCenter","modal","showModalBackdrop","headerSlot","hideModalBackdrop","KupDropdownButtonProps","kupDropdownButtonCss","KupDropdownButtonStyle0","KupDropdownButton","buttonEl","dropdownEl","isListOpened","closeList","openList","onDropDownClick","buttonWidth","KupFormProps","KupFormLabelAlignment","KupFormLabelPlacement","kupFormCss","KupFormStyle0","KupForm","onDataChanged","initVisibleColumns","checkLayout","onLayoutChanged","formLayout","section","horizontal","sections","cnt","renderRow","formContent","rowLayout","renderSection","onSubmit","hiddenSubmitButton","sectionContent","formField","renderFormField","field","isGrid","labelPlacement","placement","sectionClass","form__section","sectionStyle","dim","flex","maxHeight","form__field","styleObj","isDebug","cellProps","setSizes","resetLabel","fieldCell","labelCell","PLACEHOLDER","WATERMARK","setPlaceholderLabel","HIDDEN","RIGHT","alignment","LEFT","getType","FCellTypes","AUTOCOMPLETE","COLOR_PICKER","COMBOBOX","DATETIME","TIME","CHECKBOX","NUMBER","STRING","SWITCH","KupGaugeProps","constant","atan2","sqrt","epsilon","pi","halfPi","tau","acos","asin","tauEpsilon","strings","_","appendRound","digits","floor","Path","_x0","_y0","_x1","_y1","_append","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","withPath","RangeError","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","cornerRadius","padRadius","buffer","r0","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","kupGaugeCss","KupGaugeStyle0","KupGauge","arcGenerator","maxValuePositive","SUCCESS","percToDeg","perc","degToRad","deg","percToRad","calculateValuePercentage","valueToPercentage","minValue","calculateValueFontSize","valueSize","paintNeedle","needleLength","needleBaseRadius","centerX","centerY","rotationPercentage","leftX","leftY","rightX","rightY","thetaRad","topX","topY","labelDistance","maxValue","tempValue","yValueMultiplier","halvedSize","needleCircleRadius","arcThickness","valueLabelYPosition","givenThresholds","onlyValue","firstThreshold","secondThreshold","arcsThresholds","arcsElements","arcsColors","reverseColors","computedcolors","valuecolor","currentArcPath","fill","textElements","showLabels","showMaxmin","thresholdPercentage","textPosition","retValue","numberStringToFormattedString","valueText","showValue","measurementUnit","widthComponent","viewBox","needleCircle","getColorFromString","rIndex","gIndex","bIndex","GraphicElement","init","markers","marker","initHeight","initShape","initColor","isValidColor","isTrasparent","toBeParsed","vLastSemicolonIndex","vShapeTypeString","toLocaleLowerCase","vRgb","vError","vColorKey","vIndex","vIndexR","vIndexG","vIndexB","getHeight","getWidth","getShape","getColor","imageCanvas","graphic_element_marker_splitter","graphic_element_splitter","background_color","default_color","drawCanvas","canvas","getContext","ctx","drawGraphicCell","vGraphicElementDefinitionArr","graphicElem","vShapeMarker","vBGColorMarker","vHeightPctMarker","vMarkersArray","shapesArray","vSeparatorsList","vString","isShapeMarker","isBgColorMarker","isHeightMarker","isDecoratorMarker","vGraphicElementArray","bgColor","drawRect","startX","getNewStarXFromCircle","getNewStarXFromTril","getNewStarXFromTrir","getNewStarXFromBar","sep","drawSeparator","drawArrow","drawGrid","getDim","dimPixel","dimPerc","elemWidth","elemHeight","circle","newStartX","drawArc","triLeft","drawTri","triRight","fillStyle","beginPath","fillRect","vPart","arrSpan","arrSpanHalf","vTickNum","vTickDist","tickH","tickW","vSeparatorPart","vColor","vThickness","vPositionPart","KupImageProps","kupImageCss","KupImageStyle0","KupImage","isUrl","zoomEnable","createDialog","onKupLoad","kupLoad","renderCanvas","isCanvas","placeholderResource","body","feedback","spinnerLayout","badgeData","fit","onLoad","kupListCss","KupListStyle0","KupList","_KupList_kupManager","_KupList_radios","_KupList_listItems","KupListRole","LISTBOX","_KupList_instances","_KupList_handleSelection","focused","KupListProps","getSelectedNode","componentClass","_KupList_checkRoleType","twoLine","hideText","roleAttr","roleType","ariaMultiSelectable","_KupList_isMultiSelection","_KupList_itemCompliant","_KupList_renderListItem","dataEl","GROUP","_KupList_isNested","hasAttribute","nestedList","imageTag","_KupList_getIconTag","primaryTextTag","secTextTag","secondaryText","classAttr","tabIndexAttr","_KupList_isListBoxRule","ariaCheckedAttr","ariaSelectedAttr","innerSpanTag","_KupList_isRadioButtonRule","dataTmp","trickForMDC","htmlFor","_KupList_isCheckBoxRule","checkedAttr","vNodes","propsFImage","RADIOGROUP","KupProgressBarProps","kupProgressBarCss","KupProgressBarStyle0","KupProgressBar","isRadial","animated","centeredLabel","hideLabel","padded","striped","FProgressBar","KupRadioProps","kupRadioCss","KupRadioStyle0","KupRadio","radio","FRadio","KupRatingProps","kupRatingCss","KupRatingStyle0","KupRating","FRating","KupSpinnerProps","kupSpinnerCss","KupSpinnerStyle0","KupSpinner","kupSpinnerReady","fader","faderTimeout","masterClass","spinnerClass","spinnerEl","barVariant","fullScreen","KupSwitchProps","kupSwitchCss","KupSwitchStyle0","KupSwitch","FSwitchSizing","FSwitch","KupTabBarProps","KupTabbarStyling","kupTabBarCss","KupTabBarStyle0","KupTabBar","_KupTabBar_clickCbDropCard","scrollArea","_KupTabBar_dropDownActionCardAnchor","createDropDownToolbarList","onKupToolbarItemClick","applyRipple","ripple","rippleCells","closeRowToolbarList","toolbarList","toolbarData","requestAnimationFrame","activeTabs","lastActiveOccurrence","tabBar","tabClass","dense","tabEl","tabIndex","tabbarRole","variant","KupTextFieldProps","kupTextFieldCss","KupTextFieldStyle0","KupTextField","_KupTextField_instances","_KupTextField_setValueFromEventTaget","_event","emitSubmitEventOnEnter","onKupMinusClick","kupMinusClick","onKupPlusClick","skipNumberCheck","_KupTextField_getValueForOutput","allowNegative","helperIcon","showCounter","inputMode","integers","lightMode","placeholder","quantityButtons","step","trailingLabel","onMinusClick","onPlusClick","v1","formattedStringToNumberString","KupTimePickerProps","kupTimePickerCss","KupTimePickerStyle0","KupTimePicker","textFieldContainerEl","pickerKupEl","onKupTimePickerItemClick","watchTimeMinutesStep","clockVariant","timeMinutesStep","getFormattedValue","formattedStringToCustomDateTime","isValidFormattedStringTime","getPickerElId","prepTimePicker","createTimeListData","totalDayMinutes","itemsCount","setHours","formatTime","setMinutes","getTimeForOutput","timeStringToFormattedString","kupToolbarCss","KupToolbarStyle0","KupToolbar","_KupToolbar_kupManager","_KupToolbar_instances","_KupToolbar_handleClick","generateRowForNode","generateColumnForNode","colname","coltitle","EMPTY_OBJECT","_KupToolbar_renderTreeNode","hasChildren","Fragment","componentType","_KupToolbar_renderNestedChildren","parentIndex","KupTreeState","isExpandable","FiltersTreeItems","items","columnFilters","isUsingGlobalFilter","hasFilters","setAllVisible","setNodeVisibility","isNodeCompliant","cellsHolder","treeMainColumnName","areCellsCompliant","isFilterCompliantForValue","visibility","expandCollapseNode","extractColumnValues","univocal","addColumnValueFromRow","expandNode","expandCollapseAllNodes","kupTreeCss","KupTreeStyle0","KupTree","_KupTree_kupManager","columnMenuCard","clickTimeout","filtersTreeItemsInstance","totalMenuCoords","contentRefs","oldWidth","hold","interactableTouch","KupTreeExpansionMode","KupGlobalFilterMode","SIMPLE","selectedNode","setSelectedNode","treeNodePath","treeNodeIndex","kupTreeNodeSelected","getTreeNode","enrichDataWhenChanged","oldData","refreshStructureState","enrichStructureStateWhenChanged","oldValue","isEmpty","visibleNodes","columnMenuInstance","kupTreeColumnMenu","useDynamicExpansion","kupTreeDynamicMassExpansion","setExpansionByDepth","getNodeDepth","traverseNode","KupTreeProps","setTreeColumnVisibility","treeColumnVisible","isTreeColumnVisible","checkScrollOnHover","treeWrapperRef","onKupTreeNodeDblClick","treeNodeData","kupTreeNodeDblClick","nodesToRows","TreeNode","setDynPosElements","getSizedColumns","getHeadingColumns","firstColum","launchNodeEvent","hdlTreeNodeClick","selectedNodeToString","openTotalMenu","onTotalMenuOpen","closeTotalMenu","getEventDetails","contextMenuHandler","expansionMode","NODE","hdlTreeNodeExpanderClick","arrayTreeNodePath","kupTreeNodeExpand","usesDynamicExpansion","kupTreeNodeCollapse","dynamicExpansionCallback","childrenTreeNodes","catch","dynamicExpansionRequireChildren","hasTotals","nodePath","strToRet","father","nodeIndex","onRemoveFilter","onGlobalFilterChange","filterNodes","calculateVisibleNodes","showColumns","rootNode","getCellStyle","colName","renderHeader","renderHighlightedContent","highlight","styleClass","contentSlices","contentPart","preventXScroll","renderTreeNode","treeNodeDepth","asAccordion","hasExpandIcon","expandClass","treeExpandIcon","COLLAPSE","treeNodeIcon","iconColor","treeNodeOptions","treeNodeCells","treeNodeCell","HIGHLIGHT","globalFilterMode","onDblClick","isOpenedTotalMenuForColumn","nodesCell","didLoadInteractables","kupTreeContextMenu","totalMenuPosition","renderTree","treeNodes","setEllipsis","treeRect","failsafeOffset","zeroDepthNode","visibleHeader","filterField","globalFilterTimeout"],"sources":["src/components/kup-autocomplete/kup-autocomplete-declarations.ts","src/components/kup-list/kup-list-helper.ts","src/components/kup-autocomplete/kup-autocomplete.scss?tag=kup-autocomplete&encapsulation=shadow","src/components/kup-autocomplete/kup-autocomplete.tsx","src/components/kup-badge/kup-badge-declarations.ts","src/components/kup-badge/kup-badge.scss?tag=kup-badge&encapsulation=shadow","src/components/kup-badge/kup-badge.tsx","src/components/kup-button/kup-button-declarations.ts","src/components/kup-button/kup-button.scss?tag=kup-button&encapsulation=shadow","src/components/kup-button/kup-button.tsx","src/components/kup-button-list/kup-button-list-declarations.ts","src/components/kup-button-list/kup-button-list.scss?tag=kup-button-list&encapsulation=shadow","src/components/kup-button-list/kup-button-list.tsx","src/components/kup-card/box/kup-card-box.tsx","src/components/kup-date-picker/kup-date-picker-declarations.tsx","src/components/kup-card/built-in/kup-card-calendar.tsx","src/components/kup-card/built-in/kup-card-clock.tsx","src/components/kup-card/built-in/kup-card-column-drop-menu.tsx","src/components/kup-card/built-in/kup-card-message-box.tsx","src/components/kup-card/built-in/kup-card-numeric.tsx","src/components/kup-card/built-in/kup-card-openai.tsx","src/components/kup-card/built-in/kup-card-built-in.tsx","src/utils/kup-column-menu/kup-column-menu-declarations.ts","src/components/kup-card/kup-card-helper.tsx","src/components/kup-card/collapsible/kup-card-collapsible.tsx","src/components/kup-card/dialog/kup-card-dialog.tsx","src/components/kup-card/free/kup-card-free.tsx","src/components/kup-card/scalable/kup-card-scalable.tsx","src/components/kup-card/standard/kup-card-standard.tsx","node_modules/vanilla-picker/dist/vanilla-picker.mjs","src/components/kup-card/kup-card.scss?tag=kup-card&encapsulation=shadow","src/components/kup-card/kup-card.tsx","src/components/kup-chart/kup-chart-declarations.ts","src/components/kup-chart/kup-chart-builder.ts","src/components/kup-chart/kup-chart.scss?tag=kup-chart&encapsulation=shadow","src/components/kup-chart/kup-chart.tsx","src/components/kup-checkbox/kup-checkbox-declarations.ts","src/components/kup-checkbox/kup-checkbox.scss?tag=kup-checkbox&encapsulation=shadow","src/components/kup-checkbox/kup-checkbox.tsx","src/components/kup-chip/kup-chip-declarations.ts","src/components/kup-chip/kup-chip.scss?tag=kup-chip&encapsulation=shadow","src/components/kup-chip/kup-chip.tsx","src/components/kup-color-picker/kup-color-picker-declarations.ts","src/components/kup-color-picker/kup-color-picker.scss?tag=kup-color-picker&encapsulation=shadow","src/components/kup-color-picker/kup-color-picker.tsx","src/components/kup-combobox/kup-combobox-declarations.ts","src/components/kup-combobox/kup-combobox.scss?tag=kup-combobox&encapsulation=shadow","src/components/kup-combobox/kup-combobox.tsx","src/components/kup-data-table/kup-data-table-state.ts","src/utils/kup-column-menu/kup-column-menu.ts","src/components/kup-data-table/kup-data-table.scss?tag=kup-data-table&encapsulation=shadow","src/components/kup-data-table/kup-data-table.tsx","src/components/kup-date-picker/kup-date-picker.scss?tag=kup-date-picker&encapsulation=shadow","src/components/kup-date-picker/kup-date-picker.tsx","src/components/kup-dialog/kup-dialog-declarations.ts","src/components/kup-dialog/kup-dialog.scss?tag=kup-dialog&encapsulation=shadow","src/components/kup-dialog/kup-dialog.tsx","src/components/kup-dropdown-button/kup-dropdown-button-declarations.ts","src/components/kup-dropdown-button/kup-dropdown-button.scss?tag=kup-dropdown-button&encapsulation=shadow","src/components/kup-dropdown-button/kup-dropdown-button.tsx","src/components/kup-form/kup-form-declarations.ts","src/components/kup-form/kup-form.scss?tag=kup-form&encapsulation=shadow","src/components/kup-form/kup-form.tsx","src/components/kup-gauge/kup-gauge-declarations.ts","node_modules/d3-shape/src/constant.js","node_modules/d3-shape/src/math.js","node_modules/d3-path/src/path.js","node_modules/d3-shape/src/path.js","node_modules/d3-shape/src/arc.js","src/components/kup-gauge/kup-gauge.scss?tag=kup-gauge&encapsulation=shadow","src/components/kup-gauge/kup-gauge.tsx","src/components/kup-image/canvas/kup-image-canvas-helper.ts","src/components/kup-image/canvas/kup-image-canvas-declarations.ts","src/components/kup-image/canvas/kup-image-canvas.tsx","src/components/kup-image/kup-image-declarations.ts","src/components/kup-image/kup-image.scss?tag=kup-image&encapsulation=shadow","src/components/kup-image/kup-image.tsx","src/components/kup-list/kup-list.scss?tag=kup-list&encapsulation=shadow","src/components/kup-list/kup-list.tsx","src/components/kup-progress-bar/kup-progress-bar-declarations.ts","src/components/kup-progress-bar/kup-progress-bar.scss?tag=kup-progress-bar&encapsulation=shadow","src/components/kup-progress-bar/kup-progress-bar.tsx","src/components/kup-radio/kup-radio-declarations.ts","src/components/kup-radio/kup-radio.scss?tag=kup-radio&encapsulation=shadow","src/components/kup-radio/kup-radio.tsx","src/components/kup-rating/kup-rating-declarations.ts","src/components/kup-rating/kup-rating.scss?tag=kup-rating&encapsulation=shadow","src/components/kup-rating/kup-rating.tsx","src/components/kup-spinner/kup-spinner-declarations.ts","src/components/kup-spinner/kup-spinner.scss?tag=kup-spinner&encapsulation=shadow","src/components/kup-spinner/kup-spinner.tsx","src/components/kup-switch/kup-switch-declarations.ts","src/components/kup-switch/kup-switch.scss?tag=kup-switch&encapsulation=shadow","src/components/kup-switch/kup-switch.tsx","src/components/kup-tab-bar/kup-tab-bar-declarations.ts","src/components/kup-tab-bar/kup-tab-bar.scss?tag=kup-tab-bar&encapsulation=shadow","src/components/kup-tab-bar/kup-tab-bar.tsx","src/components/kup-text-field/kup-text-field-declarations.ts","src/components/kup-text-field/kup-text-field.scss?tag=kup-text-field&encapsulation=shadow","src/components/kup-text-field/kup-text-field.tsx","src/components/kup-time-picker/kup-time-picker-declarations.ts","src/components/kup-time-picker/kup-time-picker.scss?tag=kup-time-picker&encapsulation=shadow","src/components/kup-time-picker/kup-time-picker.tsx","src/components/kup-toolbar/kup-toolbar.scss?tag=kup-toolbar&encapsulation=shadow","src/components/kup-toolbar/kup-toolbar.tsx","src/components/kup-tree/kup-tree-state.ts","src/components/kup-tree/kup-tree-helper.ts","src/utils/filters/filters-tree-items.ts","src/components/kup-tree/kup-tree.scss?tag=kup-tree&encapsulation=shadow","src/components/kup-tree/kup-tree.tsx"],"sourcesContent":["import { KupEventPayload } from '../../types/GenericTypes';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\n/**\n * Props of the kup-autocomplete component.\n * Used to export every prop in an object.\n */\nexport enum KupAutocompleteProps {\n allowInconsistentValues = \"When true, the autocomplete fires the change event even when the value typed isn't included in the autocomplete list.\",\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n displayMode = 'Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".',\n initialValue = 'Sets the initial value of the component.',\n inputDelay = 'Input event emission delay in milliseconds.',\n minimumChars = 'The minimum number of chars to trigger the autocomplete.',\n selectMode = 'Sets how to return the selected item value. Suported values: \"code\", \"description\", \"both\".',\n serverHandledFilter = 'When true, the items filter is managed server side, otherwise items filter is done client side.',\n showDropDownIcon = 'When true shows the drop-down icon, for open list.',\n}\n/**\n * The available display modes for the autocomplete component.\n */\nexport enum KupAutocompleteDisplayMode {\n CODE = 'code',\n DESCRIPTION = 'description',\n DESCRIPTION_AND_CODE = 'both',\n}\n\nexport interface KupAutocompleteEventPayload extends KupEventPayload {\n value: string;\n inputValue: string;\n node?: KupListNode;\n}\nexport interface KupAutocompleteIconClickEventPayload\n extends KupAutocompleteEventPayload {\n open: boolean;\n}\n","import {\n ItemsDisplayMode,\n KupListNode,\n ValueDisplayedValue,\n} from './kup-list-declarations';\n\nexport function getIdOfItemByDisplayMode(\n item: KupListNode,\n mode: ItemsDisplayMode,\n separator: string\n): string {\n if (mode == ItemsDisplayMode.CODE) {\n return item.id;\n }\n if (mode == ItemsDisplayMode.DESCRIPTION) {\n return item.value;\n }\n if (mode == ItemsDisplayMode.DESCRIPTION_AND_CODE) {\n return item.id + separator + item.value;\n }\n return item.id;\n}\n\nexport function consistencyCheck(\n idIn: string,\n listData: Object,\n listEl: any,\n selectMode: ItemsDisplayMode,\n displayMode: ItemsDisplayMode,\n e?: CustomEvent\n): ValueDisplayedValue {\n const validList = !!(listEl && listData && listData['data']);\n let id: string = '';\n let displayedValue: string = '';\n let selected: KupListNode = null;\n if (e != null) {\n selected = e.detail.selected;\n }\n if (selected == null && idIn != null && validList) {\n selected = getItemByDisplayMode(listData, idIn, displayMode, true);\n listEl.data = [...listData['data']];\n }\n if (selected == null && idIn == null && listData) {\n selected = getFirstItemSelected(listData);\n }\n let trueValue = null;\n if (selected == null) {\n selected = {\n id: idIn == null ? '' : idIn,\n value: idIn == null ? '' : idIn,\n };\n id = selected.id;\n displayedValue = selected.id;\n trueValue = selected.id;\n } else {\n id = getIdOfItemByDisplayMode(selected, selectMode, ' - ');\n displayedValue = getIdOfItemByDisplayMode(selected, displayMode, ' - ');\n trueValue = getIdOfItemByDisplayMode(\n selected,\n ItemsDisplayMode.CODE,\n ' - '\n );\n }\n\n const listNode = validList\n ? (listData['data'] as KupListNode[]).find((x) => x.id === trueValue)\n : null;\n\n let exists = listNode ? true : false;\n\n return {\n value: id,\n displayedValue: displayedValue,\n node: listNode,\n exists: exists,\n };\n}\n\nexport function getFirstItemSelected(listData: Object): KupListNode {\n if (listData['data']) {\n for (let i = 0; i < listData['data'].length; i++) {\n if (listData['data'][i].selected) {\n return listData['data'][i];\n }\n }\n }\n return null;\n}\n\nexport function getItemById(\n listData: Object,\n id: string,\n setSelected: boolean\n): KupListNode {\n if (listData && listData['data']) {\n let found: boolean = false;\n let item: KupListNode = null;\n for (let i = 0; i < listData['data'].length; i++) {\n if (setSelected == true) {\n listData['data'][i].selected = false;\n }\n if (\n !found &&\n listData['data'][i].id.toString().toLowerCase() ==\n id.toString().toLowerCase()\n ) {\n item = listData['data'][i];\n item.selected = true;\n found = true;\n }\n }\n if (found == true) {\n return item;\n }\n for (let i = 0; i < listData['data'].length; i++) {\n if (\n listData['data'][i].value.toString().toLowerCase() ==\n id.toString().toLowerCase()\n ) {\n item = listData['data'][i];\n item.selected = true;\n found = true;\n break;\n }\n }\n if (found == true) {\n return item;\n }\n }\n return null;\n}\n\nexport function getItemByDisplayMode(\n listData: Object,\n id: string,\n displayMode: ItemsDisplayMode,\n setSelected: boolean\n): KupListNode {\n if (listData && listData['data']) {\n let found: boolean = false;\n let item: KupListNode = null;\n for (let i = 0; i < listData['data'].length; i++) {\n let displayedValue = getIdOfItemByDisplayMode(\n listData['data'][i],\n displayMode,\n ' - '\n );\n if (setSelected == true) {\n listData['data'][i].selected = false;\n }\n if (\n !found &&\n displayedValue.toString().toLowerCase() ==\n id.toString().toLowerCase()\n ) {\n item = listData['data'][i];\n item.selected = true;\n found = true;\n }\n }\n if (found == true) {\n return item;\n }\n }\n return getItemById(listData, id, setSelected);\n}\n","@import './styles/kup-autocomplete-main.scss';\n@import './styles/kup-autocomplete-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n} from '../../types/GenericTypes';\nimport {\n KupAutocompleteEventPayload,\n KupAutocompleteIconClickEventPayload,\n KupAutocompleteProps,\n} from './kup-autocomplete-declarations';\nimport {\n ItemsDisplayMode,\n KupListEventPayload,\n ValueDisplayedValue,\n} from '../kup-list/kup-list-declarations';\nimport { consistencyCheck } from '../kup-list/kup-list-helper';\nimport { KupThemeIconValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\n\n@Component({\n tag: 'kup-autocomplete',\n styleUrl: 'kup-autocomplete.scss',\n shadow: true,\n})\nexport class KupAutocomplete {\n /**\n * References the root HTML element of the component (<kup-autocomplete>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() displayedValue: string = undefined;\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Set alert message\n * @default '''\n */\n @Prop() alert: string = '';\n /**\n * When true, the autocomplete fires the change event even when the value typed isn't included in the autocomplete list.\n * @default false\n */\n @Prop() allowInconsistentValues: boolean = false;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components.\n * @default undefined\n */\n @Prop({ mutable: true }) data: Object = undefined;\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".\n * @default ItemsDisplayMode.DESCRIPTION\n */\n @Prop() displayMode: ItemsDisplayMode = ItemsDisplayMode.DESCRIPTION;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n /**\n * When set, the text-field will show this icon.\n * @default null\n */\n @Prop() icon: string = null;\n /**\n * Sets the initial value of the component.\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * Enables a clear trailing icon.\n * @default false\n */\n @Prop() isClearable: boolean = false;\n /**\n * Input event emission delay in milliseconds.\n * @default 300\n */\n @Prop() inputDelay: number = 300;\n /**\n * When set, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n\n /**\n * The minimum number of chars to trigger the autocomplete\n * @default 1\n */\n @Prop() minimumChars: number = 1;\n /**\n * Sets the component to read only state, making it not editable, but interactable. Used in combobox component when it behaves as a select.\n * @default false\n */\n @Prop() readOnly: boolean = false;\n /**\n * Sets how to return the selected item value. Suported values: \"code\", \"description\", \"both\".\n * @default ItemsDisplayMode.CODE\n */\n @Prop() selectMode: ItemsDisplayMode = ItemsDisplayMode.CODE;\n /**\n * When true, the items filter is managed server side, otherwise items filter is done client side.\n * @default false\n */\n @Prop({ reflect: true }) serverHandledFilter: boolean = false;\n /**\n * When true shows the drop-down icon, for open list.\n * @default true\n */\n @Prop() showDropDownIcon: boolean = true;\n /**\n * Sets the type of the button\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * When set, the icon will be shown after the text.\n * @default false\n */\n @Prop() trailingIcon: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n #doConsistencyCheck: boolean = true;\n #elStyle: any = undefined;\n #listEl: HTMLKupListElement = null;\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n #textfieldWrapper: HTMLElement = undefined;\n #textfieldEl: HTMLInputElement | HTMLTextAreaElement = undefined;\n #clickCb: KupManagerClickCb = null;\n #inputTimeout: number;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-autocomplete-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupAutocompleteEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupAutocompleteEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupAutocompleteEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupAutocompleteEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-input',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInput: EventEmitter<KupAutocompleteEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupAutocompleteIconClickEventPayload>;\n\n @Event({\n eventName: 'kup-autocomplete-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupAutocompleteEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupChange(value: string) {\n this.#doConsistencyCheck = true;\n const ret = this.#consistencyCheck(value, true);\n if (ret.exists || this.allowInconsistentValues) {\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n node: ret.node,\n });\n }\n }\n\n onKupClick() {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupInput() {\n this.#doConsistencyCheck = true;\n const ret = this.#consistencyCheck(this.#textfieldEl.value, false);\n this.#openList(false);\n if (this.#textfieldEl.value.length >= this.minimumChars) {\n this.kupInput.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n node: ret.node,\n });\n }\n }\n\n onKupIconClick() {\n if (this.#textfieldWrapper.classList.contains('toggled')) {\n this.#closeList();\n } else {\n if (this.showDropDownIcon) {\n this.#openList(true);\n }\n }\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n open: this.#textfieldWrapper.classList.contains('toggled'),\n });\n }\n\n onKupItemClick(e: CustomEvent<KupListEventPayload>) {\n this.onKupChange(e.detail.selected.id);\n this.#closeList();\n if (this.#textfieldEl) {\n this.#textfieldEl.focus();\n }\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n node: e.detail.selected,\n });\n }\n\n /*-------------------------------------------------*/\n /* L i s t e n e r s */\n /*-------------------------------------------------*/\n\n @Listen('keydown')\n listenKeydown(e: KeyboardEvent) {\n if (this.#isListOpened()) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.focusPrevious();\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.select().then(() => {\n this.#closeList();\n this.#textfieldEl.focus();\n });\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n this.#closeList();\n break;\n }\n } else {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.#openList(false);\n this.#listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.#openList(false);\n this.#listEl.focusPrevious();\n break;\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupAutocompleteProps, descriptions);\n }\n /**\n * Used to retrieve the value of the component.\n * @returns {Promise<string>} Value of the component.\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the focus to the component.\n */\n @Method()\n async setFocus() {\n this.#textfieldEl.focus();\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupAutocompleteProps, props);\n }\n /**\n * Sets the value of the component.\n * @param {string} value - Value of the component.\n */\n @Method()\n async setValue(value: string) {\n this.#doConsistencyCheck = true;\n this.#consistencyCheck(value, true);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n #openList(forceOpen: boolean): boolean {\n if (\n forceOpen != true &&\n this.#textfieldEl.value.length < this.minimumChars\n ) {\n this.#closeList();\n return false;\n }\n const hasError = this.error?.trim().length > 0;\n const hasAlert = this.alert?.trim().length > 0;\n const topOffset = hasError || hasAlert ? -20 : 0;\n this.#textfieldWrapper.classList.add('toggled');\n this.#listEl.menuVisible = true;\n const elStyle = this.#listEl.style;\n elStyle.height = 'auto';\n elStyle.minWidth = this.#textfieldWrapper.clientWidth + 'px';\n if (this.#kupManager.dynamicPosition.isRegistered(this.#listEl)) {\n this.#kupManager.dynamicPosition.changeAnchor(\n this.#listEl,\n this.#textfieldWrapper\n );\n } else {\n this.#kupManager.dynamicPosition.register(\n this.#listEl,\n this.#textfieldWrapper,\n topOffset,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.#kupManager.dynamicPosition.start(this.#listEl);\n if (!this.#clickCb) {\n this.#clickCb = {\n cb: () => {\n this.#closeList();\n },\n el: this.#listEl,\n };\n }\n this.#kupManager.addClickCallback(this.#clickCb, true);\n return true;\n }\n\n #closeList() {\n this.#textfieldWrapper.classList.remove('toggled');\n this.#listEl.menuVisible = false;\n this.#kupManager.dynamicPosition.stop(this.#listEl);\n this.#kupManager.removeClickCallback(this.#clickCb);\n }\n\n #isListOpened(): boolean {\n return this.#listEl.menuVisible == true;\n }\n\n #consistencyCheck(idIn: string, setValue: boolean): ValueDisplayedValue {\n if (!this.#doConsistencyCheck) {\n return;\n }\n this.#doConsistencyCheck = false;\n const ret = consistencyCheck(\n idIn,\n this.data['kup-list'],\n this.#listEl,\n this.selectMode,\n this.displayMode\n );\n if (ret.exists || this.allowInconsistentValues) {\n if (setValue) {\n this.value = ret.value;\n this.displayedValue = ret.displayedValue;\n }\n if (this.#listEl != null && !this.serverHandledFilter) {\n this.#listEl.filter = ret.value;\n }\n } else {\n this.displayedValue = idIn;\n if (this.#listEl != null && !this.serverHandledFilter) {\n this.#listEl.filter = ret.value;\n }\n }\n\n return ret;\n }\n\n #prepList() {\n return (\n <kup-list\n displayMode={this.displayMode}\n {...this.data['kup-list']}\n isMenu={true}\n onkup-list-click={(e: CustomEvent<KupListEventPayload>) =>\n this.onKupItemClick(e)\n }\n ref={(el) => (this.#listEl = el as any)}\n ></kup-list>\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.theme.register(this);\n this.#doConsistencyCheck = true;\n this.value = this.initialValue;\n if (!this.data) {\n this.data = {\n 'kup-list': {},\n 'kup-text-field': {},\n };\n }\n }\n\n componentDidLoad() {\n this.#consistencyCheck(this.value, true);\n this.#kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const f: HTMLElement = root.querySelector('.f-text-field');\n if (f) {\n this.#textfieldWrapper = f;\n this.#textfieldEl = f.querySelector('input');\n FTextFieldMDC(f);\n }\n }\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FTextFieldProps = {\n alert: this.alert,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n error: this.error,\n icon: this.icon,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n isClearable: this.isClearable,\n label: this.label,\n leadingLabel: this.leadingLabel,\n readOnly: this.readOnly,\n sizing: this.sizing,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n value: this.value,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n };\n const fullHeight =\n this.rootElement.classList.contains('kup-full-height');\n const fullWidth = this.rootElement.classList.contains('kup-full-width');\n\n return (\n <Host\n class={`${fullHeight ? 'kup-full-height' : ''} ${\n fullWidth ? 'kup-full-width' : ''\n }`}\n style={this.#elStyle}\n >\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} style={this.#elStyle}>\n <FTextField\n {...props}\n icon={\n this.showDropDownIcon\n ? KupThemeIconValues.DROPDOWN\n : null\n }\n trailingIcon={true}\n {...this.data['kup-text-field']}\n disabled={this.disabled}\n fullHeight={fullHeight}\n fullWidth={fullWidth}\n value={this.displayedValue}\n onBlur={() => this.onKupBlur()}\n onClick={() => this.onKupClick()}\n onChange={(e: UIEvent & { target: HTMLInputElement }) =>\n this.onKupChange(e.target.value)\n }\n onFocus={() => this.onKupFocus()}\n onInput={() => {\n window.clearTimeout(this.#inputTimeout);\n this.#inputTimeout = window.setTimeout(\n () => this.onKupInput(),\n this.inputDelay\n );\n }}\n onIconClick={() => this.onKupIconClick()}\n ></FTextField>\n </div>\n {this.#prepList()}\n </Host>\n );\n }\n\n disconnectedCallback() {\n if (this.#listEl) {\n this.#kupManager.dynamicPosition.unregister([this.#listEl]);\n this.#listEl.remove();\n }\n this.#kupManager.theme.unregister(this);\n }\n}\n","/**\n * Props of the kup-badge component.\n * Used to export every prop in an object.\n */\nexport enum KupBadgeProps {\n customStyle = 'Custom style of the component.',\n imageData = 'The data of the image displayed inside the badge.Props of the sub-components.',\n text = 'The text displayed inside the badge.Defaults at false. When set to true, the component is disabled.',\n}\n\nexport enum BadgeType {\n SUCCESS = 'success',\n INFO = 'info',\n ERROR = 'error',\n WARNING = 'warning',\n}\n","@import './styles/kup-badge-main.scss';\n@import './styles/kup-badge-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { BadgeType, KupBadgeProps } from './kup-badge-declarations';\n\n@Component({\n tag: 'kup-badge',\n styleUrl: 'kup-badge.scss',\n shadow: true,\n})\nexport class KupBadge {\n /**\n * References the root HTML element of the component (<kup-badge>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The data of the image displayed inside the badge.\n * @default null\n */\n @Prop() imageData: GenericObject = null;\n /**\n * The gravity of the badge.\n * @default BadgeType.INFO\n */\n @Prop() type: BadgeType = BadgeType.INFO;\n /**\n * The text displayed inside the badge.\n * @default null\n */\n @Prop() text: string = null;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-badge-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupEventPayload>;\n\n onKupClick() {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupBadgeProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupBadgeProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n let imageEl: HTMLElement = null;\n if (!this.text && this.imageData) {\n if (!this.imageData.sizeX) {\n this.imageData.sizeX = '1em';\n }\n if (!this.imageData.sizeY) {\n this.imageData.sizeY = '1em';\n }\n if (!this.imageData.color) {\n this.imageData.color = `var(${KupThemeColorValues.TEXT_ON_PRIMARY})`;\n }\n imageEl = <FImage {...this.imageData}></FImage>;\n }\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div\n id={componentWrapperId}\n class={this.type}\n onClick={() => this.onKupClick()}\n >\n {this.text}\n {imageEl}\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-button component.\n * Used to export every prop in an object.\n */\nexport enum KupButtonProps {\n buttonType = 'Sets the type of the button.',\n checked = 'When set to true, the icon button state will be on.',\n customStyle = 'Custom style of the component.',\n contentAlign = 'Manage the align contents of the button. It could be right, left, center, around, evenly, between. Center is the default',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n icon = 'When set, the button will show this icon.',\n iconOff = 'When set, the icon button off state will show this icon. Otherwise, an outlined version of the icon prop will be displayed.',\n label = 'When set, the button will show this text.',\n placeholderIcon = 'When set, the button will show this icon, if icon/image not found.',\n styling = 'Defines the style of the button. Styles available: \"flat\", \"outlined\" and \"raised\" which is also the default.',\n showSpinner = 'When set to true, the button show a spinner received in slot.',\n toggable = 'When set to true, the icon button will be toggable on/off.',\n trailingIcon = 'When set, the icon will be shown after the text.',\n}\n/**\n * Generic payload of a kup event.\n */\nexport interface KupButtonClickEventPayload extends KupEventPayload {\n value: string;\n}\n","@import './styles/kup-button-main.scss';\n@import './styles/kup-button-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n KupComponentSizing,\n type GenericObject,\n type KupComponent,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FButton } from '../../f-components/f-button/f-button';\nimport {\n FButtonAlign,\n FButtonProps,\n FButtonStyling,\n} from '../../f-components/f-button/f-button-declarations';\nimport {\n KupButtonClickEventPayload,\n KupButtonProps,\n} from './kup-button-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-button',\n styleUrl: 'kup-button.scss',\n shadow: true,\n})\nexport class KupButton {\n /**\n * References the root HTML element of the component (<kup-button>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The value of the component.\n * @default \"\"\n */\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n /**\n * Sets the type of the button.\n * @default null\n */\n @Prop() buttonType: string = null;\n /**\n * When set to true, the icon button state will be on.\n * @default false\n */\n @Prop({ mutable: true }) checked: boolean = false;\n /**\n * Sets the type of the button.\n * @default null\n */\n @Prop() contentAlign: FButtonAlign = FButtonAlign.CENTER;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * When set, the button will show this icon.\n * @default null\n */\n @Prop() icon: string = null;\n /**\n * When set, the icon button off state will show this icon. Otherwise, an outlined version of the icon prop will be displayed.\n * @default null\n */\n @Prop() iconOff: string = null;\n /**\n * When set, the button will show this text.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() blackMode: boolean = false;\n /**\n * When set, the button will show this icon, if icon/image not found.\n * @default null\n */\n @Prop() placeholderIcon: string = null;\n /**\n * Defines the style of the button. Styles available: \"flat\", \"outlined\" and \"raised\" which is also the default.\n * @default FButtonStyling.RAISED\n */\n @Prop() styling: FButtonStyling = FButtonStyling.RAISED;\n /**\n * When set to true, the button show a spinner received in slot.\n * @default false\n */\n @Prop() showSpinner: boolean = false;\n /**\n * When set to true, the icon button will be toggable on/off.\n * @default false\n */\n @Prop() toggable: boolean = false;\n /**\n * When set, the icon will be shown after the text.\n * @default false\n */\n @Prop() trailingIcon: boolean = false;\n /**\n * Sets the type of the button\n * @default KupComponentSizing.MEDIUM\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.MEDIUM;\n\n @Prop() keyShortcut: string;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the button loses focus.\n */\n @Event({\n eventName: 'kup-button-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupButtonClickEventPayload>;\n /**\n * Triggered when the button is clicked.\n */\n @Event({\n eventName: 'kup-button-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupButtonClickEventPayload>;\n /**\n * Triggered when the button is focused.\n */\n @Event({\n eventName: 'kup-button-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupButtonClickEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupClick() {\n if (!this.label && this.icon) {\n if (this.checked) {\n this.checked = false;\n this.value = 'off';\n } else {\n this.checked = true;\n this.value = 'on';\n }\n } else {\n this.value = 'N/A';\n }\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupButtonProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupButtonProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n if (!this.label && this.icon) {\n if (this.checked) {\n this.value = 'on';\n } else {\n this.value = 'off';\n }\n } else {\n this.value = 'N/A';\n }\n\n if (this.keyShortcut && !this.disabled) {\n this.kupManager.keysBinding.register(\n this.keyShortcut,\n this.onKupClick.bind(this)\n );\n }\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FButtonProps = {\n buttonType: this.buttonType,\n checked: this.checked,\n contentAlign: this.contentAlign,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n fullHeight: this.rootElement.classList.contains('kup-full-height')\n ? true\n : false,\n fullWidth: this.rootElement.classList.contains('kup-full-width')\n ? true\n : false,\n icon: this.icon,\n iconOff: this.iconOff,\n placeholderIcon: this.placeholderIcon,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n label: this.label,\n large: this.rootElement.classList.contains('kup-large')\n ? true\n : false,\n blackMode: this.blackMode,\n neutral: this.rootElement.classList.contains('kup-neutral')\n ? true\n : false,\n pulsating: this.rootElement.classList.contains('kup-pulsating')\n ? true\n : false,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n shaped: this.rootElement.classList.contains('kup-shaped')\n ? true\n : false,\n slim: this.rootElement.classList.contains('kup-slim')\n ? true\n : false,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n sizing: this.sizing,\n styling: this.styling,\n showSpinner: this.showSpinner,\n title: this.rootElement.title,\n toggable: this.toggable,\n trailingIcon: this.trailingIcon,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n onBlur: () => this.onKupBlur(),\n onClick: () => this.onKupClick(),\n onFocus: () => this.onKupFocus(),\n };\n\n if (!this.label && !this.icon) {\n this.kupManager.debug.logMessage(\n this,\n 'Empty button.',\n KupDebugCategory.WARNING\n );\n return;\n }\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FButton {...props} />\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n\n if (this.keyShortcut) {\n this.kupManager.keysBinding.unregister(this.keyShortcut);\n }\n }\n}\n","import { KupDataNode } from '../../managers/kup-data/kup-data-declarations';\nimport { KupObj } from '../../managers/kup-objects/kup-objects-declarations';\nimport {\n GenericObject,\n KupComponentSizing,\n KupEventPayload,\n} from '../../types/GenericTypes';\n\n/**\n * Props of the kup-button-list component.\n * Used to export every prop in an object.\n */\nexport enum KupButtonListProps {\n blackMode = 'Forced component on a black background. It prescinds the theme',\n contentAlign = 'Manage the align contents of the button. It could be right, left, center, around, evenly, between. Center is the default',\n columns = 'Number of columns.',\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components.',\n disabled = 'When set to true, the sub-components are disabled.',\n showSelection = 'When set to true, highlights the selected button with the secondary color of KupTheme.',\n styling = 'Defines the style of the buttons. Available styles are \"flat\", \"outlined\" and \"raised\" (which is the default).',\n}\n\nexport interface KupButtonListNode extends KupDataNode {\n children?: KupButtonListNode[];\n data?: GenericObject;\n}\n\nexport interface KupButtonListClickEventPayload extends KupEventPayload {\n index: string;\n subIndex: string;\n obj: KupObj;\n}\n","@import './styles/kup-button-list-main.scss';\n@import './styles/kup-button-list-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n VNode,\n Watch,\n} from '@stencil/core';\nimport {\n KupComponentSizing,\n type GenericObject,\n type KupComponent,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FButton } from '../../f-components/f-button/f-button';\nimport {\n FButtonAlign,\n FButtonProps,\n FButtonStyling,\n} from '../../f-components/f-button/f-button-declarations';\nimport {\n KupButtonListClickEventPayload,\n KupButtonListNode,\n KupButtonListProps,\n} from './kup-button-list-declarations';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { getProps, setProps } from '../../utils/utils';\nimport { KupDropdownButtonEventPayload } from '../kup-dropdown-button/kup-dropdown-button-declarations';\nimport { KupObj } from '../../managers/kup-objects/kup-objects-declarations';\nimport { KupDataDataset } from '../../managers/kup-data/kup-data-declarations';\n\n@Component({\n tag: 'kup-button-list',\n styleUrl: 'kup-button-list.scss',\n shadow: true,\n})\nexport class KupButtonList {\n /**\n * References the root HTML element of the component (<kup-button-list>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The id of the selected button.\n * @default \"\"\n */\n @State() selected: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n /**\n * Sets the type of the button.\n * @default false\n */\n @Prop() blackMode: boolean = false;\n /**\n * Sets the type of the button.\n * @default null\n */\n @Prop() contentAlign: FButtonAlign = FButtonAlign.CENTER;\n /**\n * Number of columns.\n * @default 0\n */\n @Prop() columns: number = 0;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components.\n * @default []\n */\n @Prop({ mutable: true }) data: KupButtonListNode[] = [];\n /**\n * When set to true, the sub-components are disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * When set to true, highlights the selected button with the secondary color of KupTheme.\n * @default true\n */\n @Prop() showSelection: boolean = true;\n /**\n * Defines the size of the buttons. Available styles are from \"extra-small\" to \"extra-large\". Small will be the default\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * Defines the style of the buttons. Available styles are \"outlined\" of \"flat\" (which is the default).\n * @default FButtonStyling.RAISED\n */\n @Prop({ reflect: true }) styling: FButtonStyling = FButtonStyling.RAISED;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-buttonlist-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupButtonListClickEventPayload>;\n\n onKupClick(index: string, subIndex: string): void {\n this.selected = index;\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n index: index,\n subIndex: subIndex,\n obj: this.getObjForEvent(index, subIndex),\n });\n }\n\n onDropDownItemClick(e: CustomEvent, index: string): void {\n this.selected = index;\n this.onKupClick(index, e.detail.value);\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('data')\n checkDataset(newData: KupButtonListNode[] | KupDataDataset) {\n if (!newData) {\n newData = [];\n }\n if ((newData as KupDataDataset).columns) {\n this.kupManager.debug.logMessage(\n this,\n 'Detected KupDataDataset: converting rows to nodes.',\n KupDebugCategory.WARNING\n );\n const data = this.data as KupDataDataset;\n this.data = this.kupManager.data.row.toNode(data);\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupButtonListProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupButtonListProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n private renderButton(node: KupButtonListNode, index: number): VNode {\n if (node === null) {\n this.kupManager.debug.logMessage(\n this,\n 'Empty data button.',\n KupDebugCategory.WARNING\n );\n return null;\n }\n const data: GenericObject = this.prepareDataFromTreeNode(node, index);\n if (!data.label && !data.icon) {\n this.kupManager.debug.logMessage(\n this,\n 'Empty button.',\n KupDebugCategory.WARNING\n );\n return null;\n }\n\n const props: FButtonProps = {\n blackMode: data.blackMode,\n contentAlign: data.contentAlign,\n checked: data.checked,\n disabled: data.disabled,\n fullHeight: data.fullHeight,\n fullWidth: data.fullWidth,\n icon: data.icon,\n iconOff: data.iconOff,\n placeholderIcon: data.placeholderIcon,\n id: data.id,\n label: data.label,\n large: data.large,\n neutral: this.rootElement.classList.contains('kup-neutral')\n ? true\n : false,\n shaped: data.shaped,\n sizing: data.sizing,\n styling: data.styling,\n toggable: data.toggable,\n trailingIcon: data.trailingIcon,\n title: data.title,\n wrapperClass: this.rootElement.className + ' ' + data.wrapperClass,\n onClick: () => this.onKupClick(data.id, '-1'),\n };\n\n return <FButton {...props} />;\n }\n\n private renderDropdownButton(\n node: KupButtonListNode,\n index: number\n ): VNode {\n if (node === null) {\n this.kupManager.debug.logMessage(\n this,\n 'Empty data dropdown button.',\n KupDebugCategory.WARNING\n );\n return null;\n }\n const data: GenericObject = this.prepareDataFromTreeNode(node, index);\n if (!data.label && !data.icon && !node?.data.dropdownOnly) {\n this.kupManager.debug.logMessage(\n this,\n 'Empty dropdown button.',\n KupDebugCategory.WARNING\n );\n return null;\n }\n data.data = {\n 'kup-list': {\n data: this.getKupListDataForChildren(node.children),\n showIcons: true,\n },\n };\n data.styling = data.id === this.selected ? 'raised' : data.styling;\n data.contentalign = data.contentalign;\n return (\n <kup-dropdown-button\n class={this.rootElement.className + ' ' + data.wrapperClass}\n {...data}\n onkup-dropdownbutton-click={() =>\n this.onKupClick(index.toString(), '-1')\n }\n onkup-dropdownbutton-itemclick={(\n e: CustomEvent<KupDropdownButtonEventPayload>\n ) => this.onDropDownItemClick(e, index.toString())}\n />\n );\n }\n\n private prepareDataFromTreeNode(\n node: KupButtonListNode,\n index: number\n ): GenericObject {\n const data: GenericObject = node.data != null ? { ...node.data } : {};\n\n if (this.customStyle != null && this.customStyle.trim() != '') {\n data.customStyle = this.customStyle;\n }\n if (this.blackMode == true) {\n data.blackMode = true;\n }\n if (this.disabled == true || node.disabled == true) {\n data.disabled = true;\n }\n if (this.styling != null && this.styling.trim() != '') {\n data.styling = this.styling;\n }\n if (this.sizing != null) {\n data.sizing = this.sizing;\n }\n if (this.contentAlign) {\n data.contentAlign = this.contentAlign;\n }\n if (data.icon == null) {\n data.icon = node.icon;\n }\n if (data.placeholderIcon == null) {\n data.placeholderIcon = node.placeholderIcon;\n }\n if (data.label == null) {\n data.label = node.value;\n }\n data.fullHeight = this.rootElement.classList.contains('kup-full-height')\n ? true\n : false;\n data.fullWidth = this.rootElement.classList.contains('kup-full-width')\n ? true\n : false;\n data.id = index.toString();\n data.large = this.rootElement.classList.contains('kup-large')\n ? true\n : false;\n data.pulsating = this.rootElement.classList.contains('kup-pulsating')\n ? true\n : false;\n data.shaped = this.rootElement.classList.contains('kup-shaped')\n ? true\n : false;\n data.slim = this.rootElement.classList.contains('kup-slim')\n ? true\n : false;\n if (!data.wrapperClass) {\n data.wrapperClass = '';\n }\n if (this.selected == data.id) {\n data.wrapperClass = data.wrapperClass + ' selected';\n }\n\n return data;\n }\n\n private getKupListDataForChildren(\n children: KupButtonListNode[]\n ): KupListNode[] {\n const ris: KupListNode[] = [];\n\n for (let i = 0; i < children.length; i++) {\n const tn: KupButtonListNode = children[i];\n ris.push({\n icon: tn.icon,\n placeholderIcon: tn.placeholderIcon,\n id: i.toString(),\n value: tn.value,\n });\n }\n return ris;\n }\n\n private getObjForEvent(index: string, subIndex: string): KupObj {\n let indexInt: number = Number(index);\n let subIndexInt: number = -1;\n if (subIndex != null && subIndex.trim() != '') {\n subIndexInt = Number(subIndex);\n }\n\n let tn: KupButtonListNode = this.data[indexInt];\n if (subIndexInt != -1) {\n return tn.children[subIndexInt].obj;\n }\n return tn.obj;\n }\n\n private renderButtons(): VNode[] {\n if (this.data == null || this.data.length < 1) {\n return null;\n }\n // if (this.styling === 'raised') {\n // this.kupManager.debug.logMessage(\n // this,\n // 'styling=\"raised\" is not allowed, please use \"flat\" or \"outlined\" instead.',\n // KupDebugCategory.WARNING\n // );\n // return null;\n // }\n\n // 08/07/24 --> Removed check all icons for redUP Problem\n\n // const haveIcons: boolean = this.data.some((button) => button.icon);\n // if (haveIcons) {\n // const allButtonsHaveIconsOrDropdown: boolean = this.data.every(\n // (button) => button.icon || button.data.dropdownOnly\n // );\n // // if (!allButtonsHaveIconsOrDropdown) {\n // // this.kupManager.debug.logMessage(\n // // this,\n // // 'Not all buttons have icons, please add icons to all buttons or remove them from all buttons.',\n // // KupDebugCategory.WARNING\n // // );\n // // return null;\n // // }\n // }\n\n const columns: VNode[] = [];\n for (let i = 0; i < this.data.length; i++) {\n const node: KupButtonListNode = this.data[i];\n let b: VNode = null;\n if (node.children != null && node.children.length > 0) {\n b = this.renderDropdownButton(node, i);\n } else {\n b = this.renderButton(node, i);\n }\n if (b) {\n columns.push(b);\n }\n }\n return columns;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.checkDataset(this.data);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const buttons: VNode[] = this.renderButtons();\n let nrOfColumns: number = this.columns;\n if (this.data != null && this.data.length > 0 && nrOfColumns <= 0) {\n nrOfColumns = this.data.length;\n }\n\n const hostStyle: GenericObject = {\n '--kup_buttonlist_grid_columns': `repeat(${nrOfColumns}, auto)`,\n };\n\n const classObj: Record<string, boolean> = {\n 'button-list--container': true,\n 'show-selection':\n this.showSelection && this.selected ? true : false,\n };\n\n return (\n <Host style={hostStyle}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <div class={classObj}>{buttons}</div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport { FCell } from '../../../f-components/f-cell/f-cell';\nimport {\n FCellPadding,\n FCellProps,\n FCellShapes,\n} from '../../../f-components/f-cell/f-cell-declarations';\nimport {\n KupDataCell,\n KupDataRowCells,\n} from '../../../managers/kup-data/kup-data-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\n/**\n * 1st box card layout, it can be used as a key-value grid list.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st box layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n const rows: VNode[] = [];\n for (let index = 0; index < component.data.cell.length; index++) {\n const cell = component.data.cell[index] as KupDataCell;\n const column = component.data.columns[index];\n const props: FCellProps = {\n cell: cell,\n column: column,\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [column.name]: cell } },\n };\n rows.push(\n <tr>\n <td class=\"label\">{column.title}</td>\n <td class=\"value\">\n <FCell {...props}></FCell>\n </td>\n </tr>\n );\n }\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <table>{rows}</table>\n </div>\n );\n}\n/**\n * 2nd box card layout, it can be used as a key-value grid list with text occupying the left/right edges of the box.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 2nd box layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n const rows: VNode[] = [];\n for (let index = 0; index < component.data.cell.length; index++) {\n const cell = component.data.cell[index] as KupDataCell;\n const column = component.data.columns[index];\n const props: FCellProps = {\n cell: cell,\n column: column,\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [column.name]: cell } },\n };\n props.cell.cssClass = props.cell.cssClass\n ? props.cell.cssClass + ' c-right-aligned'\n : 'c-right-aligned';\n rows.push(\n <tr>\n <td class=\"label\">{column.title}</td>\n <td class=\"value\">\n <FCell {...props}></FCell>\n </td>\n </tr>\n );\n }\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <table>{rows}</table>\n </div>\n );\n}\n/**\n * 3rd box card layout, it can be used as a key-value row list.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 3rd box layout virtual node.\n */\nexport function create3(component: KupCard): VNode {\n const rows: VNode[] = [];\n for (let index = 0; index < component.data.cell.length; index++) {\n const cell = component.data.cell[index] as KupDataCell;\n const column = component.data.columns[index];\n const props: FCellProps = {\n cell: cell,\n column: column,\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [column.name]: cell } },\n };\n rows.push(\n <div class=\"flex-container\">\n <div class=\"label\">{column.title}</div>\n <div class=\"value\">\n <FCell {...props}></FCell>\n </div>\n </div>\n );\n }\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <div class=\"container\">{rows}</div>\n </div>\n );\n}\n/**\n * 4th box card layout, image and value.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 4th box layout virtual node.\n */\nexport function create4(component: KupCard): VNode {\n const cells = component.data.cell as KupDataCell[];\n const columns = component.data.columns;\n let image: number = null;\n let value: number = null;\n for (let index = 0; index < cells.length; index++) {\n const cell = cells[index];\n const isImage =\n dom.ketchup.objects.isImage(cell.obj) ||\n dom.ketchup.objects.isIcon(cell.obj) ||\n cell.shape?.toUpperCase() === FCellShapes.IMAGE;\n if (!image && isImage) {\n image = index;\n if (!cell.data) {\n cell.data = { resource: cell.value };\n }\n }\n if (!value && !isImage) {\n value = index;\n }\n }\n const imagePropsCells: KupDataRowCells = {};\n if (image && columns[image]) {\n imagePropsCells[columns[image].name] = cells[image];\n }\n const imageProps: FCellProps = {\n cell: cells[image],\n column: columns[image],\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: imagePropsCells },\n wrapperClass: 'c-centered',\n };\n const valuePropsCells: KupDataRowCells = {};\n if (value && columns[value]) {\n valuePropsCells[columns[value].name] = cells[value];\n }\n const valueProps: FCellProps = {\n cell: cells[value],\n column: columns[value],\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: valuePropsCells },\n wrapperClass: 'c-centered',\n };\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <div class=\"container\">\n <div class=\"image\">\n {image && <FCell {...imageProps}></FCell>}\n </div>\n <div class=\"value\">\n {value && <FCell {...valueProps}></FCell>}\n </div>\n </div>\n </div>\n );\n}\n/**\n * 5th box card layout, image on the left and rows of text.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 5th box layout virtual node.\n */\nexport function create5(component: KupCard): VNode {\n const cells = component.data.cell as KupDataCell[];\n const columns = component.data.columns;\n const rows = [];\n let imageProps: FCellProps = null;\n for (let index = 0; index < cells.length; index++) {\n const cell = cells[index];\n const column = component.data.columns[index];\n const isImage =\n dom.ketchup.objects.isImage(cell.obj) ||\n dom.ketchup.objects.isIcon(cell.obj) ||\n cell.shape?.toUpperCase() === FCellShapes.IMAGE;\n if (!imageProps && isImage) {\n imageProps = {\n cell: cells[index],\n column: columns[index],\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [columns[index].name]: cells[index] } },\n wrapperClass: 'c-centered',\n };\n if (!cell.data) {\n cell.data = { resource: cell.value };\n }\n } else {\n const props: FCellProps = {\n cell: cell,\n column: column,\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [column.name]: cell } },\n };\n rows.push(\n <tr>\n <td class=\"label\">{column.title}</td>\n <td class={`value`}>\n <FCell {...props}></FCell>\n </td>\n </tr>\n );\n }\n }\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <div class=\"container\">\n {imageProps ? (\n <div class=\"image\">\n <FCell {...imageProps}></FCell>\n </div>\n ) : null}\n <div class=\"table\">\n <table>{rows}</table>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 6th box card layout, image on the left and vertical list of text.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 6th box layout virtual node.\n */\nexport function create6(component: KupCard): VNode {\n const cells = component.data.cell as KupDataCell[];\n const columns = component.data.columns;\n const rows = [];\n let image: number = null;\n for (let index = 0; index < cells.length; index++) {\n const cell = cells[index];\n const column = component.data.columns[index];\n const isImage =\n dom.ketchup.objects.isImage(cell.obj) ||\n dom.ketchup.objects.isIcon(cell.obj) ||\n cell.shape?.toUpperCase() === FCellShapes.IMAGE;\n if (!image && isImage) {\n image = index;\n if (!cell.data) {\n cell.data = { resource: cell.value };\n }\n } else {\n const props: FCellProps = {\n cell: cell,\n column: column,\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: { [column.name]: cell } },\n };\n rows.push(\n <tr>\n <td class=\"label\">{column.title}</td>\n </tr>\n );\n rows.push(\n <tr>\n <td class={`value`}>\n <FCell {...props}></FCell>\n </td>\n </tr>\n );\n }\n }\n const imagePropsCells: KupDataRowCells = {};\n if (image && columns[image]) {\n imagePropsCells[columns[image].name] = cells[image];\n }\n\n const imageProps: FCellProps = {\n cell: cells[image],\n column: columns[image],\n component: component,\n density: FCellPadding.NONE,\n renderKup: true,\n row: { cells: imagePropsCells },\n wrapperClass: 'c-centered',\n };\n\n return (\n <div class={`box-layout-${component.layoutNumber}`}>\n <div class=\"container\">\n <div class=\"image\">\n {image && <FCell {...imageProps}></FCell>}\n </div>\n <div class=\"table\">\n <table>{rows}</table>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 7th box card layout, image above and rows of text.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 7th box layout virtual node.\n */\nexport function create7(component: KupCard): VNode {\n return create5(component);\n}\n/**\n * 8th box card layout, image above and vertical list of text.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th box layout virtual node.\n */\nexport function create8(component: KupCard): VNode {\n return create6(component);\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-date-picker component.\n * Used to export every prop in an object.\n */\nexport enum KupDatePickerProps {\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n firstDayIndex = 'First day number (0 - sunday, 1 - monday, ...)',\n initialValue = 'Sets the initial value of the component',\n sizing = 'Sets the size of the component. Medium is the default',\n showIcon = 'You can set if u want to show the calendar icon to toggle date-picker. True is the default',\n showPreviousNextMonthDays = 'You can set if show the previous/next month days in calendar',\n}\nexport enum SourceEvent {\n DATE = 'date',\n MONTH = 'month',\n YEAR = 'year',\n}\n\nexport interface KupDatePickerEventPayload extends KupEventPayload {\n value: any;\n}\n","import { h } from '@stencil/core';\nimport { FButton } from '../../../f-components/f-button/f-button';\nimport {\n FButtonProps,\n FButtonStyling,\n} from '../../../f-components/f-button/f-button-declarations';\nimport {\n KupDateTimeFormatOptionsMonth,\n KupDatesFormats,\n} from '../../../managers/kup-dates/kup-dates-declarations';\nimport {\n KupDom,\n KupManager,\n} from '../../../managers/kup-manager/kup-manager-declarations';\nimport { KupObj } from '../../../managers/kup-objects/kup-objects-declarations';\nimport { SourceEvent } from '../../kup-date-picker/kup-date-picker-declarations';\nimport { KupCard } from '../kup-card';\nimport {\n KupCardBuiltInCalendar,\n KupCardBuiltInCalendarOptions,\n} from '../kup-card-declarations';\nimport { fillString } from '../../../utils/utils';\nimport { KupLanguageGeneric } from '../../../managers/kup-language/kup-language-declarations';\nimport { kupManagerInstance } from '../../../managers/kup-manager/kup-manager';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nconst kupManager: KupManager = kupManagerInstance();\nexport function prepareCalendar(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (!el.kupData) el.kupData = {};\n\n if (component.data && component.data.options) {\n const opts = component.data.options as KupCardBuiltInCalendarOptions;\n if (opts.resetStatus) {\n el.kupData = {};\n const obj = opts.initialValue as KupObj;\n if (opts.initialValue) {\n if (obj && obj.k) {\n setValue(component, new Date(obj.k));\n } else {\n setValue(component, new Date(opts.initialValue as string));\n }\n }\n if (\n opts.firstDayIndex !== null &&\n opts.firstDayIndex !== undefined\n ) {\n el.kupData.firstDayIndex = opts.firstDayIndex;\n }\n if (\n opts.showPreviousNextMonthDays != null &&\n opts.showPreviousNextMonthDays !== undefined\n ) {\n el.kupData.showPreviousNextMonthDays =\n opts.showPreviousNextMonthDays;\n }\n opts.resetStatus = false;\n }\n }\n\n if (!el.kupData.value) setValue(component, new Date());\n\n const months = dom.ketchup.dates.getMonthsAsString();\n const curYear: number = getYear(component);\n const curMonth: number = getMonth(component);\n const yearRange = getInitEndYear(curYear);\n const initYear: number = yearRange.initYear;\n const endYear: number = yearRange.endYear;\n\n let changeViewButtonLabel: string = 'not-set';\n switch (getView(component)) {\n case SourceEvent.DATE: {\n changeViewButtonLabel =\n months[curMonth] + ', ' + curYear.toString();\n break;\n }\n case SourceEvent.MONTH: {\n changeViewButtonLabel = curYear.toString();\n break;\n }\n case SourceEvent.YEAR: {\n changeViewButtonLabel =\n initYear.toString() + ' - ' + endYear.toString();\n break;\n }\n }\n\n const prevButtonProp: FButtonProps = {\n icon: 'chevron_left',\n wrapperClass: 'prev-page',\n onClick: () => prevPage(component),\n };\n const prevButtonComp = <FButton {...prevButtonProp} />;\n\n const nextButtonProp: FButtonProps = {\n icon: 'chevron_right',\n wrapperClass: 'next-page',\n onClick: () => nextPage(component),\n };\n const nextButtonComp = <FButton {...nextButtonProp} />;\n\n const changeViewButtonProp: FButtonProps = {\n wrapperClass: 'change-view-button kup-neutral',\n styling: FButtonStyling.FLAT,\n label: changeViewButtonLabel,\n onClick: () => changeView(component),\n id: 'change-view-button',\n };\n const goToTodayDateButton: FButtonProps = {\n icon: 'calendar',\n wrapperClass: 'today-navigation-button kup-neutral',\n styling: FButtonStyling.FLAT,\n // label: 'Oggi',\n title: kupManager.language.translate(KupLanguageGeneric.TODAY),\n onClick: () => setDateToday(component),\n };\n //text-transform:capitalize\n return (\n <div id={component.rootElement.id + '_calendar'}>\n <div class=\"section-1\">\n <div class=\"sub-1 nav\">\n {prevButtonComp}\n <FButton {...goToTodayDateButton} />\n <FButton {...changeViewButtonProp} />\n {nextButtonComp}\n </div>\n </div>\n <div class=\"section-2\">{createCalendar(component)}</div>\n </div>\n );\n}\n\nfunction setValue(component: KupCard, value: Date) {\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n value = new Date();\n }\n const el = component.rootElement as KupCardBuiltInCalendar;\n el.kupData.value = value;\n el.kupData.day = el.kupData.value.getDate();\n el.kupData.month = el.kupData.value.getMonth();\n el.kupData.year = el.kupData.value.getFullYear();\n}\n\nfunction getValue(component: KupCard): Date {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (el.kupData.value == null) setValue(component, new Date());\n return el.kupData.value;\n}\n\nfunction getDay(component: KupCard): number {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (el.kupData.day != null) return el.kupData.day;\n return null;\n}\n\nfunction getMonth(component: KupCard): number {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (el.kupData.month != null) return el.kupData.month;\n return null;\n}\n\nfunction getYear(component: KupCard): number {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (el.kupData.year != null) return el.kupData.year;\n return null;\n}\n\nfunction setDay(component: KupCard, value: number) {\n const el = component.rootElement as KupCardBuiltInCalendar;\n el.kupData.day = value;\n}\n\nfunction setMonth(component: KupCard, value: number) {\n const el = component.rootElement as KupCardBuiltInCalendar;\n el.kupData.month = value;\n}\n\nfunction setYear(component: KupCard, value: number) {\n const el = component.rootElement as KupCardBuiltInCalendar;\n el.kupData.year = value;\n}\n\nfunction getFirstDayIndex(component: KupCard): number {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (\n el.kupData.firstDayIndex !== null &&\n el.kupData.firstDayIndex !== undefined\n )\n return el.kupData.firstDayIndex;\n return 1;\n}\n\nfunction isShowPreviousNextMonthDays(component: KupCard): boolean {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (\n el.kupData.showPreviousNextMonthDays !== null &&\n el.kupData.showPreviousNextMonthDays !== undefined\n )\n return el.kupData.showPreviousNextMonthDays;\n return true;\n}\n\nfunction getView(component: KupCard): SourceEvent {\n const el = component.rootElement as KupCardBuiltInCalendar;\n if (el.kupData.calendarView) return el.kupData.calendarView;\n return SourceEvent.DATE;\n}\n\nfunction setView(component: KupCard, value: SourceEvent) {\n const el = component.rootElement as KupCardBuiltInCalendar;\n el.kupData.calendarView = value;\n}\n\nfunction createCalendar(component: KupCard) {\n switch (getView(component)) {\n case SourceEvent.DATE: {\n return createDaysCalendar(component);\n }\n case SourceEvent.MONTH: {\n return createMonthsCalendar(component);\n }\n case SourceEvent.YEAR: {\n return createYearsCalendar(component);\n }\n }\n}\n\nfunction createDaysCalendar(component: KupCard) {\n const days = dom.ketchup.dates.getDaysOfWeekAsString(\n getFirstDayIndex(component)\n );\n\n const selectedDate: Date = getValue(component);\n const selectedDay: number = getDay(component);\n const selectedMonth: number = getMonth(component);\n const selectedYear: number = getYear(component);\n\n const thead = [];\n const tbody = [];\n for (let index = 0; index < days.length; index++) {\n thead.push(\n <th>\n <span class=\"item-text\">{days[index]}</span>\n </th>\n );\n }\n\n const firstMonthDay = new Date(selectedYear, selectedMonth, 1);\n const lastMonthDay = new Date(selectedYear, selectedMonth + 1, 0);\n const today = new Date();\n\n const lastPreviousMonthDate = new Date(selectedYear, selectedMonth, 0);\n\n const finish: boolean = false;\n let currentDayIndex = getFirstDayIndex(component);\n const firstMonthDayIndex = firstMonthDay.getDay();\n let row = [];\n let daysForRowAdded = 0;\n const showPreviousNextMonthDays = isShowPreviousNextMonthDays(component);\n let substractDays = 0;\n while (!finish) {\n if (currentDayIndex == firstMonthDayIndex) {\n break;\n }\n row.unshift(\n <td class=\"item-disabled\">\n <span class=\"item-number\">\n {showPreviousNextMonthDays\n ? lastPreviousMonthDate.getDate() - substractDays++\n : ''}\n </span>\n </td>\n );\n currentDayIndex++;\n daysForRowAdded++;\n if (currentDayIndex > 6) {\n currentDayIndex = 0;\n }\n }\n let dayCount = 1;\n while (dayCount <= lastMonthDay.getDate()) {\n let currentRowLastItem = daysForRowAdded;\n for (let i = daysForRowAdded; i < 7; i++) {\n let dayClass = 'item';\n let dataIndex = {\n 'data-index':\n selectedYear.toString() +\n '-' +\n fillString((selectedMonth + 1).toString(), '0', 2, true) +\n '-' +\n fillString(dayCount.toString(), '0', 2, true),\n };\n if (\n (selectedDay != null && dayCount === selectedDay) ||\n (dayCount === selectedDate.getDate() &&\n selectedMonth === selectedDate.getMonth() &&\n selectedYear === selectedDate.getFullYear())\n ) {\n dayClass += ' selected';\n }\n let itemClass = 'item-number';\n if (\n today.getFullYear() == selectedYear &&\n today.getMonth() == selectedMonth &&\n today.getDate() == dayCount\n ) {\n itemClass += ' today';\n }\n row.push(\n <td class={dayClass}>\n <span\n {...dataIndex}\n class={itemClass}\n onClick={() => {\n onCalendarItemClick(\n component,\n dataIndex['data-index']\n );\n }}\n >\n {dayCount}\n </span>\n </td>\n );\n dayCount++;\n currentRowLastItem = i;\n if (dayCount > lastMonthDay.getDate()) {\n break;\n }\n }\n let nextMonthDay = 1;\n for (let i = currentRowLastItem + 1; i < 7; i++) {\n row.push(\n <td class=\"item-disabled\">\n <span class=\"item-number\">\n {showPreviousNextMonthDays ? nextMonthDay++ : ''}\n </span>\n </td>\n );\n }\n if (row.length > 0) {\n tbody.push(<tr>{row}</tr>);\n row = [];\n }\n daysForRowAdded = 0;\n }\n return (\n <div>\n <table class=\"calendar\">\n <thead>{thead}</thead>\n <tbody>{tbody}</tbody>\n </table>\n </div>\n );\n}\n\nfunction createMonthsCalendar(component: KupCard) {\n const months = dom.ketchup.dates.getMonthsAsString(\n KupDateTimeFormatOptionsMonth.SHORT\n );\n\n let selectedDay: number = getDay(component);\n const selectedMonth: number = getMonth(component);\n const selectedYear: number = getYear(component);\n if (selectedDay == null) selectedDay = 1;\n\n const tbody = [];\n let row = [];\n let monthCount = 0;\n while (monthCount < 12) {\n for (let i = 0; i < 4; i++) {\n let monthClass = 'item';\n const dataIndex = {\n 'data-index':\n selectedYear.toString() +\n '-' +\n fillString((monthCount + 1).toString(), '0', 2, true) +\n '-' +\n fillString(selectedDay.toString(), '0', 2, true),\n };\n if (monthCount === selectedMonth) {\n monthClass += ' selected';\n }\n row.push(\n <td class={monthClass}>\n <span\n {...dataIndex}\n class=\"item-number\"\n onClick={() => {\n onCalendarMonthYearItemClick(\n component,\n dataIndex['data-index']\n );\n }}\n >\n {months[monthCount]}\n </span>\n </td>\n );\n monthCount++;\n }\n if (row.length > 0) {\n tbody.push(<tr>{row}</tr>);\n row = [];\n }\n }\n\n return (\n <table class=\"calendar\">\n <tbody>{tbody}</tbody>\n </table>\n );\n}\n\nfunction createYearsCalendar(component: KupCard) {\n let selectedDay: number = getDay(component);\n const selectedMonth: number = getMonth(component);\n const selectedYear: number = getYear(component);\n if (selectedDay == null) selectedDay = 1;\n\n const yearRange = getInitEndYear(selectedYear);\n const initYear: number = yearRange.initYear;\n const endYear: number = yearRange.endYear;\n\n const tbody = [];\n let row = [];\n let yearCount = initYear;\n while (yearCount <= endYear) {\n for (let i = 0; i < 4; i++) {\n let yearClass = 'item';\n let dataIndex = {\n 'data-index':\n yearCount.toString() +\n '-' +\n fillString((selectedMonth + 1).toString(), '0', 2, true) +\n '-' +\n fillString(selectedDay.toString(), '0', 2, true),\n };\n if (yearCount === selectedYear) {\n yearClass += ' selected';\n }\n row.push(\n <td class={yearClass}>\n <span\n {...dataIndex}\n class=\"item-number\"\n onClick={() => {\n onCalendarMonthYearItemClick(\n component,\n dataIndex['data-index']\n );\n }}\n >\n {yearCount}\n </span>\n </td>\n );\n yearCount++;\n }\n if (row.length > 0) {\n tbody.push(<tr>{row}</tr>);\n row = [];\n }\n }\n\n return (\n <table class=\"calendar\">\n <tbody>{tbody}</tbody>\n </table>\n );\n}\n\nfunction prevPage(component: KupCard) {\n let mm: number = getMonth(component);\n let yy: number = getYear(component);\n\n if (getView(component) == SourceEvent.DATE) {\n if (mm < 1) {\n mm = 11;\n yy--;\n } else {\n mm--;\n }\n }\n if (getView(component) == SourceEvent.MONTH) {\n yy--;\n }\n if (getView(component) == SourceEvent.YEAR) {\n let yearRange = getInitEndYear(yy);\n yy = yearRange.initYear - 1;\n }\n setDay(component, null);\n setMonth(component, mm);\n setYear(component, yy);\n refresh(component);\n}\n\nfunction nextPage(component: KupCard) {\n let mm: number = getMonth(component);\n let yy: number = getYear(component);\n\n if (getView(component) == SourceEvent.DATE) {\n if (mm > 10) {\n mm = 0;\n yy++;\n } else {\n mm++;\n }\n }\n if (getView(component) == SourceEvent.MONTH) {\n yy++;\n }\n if (getView(component) == SourceEvent.YEAR) {\n const yearRange = getInitEndYear(yy);\n yy = yearRange.endYear + 1;\n }\n\n setDay(component, null);\n setMonth(component, mm);\n setYear(component, yy);\n refresh(component);\n}\n\nfunction getInitEndYear(curYear: number): {\n initYear: number;\n endYear: number;\n} {\n const initYear: number = curYear - (curYear % 10);\n const endYear: number = initYear + 16 - 1;\n\n return { initYear: initYear, endYear: endYear };\n}\n\nfunction changeView(component: KupCard) {\n setDay(component, null);\n switch (getView(component)) {\n case SourceEvent.DATE: {\n setView(component, SourceEvent.MONTH);\n break;\n }\n case SourceEvent.MONTH: {\n setView(component, SourceEvent.YEAR);\n break;\n }\n case SourceEvent.YEAR: {\n setView(component, SourceEvent.DATE);\n break;\n }\n }\n refresh(component);\n}\n\nfunction refresh(component: KupCard) {\n component.refresh();\n}\n\nfunction onCalendarMonthYearItemClick(component: KupCard, value: string) {\n let d: Date;\n if (dom.ketchup.dates.isIsoDate(value)) {\n d = new Date(value);\n } else {\n d = new Date();\n }\n setMonth(component, d.getMonth());\n setYear(component, d.getFullYear());\n\n switch (getView(component)) {\n case SourceEvent.MONTH: {\n setView(component, SourceEvent.DATE);\n break;\n }\n case SourceEvent.YEAR: {\n setView(component, SourceEvent.MONTH);\n break;\n }\n }\n\n refresh(component);\n}\n\nfunction onCalendarItemClick(component: KupCard, value: string) {\n let d: Date;\n if (dom.ketchup.dates.isIsoDate(value)) {\n d = new Date(value);\n } else {\n d = new Date();\n }\n setValue(component, d);\n component.onKupClick(component.rootElement.id, value);\n refresh(component);\n}\nfunction setDateToday(component: KupCard): void {\n setValue(component, new Date());\n component.onKupClick(component.rootElement.id, new Date().toISOString());\n refresh(component);\n}\n","import { h, JSX } from '@stencil/core';\nimport { FButton } from '../../../f-components/f-button/f-button';\nimport {\n FButtonProps,\n FButtonStyling,\n} from '../../../f-components/f-button/f-button-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { KupObj } from '../../../managers/kup-objects/kup-objects-declarations';\nimport { KupCard } from '../kup-card';\nimport {\n KupCardBuiltInClock,\n KupCardBuiltInClockElements,\n KupCardBuiltInClockOptions,\n KupCardCSSClasses,\n} from '../kup-card-declarations';\nimport { KupDatesFormats } from '../../../managers/kup-dates/kup-dates-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nexport function prepareClock(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInClock;\n el.kupData = {};\n if (component.data && component.data.options) {\n const opts = component.data.options as KupCardBuiltInClockOptions;\n const obj = opts.initialValue as KupObj;\n if (opts.initialValue) {\n if (obj && obj.k) el.kupData.value = obj.k;\n else el.kupData.value = opts.initialValue as string;\n }\n if (opts.manageSeconds != null)\n el.kupData.manageSeconds = opts.manageSeconds;\n if (opts.hoursActive != null) el.kupData.hoursActive = opts.hoursActive;\n if (opts.minutesActive != null)\n el.kupData.minutesActive = opts.minutesActive;\n if (opts.secondsActive != null)\n el.kupData.secondsActive = opts.secondsActive;\n } else {\n el.kupData.hoursActive = true;\n }\n\n return prepTimeArea(component);\n}\n\nfunction isManageSeconds(component: KupCard): boolean {\n const el = component.rootElement as KupCardBuiltInClock;\n if (el.kupData.manageSeconds != null) return el.kupData.manageSeconds;\n return false;\n}\n\nfunction getValue(component: KupCard): string {\n const el = component.rootElement as KupCardBuiltInClock;\n if (el.kupData.value) return el.kupData.value;\n return '';\n}\n\nfunction setValue(component: KupCard, value: string) {\n const el = component.rootElement as KupCardBuiltInClock;\n el.kupData.value = value;\n}\n\nfunction getHoursActive(component: KupCard): boolean {\n const el = component.rootElement as KupCardBuiltInClock;\n if (el.kupData.hoursActive != null) return el.kupData.hoursActive;\n return false;\n}\n\nfunction getMinutesActive(component: KupCard): boolean {\n const el = component.rootElement as KupCardBuiltInClock;\n if (el.kupData.minutesActive != null) return el.kupData.minutesActive;\n return false;\n}\n\nfunction getSecondsActive(component: KupCard): boolean {\n const el = component.rootElement as KupCardBuiltInClock;\n if (el.kupData.secondsActive != null) return el.kupData.secondsActive;\n return false;\n}\n\nfunction setElement(component: KupCard, elem: HTMLElement) {\n if (elem) {\n const el = component.rootElement as KupCardBuiltInClock;\n el.kupData[elem.id] = elem;\n }\n}\n\nfunction getElement(component: KupCard, elemId: string): HTMLElement {\n return component.rootElement.shadowRoot.getElementById(elemId);\n}\n\nfunction prepTimeArea(component: KupCard) {\n return (\n <div\n id=\"clock-div\"\n onBlur={(e: any) => {\n if (!isRelatedTargetInThisComponent(e, component)) {\n onKupBlur(component);\n }\n }}\n >\n {createClock(component)}\n </div>\n );\n}\n\nfunction onKupClockItemClick(\n e: CustomEvent,\n component: KupCard,\n value?: string\n) {\n if (e != null) {\n if (value == null) {\n value = e.detail.selected.id;\n }\n }\n setClockValueSelected(component, value);\n\n component.onKupClick(component.rootElement.id, value);\n}\n\nfunction setClockValueSelected(component: KupCard, newValue?: string) {\n if (newValue == null) {\n newValue = getValue(component);\n }\n if (newValue == null) {\n return;\n }\n setValue(component, newValue);\n}\n\nfunction isRelatedTargetInThisComponent(e: any, component: KupCard): boolean {\n if (!e.relatedTarget) {\n return false;\n }\n let id = e.relatedTarget.id;\n if (id == null || id.trim() == '') {\n return false;\n }\n if (id == getElement(component, KupCardBuiltInClockElements.CLOCK).id) {\n return true;\n }\n\n let idConc = '#clock-div#confirm#';\n return idConc.indexOf('#' + id + '#') >= 0;\n}\n\nfunction onKupBlur(component: KupCard) {\n component.onKupClick(component.rootElement.id, getValue(component));\n}\n\nfunction createClock(component: KupCard) {\n let selectedTime: Date;\n if (getValue(component)) {\n selectedTime = dom.ketchup.dates.toDate(\n getValue(component),\n isManageSeconds(component)\n ? KupDatesFormats.ISO_TIME\n : KupDatesFormats.ISO_TIME_WITHOUT_SECONDS\n );\n } else {\n selectedTime = new Date();\n }\n\n let hh: string = selectedTime.getHours().toString();\n let mm: string = selectedTime.getMinutes().toString();\n if (hh.length === 1) {\n hh = '0' + hh;\n }\n if (mm.length === 1) {\n mm = '0' + mm;\n }\n let ss: string = '';\n if (isManageSeconds(component)) {\n ss = selectedTime.getSeconds().toString();\n if (ss.length === 1) {\n ss = '0' + ss;\n }\n }\n let seconds: HTMLElement;\n let time: JSX.Element[] = [\n <span\n id={KupCardBuiltInClockElements.HOURS}\n class={`h ${\n getHoursActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n onClick={() => {\n setClockViewActive(component, true, false, false);\n switchView(\n component,\n KupCardBuiltInClockElements.HOURS,\n KupCardBuiltInClockElements.HOURSCIRCLE\n );\n }}\n innerHTML={hh}\n ></span>,\n ':',\n <span\n id={KupCardBuiltInClockElements.MINUTES}\n class={`m ${\n getMinutesActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n onClick={() => {\n setClockViewActive(component, false, true, false);\n switchView(\n component,\n KupCardBuiltInClockElements.MINUTES,\n KupCardBuiltInClockElements.MINUTESCIRCLE\n );\n }}\n innerHTML={mm}\n ></span>,\n ];\n if (isManageSeconds(component)) {\n seconds = (\n <div\n id={KupCardBuiltInClockElements.SECONDSCIRCLE}\n class={`circle seconds ${\n getSecondsActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n >\n {buildClock(60, 101, 115, 115, 'sec unit', 0, 5, ss, component)}\n <div class=\"mid\"></div>\n </div>\n );\n time.push(\n ':',\n <span\n id={KupCardBuiltInClockElements.SECONDS}\n class={`s ${\n getSecondsActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n onClick={() => {\n setClockViewActive(component, false, false, true);\n switchView(\n component,\n KupCardBuiltInClockElements.SECONDS,\n KupCardBuiltInClockElements.SECONDSCIRCLE\n );\n }}\n innerHTML={ss}\n ></span>\n );\n }\n\n const confirmButtonProp: FButtonProps = {\n label: 'Ok',\n styling: FButtonStyling.FLAT,\n onClick: (e: any) => {\n setTimeFromClock(e, component);\n },\n };\n\n return (\n <div\n class=\"clock\"\n id={KupCardBuiltInClockElements.CLOCK}\n ref={(el) => {\n setElement(component, el);\n }}\n >\n <div class=\"top\">{time}</div>\n <div\n id={KupCardBuiltInClockElements.HOURSCIRCLE}\n class={`circle hours ${\n getHoursActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n >\n {buildClock(12, 101, 105, 105, 'hour', 0, 1, hh, component)}\n {buildClock(12, 64, 110, 110, 'hour2', 12, 1, hh, component)}\n <div class=\"mid\"></div>\n </div>\n <div\n id={KupCardBuiltInClockElements.MINUTESCIRCLE}\n class={`circle minutes ${\n getMinutesActive(component) ? KupCardCSSClasses.VISIBLE : ''\n }`}\n ref={(el) => {\n setElement(component, el);\n }}\n >\n {buildClock(60, 101, 115, 115, 'min unit', 0, 5, mm, component)}\n <div class=\"mid\"></div>\n </div>\n {seconds}\n <div class=\"actions\">\n <FButton {...confirmButtonProp}></FButton>\n </div>\n </div>\n );\n}\n\nfunction setClockViewActive(\n component: KupCard,\n hoursAct: boolean,\n minutesAct: boolean,\n secondsAct: boolean\n) {\n const el = component.rootElement as any;\n el.kupData.hoursActive = hoursAct;\n el.kupData.minutesActive = minutesAct;\n el.kupData.secondsActive = secondsAct;\n}\n\nfunction switchView(component: KupCard, elId: string, elCircleId: string) {\n getElement(component, KupCardBuiltInClockElements.HOURS).classList.remove(\n KupCardCSSClasses.VISIBLE\n );\n getElement(\n component,\n KupCardBuiltInClockElements.HOURSCIRCLE\n ).classList.remove(KupCardCSSClasses.VISIBLE);\n getElement(component, KupCardBuiltInClockElements.MINUTES).classList.remove(\n KupCardCSSClasses.VISIBLE\n );\n getElement(\n component,\n KupCardBuiltInClockElements.MINUTESCIRCLE\n ).classList.remove(KupCardCSSClasses.VISIBLE);\n if (isManageSeconds(component)) {\n getElement(\n component,\n KupCardBuiltInClockElements.SECONDS\n ).classList.remove(KupCardCSSClasses.VISIBLE);\n getElement(\n component,\n KupCardBuiltInClockElements.SECONDSCIRCLE\n ).classList.remove(KupCardCSSClasses.VISIBLE);\n }\n getElement(component, elId).classList.add(KupCardCSSClasses.VISIBLE);\n getElement(component, elCircleId).classList.add(KupCardCSSClasses.VISIBLE);\n}\n\nfunction buildClock(\n num: number,\n radius: number,\n offsetX: number,\n offsetY: number,\n className: string,\n add: number,\n separator: number,\n selectedValue: string,\n component: KupCard\n) {\n let x: number, y: number;\n const divsArray: JSX.Element[] = [];\n\n for (let n = 0; n < num; n++) {\n x = radius * Math.cos((n / num) * 2 * Math.PI);\n y = radius * Math.sin((n / num) * 2 * Math.PI);\n let text: string;\n let dataValue: { [key: string]: string } = {};\n let style: { [key: string]: string } = {};\n if (separator == 1) {\n if (n + 3 > 12) {\n text = n + 3 - 12 + add + '';\n } else {\n let calc = n + 3 + add;\n if (calc !== 24) {\n text = n + 3 + add + '';\n } else {\n text = '00';\n }\n }\n dataValue['data-value'] = text;\n } else {\n if (n % separator == 0) {\n if (n + 15 >= 60) {\n dataValue['data-value'] = n + 15 - 60 + '';\n text = n + 15 - 60 + add + '';\n } else {\n dataValue['data-value'] = n + 15 + '';\n text = n + 15 + add + '';\n }\n } else {\n if (n + 15 >= 60) {\n dataValue['data-value'] = n + 15 - 60 + '';\n text = '⋅';\n } else {\n dataValue['data-value'] = n + 15 + '';\n text = '\\u00B7';\n }\n }\n }\n style['left'] = x + offsetX + 'px';\n style['top'] = y + offsetY + 'px';\n\n if (dataValue['data-value'].length === 1) {\n dataValue['data-value'] = '0' + dataValue['data-value'];\n }\n\n let elClass = className;\n if (dataValue['data-value'] === selectedValue) {\n elClass += ' selected';\n }\n\n let div: HTMLElement = (\n <div\n class={elClass}\n style={style}\n {...dataValue}\n onClick={(e) => setClockTime(e, component)}\n >\n {text}\n </div>\n );\n divsArray.push(div);\n }\n\n return divsArray;\n}\n\nfunction setTimeFromClock(e: CustomEvent, component: KupCard) {\n const hoursEl = getElement(component, KupCardBuiltInClockElements.HOURS);\n const minutesEl = getElement(\n component,\n KupCardBuiltInClockElements.MINUTES\n );\n const secondsEl = getElement(\n component,\n KupCardBuiltInClockElements.SECONDS\n );\n let text: string = hoursEl.innerText + ':' + minutesEl.innerText;\n if (isManageSeconds(component)) {\n text += ':' + secondsEl.innerText;\n }\n onKupClockItemClick(e, component, text);\n}\n\nfunction setClockTime(e, component: KupCard) {\n const hoursEl = getElement(component, KupCardBuiltInClockElements.HOURS);\n const minutesEl = getElement(\n component,\n KupCardBuiltInClockElements.MINUTES\n );\n const hoursCircleEl = getElement(\n component,\n KupCardBuiltInClockElements.HOURSCIRCLE\n );\n const minutesCircleEl = getElement(\n component,\n KupCardBuiltInClockElements.MINUTESCIRCLE\n );\n const secondsEl = getElement(\n component,\n KupCardBuiltInClockElements.SECONDS\n );\n const secondsCircleEl = getElement(\n component,\n KupCardBuiltInClockElements.SECONDSCIRCLE\n );\n\n let time = e.target.getAttribute('data-value');\n if (getHoursActive(component)) {\n hoursEl.innerText = time;\n hoursCircleEl.querySelector('.selected').classList.remove('selected');\n setClockViewActive(component, false, true, false);\n switchView(\n component,\n KupCardBuiltInClockElements.MINUTES,\n KupCardBuiltInClockElements.MINUTESCIRCLE\n );\n } else if (getMinutesActive(component)) {\n minutesEl.innerText = time;\n minutesCircleEl.querySelector('.selected').classList.remove('selected');\n if (isManageSeconds(component)) {\n setClockViewActive(component, false, false, true);\n switchView(\n component,\n KupCardBuiltInClockElements.SECONDS,\n KupCardBuiltInClockElements.SECONDSCIRCLE\n );\n } else {\n setTimeFromClock(e, component);\n setClockViewActive(component, true, false, false);\n switchView(\n component,\n KupCardBuiltInClockElements.HOURS,\n KupCardBuiltInClockElements.HOURSCIRCLE\n );\n }\n } else {\n secondsEl.innerText = time;\n secondsCircleEl.querySelector('.selected').classList.remove('selected');\n setTimeFromClock(e, component);\n setClockViewActive(component, true, false, false);\n switchView(\n component,\n KupCardBuiltInClockElements.HOURS,\n KupCardBuiltInClockElements.HOURSCIRCLE\n );\n }\n e.target.classList.add('selected');\n}\n","import { h, VNode } from '@stencil/core';\nimport {\n KupChipEventPayload,\n KupChipNode,\n} from '../../kup-chip/kup-chip-declarations';\nimport {\n KupListNode,\n KupListEventPayload,\n} from '../../kup-list/kup-list-declarations';\nimport { FButtonStyling } from '../../../f-components/f-button/f-button-declarations';\nimport {\n KupLanguageColumn,\n KupLanguageGeneric,\n KupLanguageTotals,\n} from '../../../managers/kup-language/kup-language-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { KupCard } from '../kup-card';\nimport { KupCardColumnDropMenuOptions } from '../kup-card-declarations';\nimport { KupDataNewColumnTypes } from '../../../managers/kup-data/kup-data-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nconst premadeFormulas = [\n KupLanguageTotals.AVERAGE,\n KupLanguageTotals.DIFFERENCE,\n KupLanguageTotals.PRODUCT,\n KupLanguageTotals.SUM,\n];\n\nexport function prepareColumnDropMenu(component: KupCard) {\n const options = component.data.options as KupCardColumnDropMenuOptions;\n const chipData: KupChipNode[] = [];\n let list: VNode, combobox: VNode, button: VNode, chipSet: VNode;\n for (let index = 0; index < options.data.columns.length; index++) {\n const column = options.data.columns[index];\n if (\n column.visible !== false &&\n column.obj &&\n dom.ketchup.objects.isNumber(column.obj)\n ) {\n chipData.push({\n obj: column.obj,\n value: column.name,\n title: column.title,\n id: column.name,\n });\n }\n }\n const numericalColumnsExist = !!(chipData.length > 0);\n if (options.enableMerge || options.enableMove) {\n list = prepareList(options);\n }\n if (options.enableFormula) {\n combobox = prepareCombobox(options, numericalColumnsExist);\n if (numericalColumnsExist) {\n button = (\n <kup-button\n onKup-button-click={() => applyFormula(component)}\n label={dom.ketchup.language.translate(\n KupLanguageTotals.CALCULATE\n )}\n styling={FButtonStyling.OUTLINED}\n ></kup-button>\n );\n chipSet = (\n <div class=\"sub-chip\">\n <kup-chip\n data={chipData}\n onKup-chip-click={(\n e: CustomEvent<KupChipEventPayload>\n ) => typeColumn(e, component)}\n ></kup-chip>\n </div>\n );\n }\n }\n\n return [list, combobox, button, chipSet];\n}\n\nfunction prepareList(options: KupCardColumnDropMenuOptions): VNode {\n const listData: KupListNode[] = [];\n\n if (options.enableMerge) {\n listData.push({\n icon: 'library_add',\n id: KupLanguageGeneric.MERGE,\n value: dom.ketchup.language.translate(KupLanguageGeneric.MERGE),\n });\n }\n if (options.enableMove) {\n listData.push({\n icon: 'swap_horiz',\n id: KupLanguageGeneric.MOVE,\n value: dom.ketchup.language.translate(KupLanguageGeneric.MOVE),\n });\n }\n\n return listData.length > 0 ? (\n <kup-list\n data={listData}\n showIcons={true}\n onkup-list-click={(e: CustomEvent<KupListEventPayload>) =>\n listClick(e, options)\n }\n ></kup-list>\n ) : null;\n}\n\nfunction prepareCombobox(\n options: KupCardColumnDropMenuOptions,\n numericalColumnsExist: boolean\n): VNode {\n const comboListData: KupListNode[] = [];\n const numeric: boolean =\n dom.ketchup.objects.isNumber(options.receivingColumn.obj) &&\n dom.ketchup.objects.isNumber(options.starterColumn.obj);\n if (numeric) {\n comboListData.push(\n {\n id: KupLanguageTotals.AVERAGE,\n value: dom.ketchup.language.translate(\n KupLanguageTotals.AVERAGE\n ),\n },\n {\n id: KupLanguageTotals.DIFFERENCE,\n value: dom.ketchup.language.translate(\n KupLanguageTotals.DIFFERENCE\n ),\n },\n {\n id: KupLanguageTotals.PRODUCT,\n value: dom.ketchup.language.translate(\n KupLanguageTotals.PRODUCT\n ),\n },\n {\n id: KupLanguageTotals.SUM,\n value: dom.ketchup.language.translate(KupLanguageTotals.SUM),\n },\n {\n id: `([${options.starterColumn.name}]/[${options.receivingColumn.name}])*100`,\n value: `[${options.starterColumn.name}] / [${options.receivingColumn.name}] * 100`,\n },\n {\n id: `([${options.receivingColumn.name}]/[${options.starterColumn.name}])*100`,\n value: `[${options.receivingColumn.name}] / [${options.starterColumn.name}] * 100`,\n }\n );\n } else {\n comboListData.push({\n id: KupLanguageColumn.NO_FORMULA,\n value: dom.ketchup.language.translate(KupLanguageColumn.NO_FORMULA),\n });\n }\n const comboData = {\n 'kup-list': {\n data: comboListData,\n selectable: numeric ? true : false,\n },\n 'kup-text-field': {\n helper: !numericalColumnsExist\n ? dom.ketchup.language.translate(\n KupLanguageColumn.NON_NUMERICAL_IN_TABLE\n )\n : numeric\n ? `i.e.: [${options.receivingColumn.name}] - [${options.starterColumn.name}] + 1`\n : dom.ketchup.language.translate(\n KupLanguageColumn.NON_NUMERICAL\n ),\n label: dom.ketchup.language.translate(KupLanguageTotals.FORMULA),\n outlined: true,\n },\n };\n return (\n <kup-combobox\n data={comboData}\n disabled={!numericalColumnsExist}\n ></kup-combobox>\n );\n}\n\nfunction getCombobox(component: KupCard): HTMLKupComboboxElement {\n return component.rootElement.shadowRoot.querySelector('kup-combobox');\n}\n\nfunction typeColumn(e: CustomEvent<KupChipEventPayload>, component: KupCard) {\n const combobox = getCombobox(component);\n const value = e.detail.chip.value;\n combobox.getValue().then((res) => {\n let currentFormula = res;\n currentFormula += '[' + value + ']';\n combobox.setValue(currentFormula);\n });\n}\n\nfunction listClick(\n e: CustomEvent<KupListEventPayload>,\n options: KupCardColumnDropMenuOptions\n) {\n switch (e.detail.selected.id) {\n case KupLanguageGeneric.MERGE:\n if (options.mergeCb) {\n options.mergeCb();\n }\n break;\n case KupLanguageGeneric.MOVE:\n if (options.moveCb) {\n options.moveCb();\n }\n break;\n }\n}\n\nasync function applyFormula(component: KupCard) {\n const options = component.data.options as KupCardColumnDropMenuOptions;\n const combobox = getCombobox(component);\n if (combobox) {\n const valueString = (await combobox.getValue()) as KupLanguageTotals;\n const parts = valueString.split(';');\n const hasDescription = parts.length >= 2;\n const description = hasDescription ? parts[0].trim() : '';\n const value = hasDescription\n ? (parts[1].trim() as KupLanguageTotals)\n : valueString;\n if (premadeFormulas.includes(value)) {\n dom.ketchup.data.column.new(\n options.data,\n KupDataNewColumnTypes.MATH,\n {\n columns: [\n options.receivingColumn.name,\n options.starterColumn.name,\n ],\n newColumn: hasDescription\n ? { name: description, title: description }\n : undefined,\n operation: value,\n }\n );\n if (options.formulaCb !== undefined) {\n options.formulaCb();\n }\n } else {\n const result = dom.ketchup.data.column.new(\n options.data,\n KupDataNewColumnTypes.MATH,\n {\n newColumn: hasDescription\n ? { name: description, title: description }\n : undefined,\n operation: value,\n }\n );\n if (typeof result === 'string' || result instanceof String) {\n combobox.classList.add('kup-danger');\n combobox.data['kup-text-field'].helper = result as string;\n combobox.refresh();\n } else if (options.formulaCb !== undefined) {\n options.formulaCb();\n }\n }\n }\n}\n","import { h, VNode } from '@stencil/core';\nimport { FButton } from '../../../f-components/f-button/f-button';\nimport { FButtonStyling } from '../../../f-components/f-button/f-button-declarations';\nimport { KupLanguageGeneric } from '../../../managers/kup-language/kup-language-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { KupCard } from '../kup-card';\nimport { KupCardBuiltInMessageBoxOptions } from '../kup-card-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nexport function prepareMessageBox(component: KupCard): VNode[] {\n const options = component.data.options as KupCardBuiltInMessageBoxOptions;\n const buttonsExist = !!(options.cancelCb || options.confirmCb);\n return (\n <div class=\"message-box\">\n {options.text ? <div class=\"text\">{options.text}</div> : null}\n {buttonsExist ? (\n <div class=\"button-wrapper\">\n {options.cancelCb ? (\n <FButton\n icon=\"clear\"\n label={dom.ketchup.language.translate(\n KupLanguageGeneric.ABORT\n )}\n onClick={options.cancelCb}\n styling={FButtonStyling.FLAT}\n ></FButton>\n ) : null}\n {options.confirmCb ? (\n <FButton\n icon=\"check\"\n label={dom.ketchup.language.translate(\n KupLanguageGeneric.CONFIRM\n )}\n onClick={options.confirmCb}\n ></FButton>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","import { h, JSX } from '@stencil/core';\nimport { KupCard } from '../kup-card';\nimport { FButton } from '../../../f-components/f-button/f-button';\nimport {\n FButtonProps,\n FButtonStyling,\n} from '../../../f-components/f-button/f-button-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupCardBuiltInNumeric,\n KupCardBuiltInNumericOptions,\n} from '../kup-card-declarations';\nimport { KupObj } from '../../../managers/kup-objects/kup-objects-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\nconst maximumFractionDigits: number = 14;\n\nexport function prepareNumeric(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInNumeric;\n if (!el.kupData)\n el.kupData = {\n value: null,\n localeValue: '',\n };\n\n let decimals = false;\n let negative = false;\n const options = getOptions(component);\n\n if (options.resetStatus) {\n el.kupData = {\n value: null,\n localeValue: '',\n };\n const obj = options.initialValue as KupObj;\n if (options.initialValue) {\n if (obj && obj.k) el.kupData.value = obj.k;\n else el.kupData.value = options.initialValue.toString();\n el.kupData.localeValue = dom.ketchup.math.numbers.toLocaleString(\n el.kupData.value\n );\n }\n options.resetStatus = false;\n }\n if (options.negative) negative = true;\n if (options.decimals) decimals = true;\n\n const clearButtonProp: FButtonProps = {\n icon: 'cancel',\n onClick: () => clearValue(component),\n };\n const saveButtonProp: FButtonProps = {\n icon: 'save',\n onClick: () => saveValue(component),\n };\n\n const decChar = getDecimalChar();\n\n return (\n <table>\n <tr>\n <td colSpan={3}>\n <div class=\"value\">{el.kupData.localeValue}</div>\n </td>\n </tr>\n <tr>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '1')}\n >\n 1\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '2')}\n >\n 2\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '3')}\n >\n 3\n </div>\n </td>\n </tr>\n <tr>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '4')}\n >\n 4\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '5')}\n >\n 5\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '6')}\n >\n 6\n </div>\n </td>\n </tr>\n <tr>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '7')}\n >\n 7\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '8')}\n >\n 8\n </div>\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '9')}\n >\n 9\n </div>\n </td>\n </tr>\n <tr>\n <td>\n {negative\n ? [\n <div\n class=\"number\"\n onClick={() => setSign(component)}\n >\n -\n </div>,\n ]\n : []}\n </td>\n <td>\n <div\n class=\"number\"\n onClick={() => setValue(component, '0')}\n >\n 0\n </div>\n </td>\n <td>\n {decimals\n ? [\n <div\n class=\"number\"\n onClick={() => setValue(component, '.')}\n >\n {decChar}\n </div>,\n ]\n : []}\n </td>\n </tr>\n <tr>\n <td></td>\n <td>\n <FButton {...clearButtonProp} />\n </td>\n <td>\n <FButton {...saveButtonProp} />\n </td>\n </tr>\n </table>\n );\n}\n\nfunction getOptions(component: KupCard): KupCardBuiltInNumericOptions {\n if (component.data.options)\n return component.data.options as KupCardBuiltInNumericOptions;\n else return { resetStatus: false };\n}\n\nfunction setSign(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInNumeric;\n let strVal = el.kupData.value ? el.kupData.value : '0';\n if (strVal.startsWith('-')) return;\n strVal = '-' + strVal;\n el.kupData.value = strVal;\n el.kupData.localeValue = dom.ketchup.math.numbers.toLocaleString(strVal);\n component.refresh();\n}\n\nfunction setValue(component: KupCard, value: string) {\n const options = getOptions(component);\n const el = component.rootElement as KupCardBuiltInNumeric;\n const decChar = '.';\n let strVal = el.kupData.value ? el.kupData.value.toString() : '0';\n\n // if the first value is 0 and the character you want to insert is not a comma, I clear the field.\n if (strVal == '0' && value != decChar) {\n strVal = '';\n }\n // if I have already entered a decimal sign I stop.\n if (value == decChar && strVal.includes(decChar)) return;\n // if the text field contains the maximum number entered, excluding the comma, I stop.\n if (\n options.maxLength &&\n strVal.replace(decChar, '').length == options.maxLength\n )\n return;\n // if a maximum number of integers is required, and I don't have the comma, I check to be right with the values.\n if (\n options.maxIntegers &&\n value != decChar &&\n !strVal.includes(decChar) &&\n strVal.length == options.maxIntegers\n )\n return;\n // if a maximum number of decimals has been requested, check where we are.\n if (\n options.maxDecimals &&\n strVal.includes(decChar) &&\n strVal.substring(strVal.indexOf(decChar) + 1).length ==\n options.maxDecimals\n )\n return;\n // if the maximum number of decimals in JS has been reached, I stop.\n if (\n strVal.includes(decChar) &&\n strVal.substring(strVal.indexOf(decChar) + 1).length == 14\n )\n return;\n\n strVal += value;\n el.kupData.value = strVal;\n el.kupData.localeValue = dom.ketchup.math.numbers.toLocaleString(strVal);\n component.refresh();\n}\n\nfunction clearValue(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInNumeric;\n el.kupData.value = null;\n el.kupData.localeValue = '';\n component.refresh();\n}\n\nfunction getDecimalChar() {\n return (0.1).toLocaleString(dom.ketchup.math.locale).substring(1, 2);\n}\n\nfunction saveValue(component: KupCard) {\n const el = component.rootElement as KupCardBuiltInNumeric;\n component.onKupClick(\n component.rootElement.id,\n el.kupData.value ? Number(el.kupData.value).toString() : ''\n );\n}\n","import { h, VNode } from '@stencil/core';\nimport {\n KupCardBuiltInOpenAIMessages,\n KupCardBuiltInOpenAIOptions,\n KupCardCSSClasses,\n} from '../kup-card-declarations';\nimport { KupCard } from '../kup-card';\nimport { FButtonStyling } from '../../../f-components/f-button/f-button-declarations';\nimport { FImage } from '../../../f-components/f-image/f-image';\nimport { FButton } from '../../../f-components/f-button/f-button';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nlet inputArea: HTMLKupTextFieldElement = null;\nlet clearButton: HTMLKupButtonElement = null;\nlet submitButton: HTMLKupButtonElement = null;\nlet sttButton: HTMLKupButtonElement = null;\nlet passwordField: HTMLKupTextFieldElement = null;\n\nexport function prepareOpenAIInterface(component: KupCard): VNode[] {\n const options = component.data.options as KupCardBuiltInOpenAIOptions;\n\n const clear = () => {\n inputArea.setValue('');\n };\n\n const disableInteractivity = (status: boolean) => {\n clearButton.disabled = status;\n inputArea.disabled = status;\n submitButton.showSpinner = status;\n };\n\n const submitCb = async () => {\n if (options.submitCb) {\n options.submitCb(disableInteractivity, inputArea);\n }\n };\n\n const eventHandler = () => {\n if (passwordField) {\n options.authCb(passwordField);\n }\n };\n\n const authJsx: () => VNode[] = () => {\n return [\n <div class=\"title\">Authentication</div>,\n <kup-text-field\n class=\"password\"\n label=\"Password\"\n icon=\"key-variant\"\n inputType=\"password\"\n helperEnabled={true}\n onKup-textfield-iconclick={eventHandler}\n onKup-textfield-submit={eventHandler}\n ref={(el) => (passwordField = el)}\n ></kup-text-field>,\n <kup-button\n class=\"login-button\"\n label=\"Login\"\n onKup-button-click={eventHandler}\n ></kup-button>,\n ];\n };\n\n const connectingJsx: () => VNode[] = () => {\n return [\n <div class=\"spinner\">\n <kup-spinner active={true} layout={6} dimensions=\"7px\" />\n </div>,\n <div class=\"title\">Just a moment.</div>,\n <div class=\"text\">\n We're connecting you to your AI assistant...\n </div>,\n ];\n };\n\n const errorJsx: () => VNode[] = () => {\n return [\n <FImage resource=\"hotel\" sizeX=\"4em\" sizeY=\"4em\"></FImage>,\n <div class=\"title\">Zzz...</div>,\n <div class=\"text\">Your AI assistant is currently offline!</div>,\n ];\n };\n\n const getTextFormatted = (m: KupCardBuiltInOpenAIMessages): VNode[] => {\n if (m.type == 'request') {\n return [<div class=\"paragraph\">{m.text}</div>];\n }\n let result: VNode[] = [];\n let matches = m.funs;\n let text = m.text;\n\n let lastIndex = 0;\n for (const match of matches) {\n result.push(\n <div class=\"paragraph\">\n {text.slice(lastIndex, match.index)}\n </div>\n );\n let fun: string = match[0].trim();\n if (fun.startsWith('#[')) {\n fun = fun.replace('#[', '');\n }\n if (fun.endsWith(']#')) {\n fun = fun.replace(']#', '');\n }\n result.push(\n <div\n class=\"fun\"\n title=\"Execute FUN.\"\n onClick={() => {\n if (dom.ketchup.openAI.onFunClick) {\n dom.ketchup.openAI.onFunClick(fun);\n }\n }}\n >\n {fun}\n </div>\n );\n lastIndex = match.index + match[0].length;\n }\n result.push(<div class=\"paragraph\">{text.slice(lastIndex)}</div>);\n return result;\n };\n\n const readyJsx: () => VNode[] = () => {\n const genChat = () => {\n const nodes: VNode[] = [];\n\n if (options.messages && options.messages.length > 0) {\n options.messages.forEach((m) => {\n nodes.push(\n <div class=\"message-container\">\n <div class={m.type}>{getTextFormatted(m)}</div>\n <FButton\n icon=\"content-copy\"\n onClick={() => {\n navigator.clipboard.writeText(m.text);\n }}\n title=\"Copy text to clipboard.\"\n wrapperClass=\"copy\"\n ></FButton>\n </div>\n );\n });\n } else {\n nodes.push(\n <div class=\"empty\">Your chat history is empty!</div>\n );\n }\n\n return nodes;\n };\n\n const sttCb = (\n inputArea: HTMLKupTextFieldElement,\n button: HTMLKupButtonElement\n ) => {\n if (options.sttCb) {\n options.sttCb(inputArea, button);\n }\n };\n\n return [\n <div class=\"query-area\">\n <kup-text-field\n label=\"Ask me something!\"\n textArea={true}\n ref={(el) => (inputArea = el)}\n ></kup-text-field>\n <div class=\"buttons\">\n <kup-button\n icon=\"clear\"\n label=\"Clear\"\n onKup-button-click={() => clear()}\n styling={FButtonStyling.FLAT}\n ref={(el) => (clearButton = el)}\n ></kup-button>\n <kup-button\n class=\"stt\"\n icon=\"keyboard_voice\"\n onKup-button-click={() => sttCb(inputArea, sttButton)}\n ref={(el) => (sttButton = el)}\n styling={FButtonStyling.ICON}\n >\n <kup-spinner\n active={true}\n dimensions=\"0.6em\"\n layout={6}\n slot=\"spinner\"\n ></kup-spinner>\n </kup-button>\n <kup-button\n icon=\"smeup-ai\"\n label=\"Submit\"\n onKup-button-click={() => submitCb()}\n ref={(el) => (submitButton = el)}\n >\n <kup-spinner\n active={true}\n dimensions=\"0.6em\"\n slot=\"spinner\"\n ></kup-spinner>\n </kup-button>\n </div>\n </div>,\n <div class={`chat-area ${KupCardCSSClasses.AUTOSCROLL}`}>\n {genChat()}\n </div>,\n ];\n };\n\n if (submitButton) {\n disableInteractivity(false);\n }\n\n return (\n <div class={`wrapper ${options.state}`}>\n {options.state === 'authentication'\n ? authJsx()\n : options.state === 'ready'\n ? readyJsx()\n : options.state === 'connecting'\n ? connectingJsx()\n : errorJsx()}\n </div>\n );\n}\n","import { h, VNode } from '@stencil/core';\nimport { KupCard } from '../kup-card';\nimport { KupCardCSSClasses } from '../kup-card-declarations';\nimport { prepareCalendar } from './kup-card-calendar';\nimport { prepareClock } from './kup-card-clock';\nimport { prepareColumnDropMenu } from './kup-card-column-drop-menu';\nimport { prepareMessageBox } from './kup-card-message-box';\nimport { prepareNumeric } from './kup-card-numeric';\nimport { prepareOpenAIInterface } from './kup-card-openai';\n\n/**\n * 1st built-in layout, calendar view.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st built-in layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareCalendar(component)}\n </div>\n );\n}\n/**\n * 2nd built-in layout, clock view.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 2st built-in layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareClock(component)}\n </div>\n );\n}\n/**\n * 3rd built-in layout, column drop menu - used in data table when a column is dropped onto another one.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 3rd built-in layout virtual node.\n */\nexport function create3(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareColumnDropMenu(component)}\n </div>\n );\n}\n/**\n * 4th built-in layout, color picker.\n * This layout is rendered after the render cycle completes.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 4th built-in layout virtual node.\n */\nexport function create4(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n ></div>\n );\n}\n\n/**\n * 5th built-in layout, numeric picker.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 5th built-in layout virtual node.\n */\nexport function create5(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareNumeric(component)}\n </div>\n );\n}\n\n/**\n * 6th built-in layout, message box with confirm and cancel buttons.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 6th built-in layout virtual node.\n */\nexport function create6(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareMessageBox(component)}\n </div>\n );\n}\n\n/**\n * 7th built-in layout, Open AI interface.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 7th built-in layout virtual node.\n */\nexport function create7(component: KupCard): VNode {\n return (\n <div\n class={`built-in-layout-${component.layoutNumber} ${KupCardCSSClasses.BUILT_IN_CARD}`}\n >\n {prepareOpenAIInterface(component)}\n </div>\n );\n}\n","/**\n * Component IDs.\n */\nexport enum KupColumnMenuIds {\n BUTTON_APPLY = 'apply',\n BUTTON_ADD_COLUMNS = 'add',\n BUTTON_GROUP = 'group',\n BUTTON_NEW = 'new',\n BUTTON_OPEN_IN_NEW = 'open-in-new',\n BUTTON_REMOVE = 'remove',\n BUTTON_SEARCH = 'search',\n CHECKBOX_GLOBAL = 'global-checkbox',\n SWITCH_GROUP = 'group',\n SWITCH_KEY = 'key',\n TEXTFIELD_FILTER = 'filter',\n TEXTFIELD_FORMULA = 'formula',\n TEXTFIELD_FROM = 'filter-from',\n TEXTFIELD_TO = 'filter-to',\n}\n","import { h, VNode } from '@stencil/core';\nimport type { GenericObject } from '../../types/GenericTypes';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { KupCard } from './kup-card';\nimport { KupObj } from '../../managers/kup-objects/kup-objects-declarations';\nimport {\n KupCardCSSClasses,\n KupCardIds,\n KupCardSubEvents,\n} from './kup-card-declarations';\nimport { KupColumnMenuIds } from '../../utils/kup-column-menu/kup-column-menu-declarations';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { KupDataNode } from '../../managers/kup-data/kup-data-declarations';\nimport { KupChipNode } from '../kup-chip/kup-chip-declarations';\n/**\n * This function returns a list of components.\n * @param {GenericObject[]} compArray - Components' props.\n * @param {string} compType - Components' type.\n * @returns {JSX.Element[]} List of components.\n */\nexport function compList(\n compArray: GenericObject[] | string[] | HTMLElement[],\n compType: string\n): VNode[] {\n let list: VNode[] = [];\n for (let index = 0; index < compArray.length; index++) {\n if (\n typeof compArray[0] !== 'string' &&\n !(compArray as GenericObject[])[index].id\n ) {\n (compArray as GenericObject[])[index]['id'] = compType + index;\n }\n switch (compType) {\n case 'autocomplete':\n list.push(\n <kup-autocomplete\n {...(compArray as GenericObject[])[index]}\n />\n );\n break;\n case 'button':\n list.push(\n <kup-button {...(compArray as GenericObject[])[index]} />\n );\n break;\n case 'checkbox':\n list.push(\n <kup-checkbox {...(compArray as GenericObject[])[index]} />\n );\n break;\n case 'combobox':\n list.push(\n <kup-combobox {...(compArray as GenericObject[])[index]} />\n );\n break;\n case 'datepicker':\n list.push(\n <kup-date-picker\n {...(compArray as GenericObject[])[index]}\n />\n );\n break;\n case 'slot':\n list.push(<slot></slot>);\n break;\n case 'text':\n list.push(\n <div class=\"text\"> {(compArray as string[])[index]}</div>\n );\n break;\n case 'textfield':\n list.push(\n <kup-text-field\n {...(compArray as GenericObject[])[index]}\n />\n );\n break;\n case 'timepicker':\n list.push(\n <kup-time-picker\n {...(compArray as GenericObject[])[index]}\n />\n );\n break;\n }\n }\n return list;\n}\n/**\n * Called by the layouts method to return the header bar of the dialog.\n * @param {string} title - Title of the dialog.\n * @returns {VNode} Virtual node of the dialog's header bar.\n */\nexport function dialogHeader(title: string): VNode {\n return (\n <div id={KupCardIds.DRAG_HANDLE} class={KupCardCSSClasses.HEADER_BAR}>\n {title ? (\n <div class={KupCardCSSClasses.DIALOG_TITLE}>{title}</div>\n ) : null}\n <FImage\n color={`var(${KupThemeColorValues.TITLE})`}\n sizeX=\"1.25em\"\n sizeY=\"100%\"\n resource=\"clear\"\n id={KupCardIds.DIALOG_CLOSE}\n />\n </div>\n );\n}\n/**\n * Creates the bar used to expand/collapse the card.\n * @returns {VNode} Expansion bar virtual node.\n */\nexport function collapsibleBar(): VNode {\n return (\n <div class=\"collapsible-trigger\">\n <kup-button\n id={KupCardIds.EXPAND_ACTION}\n toggable\n iconOff=\"keyboard_arrow_down\"\n icon=\"keyboard_arrow_up\"\n ></kup-button>\n </div>\n );\n}\n/**\n * Handles layout-specific actions when an event occurs.\n * @param {KupCard} component - Card component.\n * @param {CustomEvent} e - Event triggered by a sub-component.\n */\nexport function layoutSpecificEvents(component: KupCard, e: CustomEvent): void {\n const root: ShadowRoot = component.rootElement.shadowRoot;\n /*-------------------------------------------------*/\n /* C o l l a p s i b l e L a y o u t s */\n /*-------------------------------------------------*/\n if (\n e.type === KupCardSubEvents.BUTTON_CLICK &&\n e.detail.id === KupCardIds.EXPAND_ACTION\n ) {\n const collapsibleCard = root.querySelector(\n '.' + KupCardCSSClasses.COLLAPSIBLE_CARD\n );\n if (\n !collapsibleCard.classList.contains(\n '.' + KupCardCSSClasses.EXPANDED\n )\n ) {\n collapsibleCard.classList.add('.' + KupCardCSSClasses.EXPANDED);\n component.oldSizeY = component.sizeY;\n component.sizeY = 'auto';\n } else if (component.oldSizeY) {\n collapsibleCard.classList.remove('.' + KupCardCSSClasses.EXPANDED);\n component.sizeY = component.oldSizeY;\n }\n return;\n }\n /*-------------------------------------------------*/\n /* 1 4 t h S t a n d a r d L a y o u t */\n /*-------------------------------------------------*/\n // Tab change: when a tab is clicked, the corresponding view will be activated while the others will become hidden.\n if (\n root &&\n e.type === KupCardSubEvents.TABBAR_CLICK &&\n e.detail.id === KupCardIds.VIEW_SELECTOR\n ) {\n const views: NodeListOf<HTMLElement> = root.querySelectorAll(\n '.' + KupCardCSSClasses.CARD_VIEW\n );\n for (let index = 0; index < views.length; index++) {\n const view: HTMLElement = views[index];\n if (\n view.classList.contains(\n KupCardCSSClasses.VIEW_PREFIX + (e.detail.index + 1)\n )\n ) {\n view.classList.add(KupCardCSSClasses.VISIBLE);\n } else {\n view.classList.remove(KupCardCSSClasses.VISIBLE);\n }\n }\n }\n // Chip deleted: when a chip is deleted, the apply button must appear.\n if (\n root &&\n e.type === KupCardSubEvents.CHIP_ICONCLICK &&\n e.detail.id === KupCardIds.COLUMNS_LIST\n ) {\n const apply: HTMLKupButtonElement = root.querySelector(\n '#' + KupColumnMenuIds.BUTTON_APPLY\n );\n apply.classList.add('visible');\n }\n // Chip creation: upon clicking on the tree, the chip list will updated by adding or removing an entry.\n if (\n root &&\n e.type === KupCardSubEvents.TREE_NODESELECTED &&\n e.detail.id === KupCardIds.EXTRA_COLUMNS\n ) {\n if (e.detail.treeNode) {\n const apply: HTMLKupButtonElement = root.querySelector(\n '#' + KupColumnMenuIds.BUTTON_APPLY\n );\n const chip: HTMLKupChipElement = root.querySelector(\n '#' + KupCardIds.COLUMNS_LIST\n );\n const node: KupDataNode = e.detail.treeNode;\n const obj: KupObj = node.obj;\n const objKey = obj ? obj.t + obj.p + obj.k : '';\n if (objKey && objKey.trim() != '**' && node.expandable != true) {\n const chipData: KupChipNode[] =\n chip && chip.data ? chip.data : null;\n // This should be handled server-side, data should arrive correctly.\n // Right now the only way to bind chips with tree nodes is a consistent value - which is the child column's name.\n // Hence, the algorithm below.\n const key: string =\n component.rootElement.dataset.column +\n '_' +\n (node.id ? node.id.replace(/\\//g, '_') : '');\n if (chipData) {\n const existingChip: KupChipNode = chipData.find(\n (x: KupChipNode) => x.value === key\n );\n if (existingChip) {\n chipData.splice(chipData.indexOf(existingChip), 1);\n } else {\n chipData.push({\n icon: node.icon,\n placeholderIcon: node.placeholderIcon,\n value: node.value,\n obj: node.obj,\n id: key,\n });\n }\n apply.classList.add('visible');\n } else {\n chip.data['chip'] = [\n {\n icon: node.icon,\n placeholderIcon: node.placeholderIcon,\n label: node.value,\n obj: node.obj,\n value: key,\n },\n ];\n }\n chip.refresh();\n }\n }\n }\n // Apply button: a new chip will be created with updated data.\n if (\n root &&\n e.type === KupCardSubEvents.BUTTON_CLICK &&\n e.detail.id === KupColumnMenuIds.BUTTON_APPLY\n ) {\n const chip: HTMLKupChipElement = root.querySelector(\n '#' + KupCardIds.COLUMNS_LIST\n );\n component.data.chip[0]['data'] = chip.data;\n }\n /*-------------------------------------------------*/\n /* 4 t h D i a l o g L a y o u t */\n /*-------------------------------------------------*/\n // Refresh when switching row\n if (\n e.type === KupCardSubEvents.BUTTON_CLICK &&\n (e.detail.id === KupCardIds.NEXT_ROW ||\n e.detail.id === KupCardIds.PREVIOUS_ROW)\n ) {\n component.refresh();\n }\n\n /*-------------------------------------------------*/\n /* 1 5t h S t a n d a r d L a y o u t */\n /*-------------------------------------------------*/\n // Tab change: when a tab is clicked, the corresponding view will be activated while the others will become hidden.\n if (\n root &&\n e.type === KupCardSubEvents.BUTTON_CLICK &&\n e.detail.id === KupCardIds.VIEW_SELECTOR\n ) {\n const views: NodeListOf<HTMLElement> = root.querySelectorAll(\n '.' + KupCardCSSClasses.CARD_VIEW\n );\n if (e.detail.value === 'on') {\n views[0].classList.remove(KupCardCSSClasses.VISIBLE);\n views[1].classList.add(KupCardCSSClasses.VISIBLE);\n } else {\n views[1].classList.remove(KupCardCSSClasses.VISIBLE);\n views[0].classList.add(KupCardCSSClasses.VISIBLE);\n }\n }\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport type { GenericObject } from '../../../types/GenericTypes';\nimport type { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { FImage } from '../../../f-components/f-image/f-image';\nimport { collapsibleBar } from '../kup-card-helper';\nimport { KupCardCSSClasses } from '../kup-card-declarations';\nimport { KupThemeColorValues } from '../../../managers/kup-theme/kup-theme-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\n/**\n * 1st collapsible card layout, left bar and collapsible chips.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st collapsible layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n //Chips\n const chipArray: GenericObject[] = component.data['chip']\n ? component.data['chip']\n : [];\n //Bar color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`collapsible-layout-${component.layoutNumber} ${KupCardCSSClasses.COLLAPSIBLE_CARD}`}\n style={CSSVariables}\n >\n <div class=\"section-1\"></div>\n <div class=\"section-2\">\n <div class=\"sub-1\">\n <div class=\"text left\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n <div class=\"text right\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class={`sub-3 ${KupCardCSSClasses.COLLAPSIBLE_WRAPPER}`}>\n {chipArray[0] ? (\n <kup-chip\n class={KupCardCSSClasses.COLLAPSIBLE_ELEMENT}\n id=\"chip1\"\n {...chipArray[0]}\n ></kup-chip>\n ) : null}\n </div>\n </div>\n {collapsibleBar()}\n </div>\n );\n}\n/**\n * 2nd collapsible card layout, colored text and icon in top right corner.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 2nd collapsible layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n //Chips\n const chipArray: GenericObject[] = component.data['chip']\n ? component.data['chip']\n : [];\n //Icon and text colors\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Right corner icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`collapsible-layout-${component.layoutNumber} ${KupCardCSSClasses.COLLAPSIBLE_CARD}`}\n style={CSSVariables}\n >\n <div class=\"section-1\">\n <div class=\"sub-1\">\n <div class=\"text\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-3\">\n <div class=\"image\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"24px\"\n sizeY=\"24px\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class={`sub-4 ${KupCardCSSClasses.COLLAPSIBLE_WRAPPER}`}>\n {chipArray[0] ? (\n <kup-chip\n class={KupCardCSSClasses.COLLAPSIBLE_ELEMENT}\n id=\"chip1\"\n {...chipArray[0]}\n ></kup-chip>\n ) : null}\n </div>\n </div>\n {collapsibleBar()}\n </div>\n );\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport type { GenericObject } from '../../../types/GenericTypes';\nimport type { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { FImage } from '../../../f-components/f-image/f-image';\nimport { compList, dialogHeader } from '../kup-card-helper';\nimport { KupLanguageRow } from '../../../managers/kup-language/kup-language-declarations';\nimport { KupCardCSSClasses, KupCardIds } from '../kup-card-declarations';\nimport {\n KupDataColumn,\n KupDataDataset,\n} from '../../../managers/kup-data/kup-data-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n/**\n * 1st dialog card layout, used to display information in string format.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n //Title, subtitle and description\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n const divs: VNode[] = [];\n //Loop starts from 1: occurence [0] is the dialog's title\n for (let index = 1; index < textArray.length; index++) {\n const isEven: boolean = index % 2 == 0;\n divs.push(\n <span class={`text ${!isEven ? 'label' : ''}`}>\n {textArray[index]}\n </span>\n );\n }\n return (\n <div class={`dialog-layout-${component.layoutNumber} dialog-element`}>\n {dialogHeader(textArray[0])}\n <div class=\"section-1\">{divs}</div>\n </div>\n );\n}\n/**\n * 2nd dialog card layout, used to display information in string format and features an highlighted row on top.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n //Title, subtitle and description\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n const divs: VNode[] = [];\n //Loop starts from 3: occurence [0] is the dialog's title, [1] and [2] are the highlighted strings\n for (let index = 3; index < textArray.length; index++) {\n const isEven: boolean = index % 2 == 0;\n divs.push(\n <span class={`text ${!isEven ? 'label' : ''}`}>\n {textArray[index]}\n </span>\n );\n }\n return (\n <div class={`dialog-layout-${component.layoutNumber} dialog-element`}>\n {textArray[0] ? dialogHeader(textArray[0]) : dialogHeader('')}\n {textArray[1] && textArray[2] ? (\n <div class=\"section-1\">\n <div class=\"text label\">{textArray[1]}</div>\n <div class=\"text \">{textArray[2]}</div>\n </div>\n ) : null}\n <div class=\"section-2\">{divs}</div>\n </div>\n );\n}\n/**\n * 3rd dialog card layout, buttons and text lines, used for debug window.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create3(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Combobox list\n const comboboxArray: GenericObject[] = component.data['combobox']\n ? component.data['combobox']\n : [];\n //Slot list\n const slots: Array<HTMLElement> = Array.prototype.slice.call(\n component.rootElement.children,\n 0\n );\n //Textfield list\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n return (\n <div\n class={`dialog-layout-${component.layoutNumber} ${KupCardCSSClasses.DIALOG_UNRESIZABLE}`}\n >\n <div>\n {buttonArray.length > 0 || textfieldArray.length > 0 ? (\n <div class=\"section-1\">\n <FImage\n id={KupCardIds.DRAG_HANDLE}\n resource=\"drag_handle\"\n sizeX=\"32px\"\n sizeY=\"32px\"\n />\n {compList(buttonArray, 'button')}\n {compList(textfieldArray, 'textfield')}\n {compList(comboboxArray, 'combobox')}\n </div>\n ) : null}\n {slots.length > 0 ? (\n <div class=\"section-2\">{compList(slots, 'slot')}</div>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 4th dialog card layout, used to display information with data table.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create4(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Dialog title\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Datatable\n const datatableArray: GenericObject[] = component.data['datatable']\n ? component.data['datatable']\n : [];\n return (\n <div class={`dialog-layout-${component.layoutNumber} dialog-element`}>\n {textArray[0] ? dialogHeader(textArray[0]) : dialogHeader('')}\n {datatableArray[0] && buttonArray[0] && buttonArray[1] ? (\n <div class=\"section-1\">\n <kup-button\n {...buttonArray[0]}\n id={KupCardIds.PREVIOUS_ROW}\n onkup-button-click={() => prevButton(component)}\n title={dom.ketchup.language.translate(\n KupLanguageRow.PREVIOUS\n )}\n />\n <kup-button\n {...buttonArray[1]}\n id={KupCardIds.NEXT_ROW}\n onkup-button-click={() => nextButton(component)}\n title={dom.ketchup.language.translate(\n KupLanguageRow.NEXT\n )}\n />\n </div>\n ) : null}\n {datatableArray[0] ? (\n <div class=\"section-2\">\n <kup-data-table\n id=\"datatable1\"\n {...datatableArray[0]}\n ></kup-data-table>\n </div>\n ) : null}\n </div>\n );\n}\n/**\n * 5th dialog card layout, buttons and text lines, used for debug window.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create5(component: KupCard): VNode {\n //Slot list\n const slots: Array<HTMLElement> = Array.prototype.slice.call(\n component.rootElement.children,\n 0\n );\n //List\n const listArray: GenericObject[] = component.data['list']\n ? component.data['list']\n : [];\n //Dialog title\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div\n class={`dialog-layout-${component.layoutNumber} ${KupCardCSSClasses.DIALOG_UNRESIZABLE}`}\n >\n {textArray[0] ? dialogHeader(textArray[0]) : dialogHeader('')}\n <div>\n {slots.length > 0 ? (\n <div class=\"section-1\">{compList(slots, 'slot')}</div>\n ) : null}\n {listArray[0] ? (\n <div class=\"section-2\">\n <kup-list id=\"list1\" {...listArray[0]} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 6th dialog card layout, a datatable or a spinner in its place.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create6(component: KupCard): VNode {\n //Datatable\n const datatableArray: GenericObject[] = component.data['datatable']\n ? component.data['datatable']\n : [];\n //Dialog title\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`dialog-layout-${component.layoutNumber}`}>\n {textArray[0] ? dialogHeader(textArray[0]) : dialogHeader('')}\n <div class=\"section-1\">\n {datatableArray.length > 0 ? (\n <kup-data-table\n id=\"datatable1\"\n {...datatableArray[0]}\n ></kup-data-table>\n ) : (\n <kup-spinner active={true} dimensions=\"7px\" layout={14} />\n )}\n </div>\n </div>\n );\n}\n/**\n * 7th dialog card layout, a raw slot.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create7(component: KupCard): VNode {\n //Dialog title\n const textArray: string[] =\n component.data && component.data['text'] ? component.data['text'] : [];\n //Slot list\n const slots: Array<HTMLElement> = Array.prototype.slice.call(\n component.rootElement.children,\n 0\n );\n return (\n <div class={`dialog-layout-${component.layoutNumber}`}>\n {textArray[0] ? dialogHeader(textArray[0]) : dialogHeader('')}\n {slots.length > 0 ? compList(slots, 'slot') : null}\n </div>\n );\n}\n/**\n * Invoked by 4th layout to switch to the previous record of the original data table.\n * Reminder: data table inside 4th layout should be transposed and valid columns should be named with numbers (strings, but numerical).\n * @param {KupCard} component - Card component.\n */\nfunction prevButton(component: KupCard): void {\n const root: ShadowRoot = component.rootElement.shadowRoot;\n let nextButton: HTMLKupButtonElement = null;\n let prevButton: HTMLKupButtonElement = null;\n let table: HTMLKupDataTableElement = null;\n let data: KupDataDataset = null;\n if (root) {\n table = root.querySelector('kup-data-table');\n nextButton = root.querySelector('#' + KupCardIds.NEXT_ROW);\n prevButton = root.querySelector('#' + KupCardIds.PREVIOUS_ROW);\n if (table) {\n data = table.data;\n }\n }\n if (data) {\n let visibleColumnIndex: number = getVisibleColumn(data);\n if (visibleColumnIndex) {\n const currColumn: KupDataColumn = data.columns[visibleColumnIndex];\n const prevColumn: KupDataColumn =\n data.columns[visibleColumnIndex - 1];\n const prevPrevColumn: KupDataColumn =\n data.columns[visibleColumnIndex - 2];\n if (!isNaN(parseInt(prevColumn.name))) {\n currColumn.visible = false;\n prevColumn.visible = true;\n if (isNaN(parseInt(prevPrevColumn.name))) {\n prevButton.disabled = true;\n }\n }\n nextButton.disabled = false;\n }\n table.refresh();\n }\n}\n/**\n * Invoked by 4th layout to switch to the next record of the original data table.\n * Reminder: data table inside 4th layout should be transposed and valid columns should be named with numbers (strings, but numerical).\n * @param {KupCard} component - Card component.\n */\nfunction nextButton(component: KupCard): void {\n const root: ShadowRoot = component.rootElement.shadowRoot;\n let nextButton: HTMLKupButtonElement = null;\n let prevButton: HTMLKupButtonElement = null;\n let table: HTMLKupDataTableElement = null;\n let data: KupDataDataset = null;\n if (root) {\n table = root.querySelector('kup-data-table');\n nextButton = root.querySelector('#' + KupCardIds.NEXT_ROW);\n prevButton = root.querySelector('#' + KupCardIds.PREVIOUS_ROW);\n if (table) {\n data = table.data;\n }\n }\n if (data) {\n let visibleColumnIndex: number = getVisibleColumn(data);\n if (visibleColumnIndex) {\n const currColumn: KupDataColumn = data.columns[visibleColumnIndex];\n const nextColumn: KupDataColumn =\n data.columns[visibleColumnIndex + 1];\n const nextNextColumn: KupDataColumn =\n data.columns[visibleColumnIndex + 2];\n if (nextColumn) {\n currColumn.visible = false;\n nextColumn.visible = true;\n if (!nextNextColumn) {\n nextButton.disabled = true;\n }\n }\n prevButton.disabled = false;\n }\n table.refresh();\n }\n}\n/**\n * Returns the index of the first visible numerical column.\n * @param {KupDataDataset} data - Table data.\n */\nfunction getVisibleColumn(data: KupDataDataset): number {\n for (let index = 0; index < data.columns.length; index++) {\n const column: KupDataColumn = data.columns[index];\n if (!isNaN(parseInt(column.name)) && column.visible) {\n return index;\n }\n }\n return null;\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport { compList } from '../kup-card-helper';\n/**\n * 1st free card layout, dropdown menu look.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n //Slot list\n const slots: Array<HTMLElement> = Array.prototype.slice.call(\n component.rootElement.children,\n 0\n );\n return (\n <div class={`free-layout-${component.layoutNumber}`}>\n {slots.length > 0 ? compList(slots, 'slot') : null}\n </div>\n );\n}\n/**\n * 2nd free card layout, dropdown menu look with no padding.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n //Slot list\n const slots: Array<HTMLElement> = Array.prototype.slice.call(\n component.rootElement.children,\n 0\n );\n return (\n <div class={`free-layout-${component.layoutNumber}`}>\n {slots.length > 0 ? compList(slots, 'slot') : null}\n </div>\n );\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport type { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { FImage } from '../../../f-components/f-image/f-image';\nimport { GenericObject } from '../../../types/GenericTypes';\nimport { KupThemeColorValues } from '../../../managers/kup-theme/kup-theme-declarations';\nimport { FButton } from '../../../f-components/f-button/f-button';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\n/**\n * 1st scalable card layout, column of 2 texts.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st scalable layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"descr\">\n <div\n style={\n colorArray[0] ? { color: colorArray[0] } : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"value\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 2nd scalable card layout, used to display numerical values.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 2nd scalable layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Value, decimal value, measurement unit\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1.25em\"\n sizeY=\"1.25em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"value-int\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[0] ? textArray[0] : ''}\n {textArray[1]\n ? dom.ketchup.math.decimalSeparator()\n : ''}\n </div>\n </div>\n {textArray[1] ? (\n <div class=\"value-dec\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[1]}\n </div>\n </div>\n ) : null}\n <div class=\"unit\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[2] ? textArray[2] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 3rd scalable card layout, column of 2 texts.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 3rd scalable layout virtual node.\n */\nexport function create3(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"value\">\n <div\n style={\n colorArray[0] ? { color: colorArray[0] } : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"descr\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 4th scalable card layout, used to display numerical values with subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 4th scalable layout virtual node.\n */\nexport function create4(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Value, decimal value, measurement unit, subtitle\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1.25em\"\n sizeY=\"1.25em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"value-and-unit\">\n <div class=\"value-int\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[0] ? textArray[0] : ''}\n {textArray[1]\n ? dom.ketchup.math.decimalSeparator()\n : ''}\n </div>\n </div>\n {textArray[1] ? (\n <div class=\"value-dec\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[1]}\n </div>\n </div>\n ) : null}\n <div class=\"unit\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[2] ? textArray[2] : ''}\n </div>\n </div>\n </div>\n <div class=\"empty-placeholder\"></div>\n <div class=\"descr\">\n <div\n style={\n colorArray[2] ? { color: colorArray[2] } : undefined\n }\n >\n {textArray[3] ? textArray[3] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 5th scalable card layout, icon with title and subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 5th scalable layout virtual node.\n */\nexport function create5(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"text-wrapper\">\n <div class=\"descr\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n\n <div class=\"value\">\n <div\n style={\n colorArray[2]\n ? { color: colorArray[2] }\n : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1em\"\n sizeY=\"1em\"\n ></FImage>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n/**\n * 6th scalable card layout, icon with title and subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 6th scalable layout virtual node.\n */\nexport function create6(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1em\"\n sizeY=\"1em\"\n ></FImage>\n ) : null}\n </div>\n\n <div class=\"text-wrapper\">\n <div class=\"value\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"descr\">\n <div\n style={\n colorArray[2]\n ? { color: colorArray[2] }\n : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 7th scalable card layout, icon with title and subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 7th scalable layout virtual node.\n */\nexport function create7(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"text-wrapper\">\n <div class=\"value\">\n <div\n style={\n colorArray[1]\n ? { color: colorArray[1] }\n : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n\n <div class=\"descr\">\n <div\n style={\n colorArray[2]\n ? { color: colorArray[2] }\n : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1em\"\n sizeY=\"1em\"\n ></FImage>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n/**\n * 8th scalable card layout, icon with title and subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th scalable layout virtual node.\n */\nexport function create8(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1em\"\n sizeY=\"1em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"value\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"descr\">\n <div\n style={\n colorArray[2] ? { color: colorArray[2] } : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * 9th scalable card layout, tile view.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th scalable layout virtual node.\n */\nexport function create9(component: KupCard): VNode {\n // color line\n const lineBg =\n component.data.color && component.data.color.length > 0\n ? component.data.color[0]\n : `var(${KupThemeColorValues.PRIMARY})`;\n // color component\n const componentBg =\n component.data.color && component.data.color.length > 1\n ? component.data.color[1]\n : `var(${KupThemeColorValues.BACKGROUND})`;\n // color text\n const textFg =\n component.data.color && component.data.color.length > 2\n ? component.data.color[2]\n : `var(${KupThemeColorValues.TEXT})`;\n // Main text\n const mainText =\n component.data.text && component.data.text.length > 0\n ? component.data.text[0]\n : null;\n // Sub text\n const subText =\n component.data.text && component.data.text.length > 1\n ? component.data.text[1]\n : null;\n // Buttons area\n const buttons =\n component.data.button && component.data.button.length > 0\n ? (JSON.parse(JSON.stringify(component.data.button)) as [])\n : [];\n // Only 4 buttons supported\n if (buttons.length > 4) {\n buttons.splice(4, buttons.length - 4);\n }\n buttons.reverse();\n\n //Dynamic CSS variables\n const CSSVariables: GenericObject = {\n ['--color-0']: lineBg,\n ['--color-1']: componentBg,\n ['--color-2']: textFg,\n };\n return (\n <div\n class={`scalable-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\"></div>\n <div class=\"section-2\">\n <div class=\"scalable-card\">\n <div class=\"text scalable-element\">\n <div class=\"value\">{mainText}</div>\n <div class=\"descr\">{subText}</div>\n </div>\n </div>\n {buttons.length > 0 ? (\n <div class=\"buttons\">\n {buttons.map((b) => (\n <FButton\n icon={b.icon}\n placeholderIcon={b.placeholderIcon}\n title={b.title}\n styling={b.styling}\n wrapperClass={b.class}\n onClick={() =>\n component.onKupClick(\n component.rootElement.id,\n b.id\n )\n }\n />\n ))}\n </div>\n ) : undefined}\n </div>\n </div>\n );\n}\n\n/**\n * 10th scalable card layout, tile view.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th scalable layout virtual node.\n */\nexport function create10(component: KupCard): VNode {\n // color line\n const lineBg =\n component.data.color && component.data.color.length > 0\n ? component.data.color[0]\n : `var(${KupThemeColorValues.PRIMARY})`;\n // color component\n const componentBg =\n component.data.color && component.data.color.length > 1\n ? component.data.color[1]\n : `var(${KupThemeColorValues.BACKGROUND})`;\n // color text\n const textFg =\n component.data.color && component.data.color.length > 2\n ? component.data.color[2]\n : `var(${KupThemeColorValues.TEXT})`;\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Image color\n\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n // Main text\n const mainText =\n component.data.text && component.data.text.length > 0\n ? component.data.text[0]\n : null;\n\n // Sub text\n const subText =\n component.data.text && component.data.text.length > 1\n ? component.data.text[1]\n : null;\n // Buttons area\n const buttons =\n component.data.button && component.data.button.length > 0\n ? (JSON.parse(JSON.stringify(component.data.button)) as [])\n : [];\n // Only 4 buttons supported\n if (buttons.length > 4) {\n buttons.splice(4, buttons.length - 4);\n }\n buttons.reverse();\n\n //Dynamic CSS variables\n const CSSVariables: GenericObject = {\n ['--color-0']: lineBg,\n ['--color-1']: componentBg,\n ['--color-2']: textFg,\n };\n return (\n <div\n class={`scalable-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"scalable-card\">\n <div class=\"text scalable-element\">\n <div class=\"title\">{mainText}</div>\n <div class=\"number\">\n <div>\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1.25em\"\n sizeY=\"1.25em\"\n ></FImage>\n ) : null}\n </div>\n </div>\n <div>{subText}</div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * 11th scalable card layout, icon with title and subtitle.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th scalable layout virtual node.\n */\nexport function create11(component: KupCard): VNode {\n //Image color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div class={`scalable-layout-${component.layoutNumber} scalable-card`}>\n <div class=\"scalable-element\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.ICON})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"1em\"\n sizeY=\"1em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"value\">\n <div\n style={\n colorArray[1] ? { color: colorArray[1] } : undefined\n }\n >\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"descr\">\n <div\n style={\n colorArray[2] ? { color: colorArray[2] } : undefined\n }\n >\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { h, VNode } from '@stencil/core';\nimport type { KupCard } from '../kup-card';\nimport type { GenericObject } from '../../../types/GenericTypes';\nimport { FImage } from '../../../f-components/f-image/f-image';\nimport { compList } from '../kup-card-helper';\nimport { KupTabBarNode } from '../../kup-tab-bar/kup-tab-bar-declarations';\nimport {\n KupLanguageColumn,\n KupLanguageGeneric,\n} from '../../../managers/kup-language/kup-language-declarations';\nimport { FChipType } from '../../../f-components/f-chip/f-chip-declarations';\nimport { KupCardCSSClasses, KupCardIds } from '../kup-card-declarations';\nimport { KupColumnMenuIds } from '../../../utils/kup-column-menu/kup-column-menu-declarations';\nimport { KupThemeColorValues } from '../../../managers/kup-theme/kup-theme-declarations';\nimport { KupDom } from '../../../managers/kup-manager/kup-manager-declarations';\nimport { KupDropdownButton } from '../../kup-dropdown-button/kup-dropdown-button';\nimport { FButtonStyling } from '../../../f-components/f-button/f-button-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\n/**\n * 1st standard card layout, inspired by Material Design.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 1st standard layout virtual node.\n */\nexport function create1(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Cover image\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle and description\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div\n class={`standard-layout-${component.layoutNumber} ${\n buttonArray.length > 0 ? KupCardCSSClasses.HAS_ACTIONS : ''\n }`}\n >\n <div class=\"mdc-ripple-surface\">\n {imageArray[0] ? (\n <div class=\"section-1\">\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n </div>\n ) : null}\n <div class=\"section-2\">\n {textArray[textIndex] ? (\n <div class=\"sub-2 title\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n {textArray[++textIndex] ? (\n <div class=\"sub-2 subtitle\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n {textArray[++textIndex] ? (\n <div class=\"sub-2 description\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n </div>\n {buttonArray.length > 0 ? (\n <div class=\"section-3\">{compList(buttonArray, 'button')}</div>\n ) : null}\n </div>\n );\n}\n/**\n * 2nd standard card layout, inspired by Material Design.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 2nd standard layout virtual node.\n */\nexport function create2(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Cover image\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle and description\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div\n class={`standard-layout-${component.layoutNumber} ${\n buttonArray.length > 0 ? KupCardCSSClasses.HAS_ACTIONS : ''\n }`}\n >\n <div class=\"section-1\">\n {textArray[textIndex] ? (\n <div class=\"sub-1 title\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n {textArray[++textIndex] ? (\n <div class=\"sub-1 subtitle\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n <div class=\"mdc-ripple-surface\">\n {imageArray[0] ? (\n <div class=\"section-2\">\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n </div>\n ) : null}\n <div class=\"section-3\">\n {textArray[++textIndex] ? (\n <div class=\"sub-3 description\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n </div>\n {buttonArray.length > 0 ? (\n <div class=\"section-4\">{compList(buttonArray, 'button')}</div>\n ) : null}\n </div>\n );\n}\n/**\n * 3rd standard card layout, inspired by Material Design.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 3rd standard layout virtual node.\n */\nexport function create3(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Cover image\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle and description\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div\n class={`standard-layout-${component.layoutNumber} ${\n buttonArray ? KupCardCSSClasses.HAS_ACTIONS : ''\n }`}\n >\n <div class=\"mdc-ripple-surface\">\n <div class=\"section-1\">\n <div class=\"media\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n ) : null}\n <div class=\"text-on-media\">\n {textArray[textIndex] ? (\n <div class=\"sub-1 title\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n {textArray[++textIndex] ? (\n <div class=\"sub-1 subtitle\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n <div class=\"section-2\">\n {textArray[++textIndex] ? (\n <div class=\"sub-2 description\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n </div>\n {buttonArray.length > 0 ? (\n <div class=\"section-3\">{compList(buttonArray, 'button')}</div>\n ) : null}\n </div>\n );\n}\n/**\n * 4th standard card layout, inspired by Material Design.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 4th standard layout virtual node.\n */\nexport function create4(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Left image\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Title, subtitle\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n return (\n <div\n class={`standard-layout-${component.layoutNumber} ${\n buttonArray ? KupCardCSSClasses.HAS_ACTIONS : ''\n }`}\n >\n <div class=\"mdc-ripple-surface\">\n <div class=\"section-1\">\n {imageArray[0] ? (\n <div class=\"sub-1 image\">\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n </div>\n ) : null}\n <div class=\"text\">\n {textArray[textIndex] ? (\n <div class=\"sub-1 title\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n {textArray[++textIndex] ? (\n <div class=\"sub-1 subtitle\">\n <div>{textArray[textIndex]}</div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n <div class=\"section-2\">\n {buttonArray ? compList(buttonArray, 'button') : ''}\n </div>\n </div>\n );\n}\n/**\n * 5th standard card layout, useful to display TODOs with extensive information.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 5th standard layout virtual node.\n */\nexport function create5(component: KupCard): VNode {\n //Action button\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Top and bottom bars colors\n let colorIndex: number = 0;\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Left icon and right image\n let imageIndex: number = 0;\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //Progress bar\n const progressbarArray: GenericObject[] = component.data['progressbar']\n ? component.data['progressbar']\n : [];\n //6 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[colorIndex]\n ? colorArray[colorIndex]\n : `var(${KupThemeColorValues.PRIMARY})`,\n [`--color-1`]: colorArray[++colorIndex]\n ? colorArray[colorIndex]\n : `rgba(var(${KupThemeColorValues.PRIMARY}-rgb),0.1)`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\"></div>\n <div class=\"section-2\">\n <div class=\"sub-2 icon\">\n {imageArray[imageIndex] ? (\n <FImage\n id=\"image1\"\n {...imageArray[imageIndex]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"sub-2 text\">\n <div class=\"desc-text\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n <div class=\"alt-text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2 image\">\n {imageArray[++imageIndex] ? (\n <FImage\n id=\"image1\"\n {...imageArray[imageIndex]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n ) : null}\n </div>\n </div>\n <div class=\"section-3\">\n <div class=\"sub-3 progress-bar\">\n {progressbarArray[0] ? (\n <kup-progress-bar\n id=\"progressBar1\"\n is-slim\n {...progressbarArray[0]}\n ></kup-progress-bar>\n ) : null}\n </div>\n <div class=\"sub-3 button\">\n {buttonArray[0] ? (\n <kup-button\n id=\"button1\"\n {...buttonArray[0]}\n ></kup-button>\n ) : null}\n </div>\n </div>\n <div class=\"section-4\">\n <div class=\"sub-4 text\">\n <div>\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n <div class=\"alt-text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-4 text\">\n <div>\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n <div class=\"alt-text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 6th standard card layout, useful to display TODOs in a compact view.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 6th standard layout virtual node.\n */\nexport function create6(component: KupCard): VNode {\n //Action button\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Left bar color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Radial progress bar\n const progressbarArray: GenericObject[] = component.data['progressbar']\n ? component.data['progressbar']\n : [];\n //Left and center text\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n ['--color-0']: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n ['--kup_card_dynamic_color_0']: 'white',\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\">\n <div class=\"alt-text\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"section-2\">\n <div class=\"sub-2\">\n {progressbarArray[0] ? (\n <kup-progress-bar\n id=\"progressBar1\"\n is-radial\n {...progressbarArray[0]}\n ></kup-progress-bar>\n ) : null}\n <div>\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n {buttonArray[0] ? (\n <kup-button id=\"button1\" {...buttonArray[0]}></kup-button>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 7th standard card layout, centered image and text.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 7th standard layout virtual node.\n */\nexport function create7(component: KupCard): VNode {\n //Top bar color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Center image\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\"></div>\n <div class=\"section-2\">\n <div class=\"sub-2 image\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"100%\"\n sizeY=\"100%\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"sub-2 text\">\n <div>\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n <div class=\"section-3\">\n <div class=\"sub-3 alt-text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n <div class=\"sub-3 alt-text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n );\n}\n/**\n * 8th standard card layout, useful to display a list of chips.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 8th standard layout virtual node.\n */\nexport function create8(component: KupCard): VNode {\n //Chips\n const chipArray: GenericObject[] = component.data['chip']\n ? component.data['chip']\n : [];\n //Background and corner text colors\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Right corner icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"background\"></div>\n <div class=\"section-1\">\n <div class=\"sub-1\">\n <div class=\"text\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-3\">\n <div class=\"image\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"24px\"\n sizeY=\"24px\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"text\">\n {textArray[++textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n </div>\n <div class=\"section-2\">\n {chipArray[0] ? (\n <kup-chip id=\"chip1\" {...chipArray[0]}></kup-chip>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 9th standard card layout, chart displayed on the right with some info on the left.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 9th standard layout virtual node.\n */\nexport function create9(component: KupCard): VNode {\n //Chart\n const chartArray: GenericObject[] = component.data['chart']\n ? component.data['chart']\n : [];\n //Icon color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Left icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\">\n <div class=\"sub-1\">\n <div class=\"text description\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"3em\"\n sizeY=\"3em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text title\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n <div class=\"text subtitle\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"section-2\">\n {chartArray[0] ? (\n <kup-chart id=\"chart1\" {...chartArray[0]}></kup-chart>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 10th standard card layout, chart displayed on the left with some info on the right.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 10th standard layout virtual node.\n */\nexport function create10(component: KupCard): VNode {\n //Chart\n const chartArray: GenericObject[] = component.data['chart']\n ? component.data['chart']\n : [];\n //Icon color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Left icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div class=\"section-1\">\n {chartArray[0] ? (\n <kup-chart id=\"chart1\" {...chartArray[0]}></kup-chart>\n ) : null}\n </div>\n <div class=\"section-2\">\n <div class=\"sub-1\">\n <div class=\"text description\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"3em\"\n sizeY=\"3em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text title\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n <div class=\"text subtitle\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n/**\n * 11th standard card layout, chart displayed on the right with some info on the left, visible when hovering on the colored bar.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 11th standard layout virtual node.\n */\nexport function create11(component: KupCard): VNode {\n //Chart\n const chartArray: GenericObject[] = component.data['chart']\n ? component.data['chart']\n : [];\n //Icon and bar color\n const colorArray: string[] = component.data['color']\n ? component.data['color']\n : [];\n //Left icon\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n //3 text slots\n let textIndex: number = 0;\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Dynamic CSS variables\n let CSSVariables: GenericObject = {\n [`--color-0`]: colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`,\n };\n return (\n <div\n class={`standard-layout-${component.layoutNumber}`}\n style={CSSVariables}\n >\n <div\n class=\"section-1\"\n onMouseEnter={(e: MouseEvent) => {\n let el: any = e.currentTarget;\n el.style.minWidth = el.scrollWidth + 10 + 'px';\n el.style.maxWidth = el.scrollWidth + 10 + 'px';\n }}\n onMouseLeave={(e: MouseEvent) => {\n let el: any = e.currentTarget;\n el.style.minWidth = '';\n el.style.maxWidth = '';\n }}\n >\n <div class=\"sub-1 dyn-color\">\n <div class=\"text description\">\n {textArray[textIndex] ? textArray[textIndex] : ''}\n </div>\n </div>\n <div class=\"sub-2\">\n <div class=\"icon\">\n {imageArray[0] ? (\n <FImage\n color={\n colorArray[0]\n ? colorArray[0]\n : `var(${KupThemeColorValues.PRIMARY})`\n }\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"3em\"\n sizeY=\"3em\"\n ></FImage>\n ) : null}\n </div>\n <div class=\"text-wrapper\">\n <div class=\"text title\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n <div class=\"text subtitle\">\n <div>\n {textArray[++textIndex]\n ? textArray[textIndex]\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"section-2\">\n {chartArray[0] ? (\n <kup-chart id=\"chart1\" {...chartArray[0]}></kup-chart>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 12th standard card layout, used for column menus in tree and data table.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 12th standard layout virtual node.\n */\nexport function create12(component: KupCard): VNode {\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n const checkboxArray: GenericObject[] = component.data['checkbox']\n ? component.data['checkbox']\n : [];\n const datepickerArray: GenericObject[] = component.data['datepicker']\n ? component.data['datepicker']\n : [];\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n const timepickerArray: GenericObject[] = component.data['timepicker']\n ? component.data['timepicker']\n : [];\n // Setting up buttons.\n const buttonsIds: string[] = [];\n for (let index = 0; index < buttonArray.length; index++) {\n const button: GenericObject = buttonArray[index];\n if (button['id']) {\n buttonsIds.push(button['id']);\n }\n }\n return (\n <div class={`standard-layout-${component.layoutNumber} `}>\n {buttonsIds.includes(KupColumnMenuIds.BUTTON_REMOVE) ||\n buttonsIds.includes(KupColumnMenuIds.BUTTON_GROUP) ||\n buttonsIds.includes(KupColumnMenuIds.BUTTON_ADD_COLUMNS) ? (\n <div class=\"section-1\">\n {buttonsIds.includes(KupColumnMenuIds.BUTTON_REMOVE) ? (\n <kup-button\n {...buttonArray.find(\n (x) => x.id === KupColumnMenuIds.BUTTON_REMOVE\n )}\n />\n ) : null}\n {buttonsIds.includes(KupColumnMenuIds.BUTTON_GROUP) ? (\n <kup-button\n {...buttonArray.find(\n (x) => x.id === KupColumnMenuIds.BUTTON_GROUP\n )}\n />\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_ADD_COLUMNS\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id === KupColumnMenuIds.BUTTON_ADD_COLUMNS\n )}\n />\n ) : null}\n </div>\n ) : null}\n <div\n class={`section-2 ${\n textfieldArray.length > 0 ||\n datepickerArray.length > 0 ||\n timepickerArray.length > 0\n ? KupCardCSSClasses.HAS_CONTENT\n : ''\n }`}\n >\n {datepickerArray.length > 0\n ? compList(datepickerArray, 'datepicker')\n : null}\n {textfieldArray.length > 0\n ? compList(textfieldArray, 'textfield')\n : null}\n {timepickerArray.length > 0\n ? compList(timepickerArray, 'timepicker')\n : null}\n </div>\n {checkboxArray.length > 0 ? (\n <div class=\"section-3\">\n {compList(checkboxArray, 'checkbox')}\n </div>\n ) : null}\n </div>\n );\n}\n/**\n * 13th standard card layout, buttons and text lines, used for debug window.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 13th standard layout virtual node.\n */\nexport function create13(component: KupCard): VNode {\n //Action buttons\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n //Combobox list\n const comboboxArray: GenericObject[] = component.data['combobox']\n ? component.data['combobox']\n : [];\n //String list\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n //Textfield list\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n return (\n <div\n class={`standard-layout-${component.layoutNumber} ${\n buttonArray.length > 0 ? KupCardCSSClasses.HAS_ACTIONS : ''\n }`}\n >\n <div>\n {buttonArray.length > 0 || textfieldArray.length > 0 ? (\n <div class=\"section-1\">\n {compList(buttonArray, 'button')}\n {compList(textfieldArray, 'textfield')}\n {compList(comboboxArray, 'combobox')}\n </div>\n ) : null}\n {textArray.length > 0 ? (\n <div class=\"section-2\">{compList(textArray, 'text')}</div>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 14th standard card layout, used for column menus in tree and data table (with tabs). This is a very specifically-designed layout, so correct ids are a must.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 14th standard layout virtual node.\n */\nexport function create14(component: KupCard): VNode {\n const autocompleteArray: GenericObject[] = component.data['autocomplete']\n ? component.data['autocomplete']\n : [];\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n const checkboxArray: GenericObject[] = component.data['checkbox']\n ? component.data['checkbox']\n : [];\n const chipArray: GenericObject[] = component.data['chip']\n ? component.data['chip']\n : [];\n const datepickerArray: GenericObject[] = component.data['datepicker']\n ? component.data['datepicker']\n : [];\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n const objectArray: GenericObject[] = component.data['object']\n ? component.data['object']\n : [];\n const switchArray: GenericObject[] = component.data['switch']\n ? component.data['switch']\n : [];\n const tabbarArray: GenericObject[] = component.data['tabbar']\n ? component.data['tabbar']\n : [];\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n const timepickerArray: GenericObject[] = component.data['timepicker']\n ? component.data['timepicker']\n : [];\n const treeArray: GenericObject[] = component.data['tree']\n ? component.data['tree']\n : [];\n // Setting up currently visible view.\n const tabsValues: string[] = [];\n let viewIndex: number = 1;\n let visibleView: number = 1;\n if (tabbarArray[0] && tabbarArray[0].data) {\n for (let index = 0; index < tabbarArray[0].data.length; index++) {\n const tab: KupTabBarNode = tabbarArray[0].data[index];\n tabsValues.push(tab.id);\n if (tab.active) {\n visibleView = index + 1;\n }\n }\n }\n // Setting up buttons.\n const buttonsIds: string[] = [];\n for (let index = 0; index < buttonArray.length; index++) {\n const button: GenericObject = buttonArray[index];\n if (button['id']) {\n buttonsIds.push(button['id']);\n }\n }\n // Setting up switches.\n const switchesIds: string[] = [];\n for (let index = 0; index < switchArray.length; index++) {\n const switchEl: GenericObject = switchArray[index];\n if (switchEl['id']) {\n switchesIds.push(switchEl['id']);\n }\n }\n // Setting up text fields.\n const textfieldsIds: string[] = [];\n for (let index = 0; index < textfieldArray.length; index++) {\n const textfield: GenericObject = textfieldArray[index];\n if (textfield['id']) {\n textfieldsIds.push(textfield['id']);\n }\n }\n return (\n <div class={`standard-layout-${component.layoutNumber} `}>\n {objectArray[0] ? (\n <div class=\"section-1\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"84px\"\n sizeY=\"84px\"\n ></FImage>\n ) : (\n <div class=\"sub-spinner\">\n <kup-spinner\n active={true}\n dimensions=\"7px\"\n layout={14}\n />\n </div>\n )}\n <div class=\"sub-1\">\n {textArray[0] ||\n buttonsIds.includes(\n KupColumnMenuIds.BUTTON_OPEN_IN_NEW\n ) ||\n buttonsIds.includes(KupColumnMenuIds.BUTTON_SEARCH) ? (\n <div class=\"top\">\n {textArray[0] ? (\n <div class=\"title\">\n <span\n class={`label ${KupCardCSSClasses.CLICKABLE_LINK}`}\n id=\"title-link\"\n >\n {textArray[0]}\n </span>\n </div>\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_OPEN_IN_NEW\n ) ||\n buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <div class=\"buttons\">\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_OPEN_IN_NEW\n )}\n />\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_SEARCH\n )}\n />\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n {textArray[1] && textArray[2] ? (\n <div class=\"info\">\n <span class=\"label\">{textArray[1]}</span>\n <span class=\"value\">{textArray[2]}</span>\n </div>\n ) : null}\n {textArray[3] && textArray[4] ? (\n <div class=\"info\">\n <span class=\"label\">{textArray[3]}</span>\n <span class=\"value\">{textArray[4]}</span>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n <div class=\"section-2\">\n {tabbarArray[0] ? (\n <kup-tab-bar\n {...tabbarArray[0]}\n id={KupCardIds.VIEW_SELECTOR}\n />\n ) : null}\n </div>\n <div class=\"section-3\">\n {tabsValues.includes(KupLanguageGeneric.FILTERS) ? (\n <div\n class={`${KupCardCSSClasses.CARD_VIEW} ${\n KupCardCSSClasses.VIEW_PREFIX\n }${viewIndex} ${\n visibleView === viewIndex++\n ? KupCardCSSClasses.VISIBLE\n : ''\n }`}\n >\n <div\n class={`sub-field ${\n textfieldArray.length > 0 ||\n datepickerArray.length > 0 ||\n timepickerArray.length > 0\n ? KupCardCSSClasses.HAS_CONTENT\n : ''\n }`}\n >\n {datepickerArray.length > 0\n ? compList(datepickerArray, 'datepicker')\n : null}\n {textfieldsIds.includes(\n KupColumnMenuIds.TEXTFIELD_FILTER\n ) ? (\n <kup-text-field\n {...textfieldArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.TEXTFIELD_FILTER\n )}\n />\n ) : null}\n {textfieldsIds.includes(\n KupColumnMenuIds.TEXTFIELD_FROM\n ) ? (\n <kup-text-field\n {...textfieldArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.TEXTFIELD_FROM\n )}\n />\n ) : null}\n {textfieldsIds.includes(\n KupColumnMenuIds.TEXTFIELD_TO\n ) ? (\n <kup-text-field\n {...textfieldArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.TEXTFIELD_TO\n )}\n />\n ) : null}\n {timepickerArray.length > 0\n ? compList(timepickerArray, 'timepicker')\n : null}\n </div>\n {checkboxArray.length > 0 ? (\n <div class=\"sub-checkbox\">\n {compList(checkboxArray, 'checkbox')}\n </div>\n ) : null}\n </div>\n ) : null}\n {tabsValues.includes(KupLanguageColumn.COLUMNS) ? (\n <div\n class={`${KupCardCSSClasses.CARD_VIEW} ${\n KupCardCSSClasses.VIEW_PREFIX\n }${viewIndex} ${\n visibleView === viewIndex++\n ? KupCardCSSClasses.VISIBLE\n : ''\n }`}\n >\n <div class=\"sub-button\">\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_REMOVE\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_REMOVE\n )}\n />\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_GROUP\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_GROUP\n )}\n />\n ) : null}\n </div>\n <div class=\"sub-formula\">\n {textfieldsIds.includes(\n KupColumnMenuIds.TEXTFIELD_FORMULA\n ) ? (\n <kup-text-field\n {...textfieldArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.TEXTFIELD_FORMULA\n )}\n />\n ) : null}\n </div>\n <div class=\"sub-chip\">\n {chipArray[0] ? (\n <kup-chip\n {...chipArray[0]}\n type={FChipType.INPUT}\n id={KupCardIds.COLUMNS_LIST}\n />\n ) : (\n <kup-chip\n type={FChipType.INPUT}\n id={KupCardIds.COLUMNS_LIST}\n />\n )}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_APPLY\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_APPLY\n )}\n />\n ) : null}\n </div>\n {objectArray[0] ? (\n <div class=\"sub-tree\">\n {treeArray[0] ? (\n <kup-tree\n class=\"kup-full-width\"\n globalFilter\n {...treeArray[0]}\n id={KupCardIds.EXTRA_COLUMNS}\n />\n ) : (\n <div class=\"sub-spinner\">\n <kup-spinner\n active={true}\n dimensions=\"8px\"\n layout={2}\n />\n </div>\n )}\n </div>\n ) : null}\n </div>\n ) : null}\n {tabsValues.includes(KupLanguageGeneric.SETTINGS) ? (\n <div\n class={`${KupCardCSSClasses.CARD_VIEW} ${\n KupCardCSSClasses.VIEW_PREFIX\n }${viewIndex} ${\n visibleView === viewIndex++\n ? KupCardCSSClasses.VISIBLE\n : ''\n }`}\n >\n <div class=\"sub-autocomplete\">\n {autocompleteArray.length > 0\n ? compList(autocompleteArray, 'autocomplete')\n : null}\n </div>\n <div class=\"sub-switch\">\n {switchesIds.includes(\n KupColumnMenuIds.SWITCH_KEY\n ) ? (\n <kup-switch\n {...switchArray.find(\n (x) =>\n x.id === KupColumnMenuIds.SWITCH_KEY\n )}\n />\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n/**\n * 15th standard card layout, it can be used as a tooltip.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 15th standard layout virtual node.\n */\nexport function create15(component: KupCard): VNode {\n const buttonArray: GenericObject[] = component.data['button']\n ? component.data['button']\n : [];\n const imageArray: GenericObject[] = component.data['image']\n ? component.data['image']\n : [];\n const textArray: string[] = component.data['text']\n ? component.data['text']\n : [];\n const treeArray: GenericObject[] = component.data['tree']\n ? component.data['tree']\n : [];\n\n // Setting up currently visible view.\n const viewIndex: number = 1;\n\n const sectionOneArray: string[] = textArray.slice(0, 5);\n\n // Setting up section 2\n const sectionTwoArray: string[] = textArray.slice(5);\n const sectionTwoDetails: VNode[] = [];\n const labels: string[] = [];\n const values: string[] = [];\n for (let index = 0; index < sectionTwoArray.length; index++) {\n if (index % 2 === 0) {\n labels.push(sectionTwoArray[index]);\n } else {\n values.push(sectionTwoArray[index]);\n }\n }\n for (let index = 0; index < labels.length; index++) {\n sectionTwoDetails.push(\n <div class=\"detail-row\">\n <div class=\"detail-row__label ellipsis\">{labels[index]}</div>\n <div class=\"detail-row__value ellipsis\">{values[index]}</div>\n </div>\n );\n }\n\n // Setting up buttons.\n const buttonsIds: string[] = [];\n const genericButtons: GenericObject[] = [];\n const isReservedID = (id: string) => {\n return (\n id === KupColumnMenuIds.BUTTON_OPEN_IN_NEW ||\n id === KupColumnMenuIds.BUTTON_SEARCH\n );\n };\n for (let index = 0; index < buttonArray.length; index++) {\n const button: GenericObject = buttonArray[index];\n if (button['id']) {\n buttonsIds.push(button['id']);\n }\n if (!isReservedID(button['id'])) {\n genericButtons.push(button);\n }\n }\n const createDropdown = () => {\n const props: Partial<KupDropdownButton> = {\n data: { 'kup-list': { data: [], showIcons: true } },\n dropdownOnly: true,\n icon: 'more_vert',\n id: 'options',\n styling: FButtonStyling.ICON,\n };\n for (let index = 5; index < genericButtons.length; index++) {\n const button: Partial<HTMLKupButtonElement> = genericButtons[index];\n props.data['kup-list'].data.push({\n ...button,\n value: button.title,\n });\n }\n return (\n <kup-dropdown-button\n {...props}\n title={dom.ketchup.language.translate(\n KupLanguageGeneric.OPTIONS\n )}\n ></kup-dropdown-button>\n );\n };\n return (\n <div class={`standard-layout-${component.layoutNumber}`}>\n <div class=\"section-1\">\n {imageArray[0] ? (\n <FImage\n id=\"image1\"\n {...imageArray[0]}\n sizeX=\"84px\"\n sizeY=\"84px\"\n ></FImage>\n ) : (\n <div class=\"sub-spinner\">\n <kup-spinner\n active={true}\n dimensions=\"7px\"\n layout={14}\n />\n </div>\n )}\n <div class=\"sub-1\">\n {textArray[0] ||\n buttonsIds.includes(KupColumnMenuIds.BUTTON_OPEN_IN_NEW) ||\n buttonsIds.includes(KupColumnMenuIds.BUTTON_SEARCH) ? (\n <div class=\"top\">\n {textArray[0] ? (\n <div class=\"title\">\n <span\n class={`label ${KupCardCSSClasses.CLICKABLE_LINK}`}\n id=\"title-link\"\n >\n {textArray[0]}\n </span>\n </div>\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_OPEN_IN_NEW\n ) ||\n buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <div class=\"buttons\">\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_OPEN_IN_NEW\n )}\n />\n ) : null}\n {buttonsIds.includes(\n KupColumnMenuIds.BUTTON_SEARCH\n ) ? (\n <kup-button\n {...buttonArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.BUTTON_SEARCH\n )}\n />\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n {sectionOneArray[1] && sectionOneArray[2] ? (\n <div class=\"info\">\n <span class=\"label\">{sectionOneArray[1]}</span>\n <span class=\"value\">{sectionOneArray[2]}</span>\n </div>\n ) : null}\n {sectionOneArray[3] && sectionOneArray[4] ? (\n <div class=\"info\">\n <span class=\"label\">{sectionOneArray[3]}</span>\n <span class=\"value\">{sectionOneArray[4]}</span>\n </div>\n ) : null}\n </div>\n </div>\n <div class=\"section-2\">\n <div\n class={`${KupCardCSSClasses.CARD_VIEW} ${KupCardCSSClasses.VIEW_PREFIX}${viewIndex} ${KupCardCSSClasses.VISIBLE}`}\n >\n <div class=\"info\">\n {sectionTwoDetails.length > 0\n ? sectionTwoDetails\n : null}\n </div>\n </div>\n <div\n class={`${KupCardCSSClasses.CARD_VIEW} ${\n KupCardCSSClasses.VIEW_PREFIX\n }${viewIndex + 1}`}\n >\n {treeArray[0] ? (\n <kup-tree class=\"kup-full-width\" {...treeArray[0]} />\n ) : null}\n </div>\n </div>\n {genericButtons.length > 0 ? (\n <div class=\"section-3\">\n {compList(genericButtons.slice(0, 5), 'button')}\n {genericButtons.length > 5 ? createDropdown() : null}\n {treeArray[0] ? (\n <kup-button\n title={dom.ketchup.language.translate(\n KupLanguageGeneric.SHOW_ROW_OPTIONS\n )}\n id=\"view-selector\"\n icon=\"menu\"\n ></kup-button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * 16th standard card layout, it can be used as the toolbar.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 15th standard layout virtual node.\n */\n\nexport function create16(component: KupCard): VNode {\n const listArray: GenericObject[] = component.data['toolbar']\n ? component.data['toolbar']\n : [];\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n return (\n <div class={`standard-layout-${component.layoutNumber}`}>\n {/* <div class=\"section-1\">Titolo</div> */}\n <div class=\"section-2\">{/* Eventuali UI Popup button */}</div>\n <div class=\"section-3\">\n {listArray[0] ? (\n <div class=\"section-list\">\n {textfieldArray.length > 0\n ? compList(textfieldArray, 'textfield')\n : null}\n <kup-list isMenu={false} id=\"list1\" {...listArray[0]} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * 17th standard card layout, it can be used as a tooltip.\n * @param {KupCard} component - Card component.\n * @returns {VNode} 17th standard layout virtual node.\n */\nexport function create17(component: KupCard): VNode {\n const textfieldArray: GenericObject[] = component.data['textfield']\n ? component.data['textfield']\n : [];\n const listArray: GenericObject[] = component.data['list']\n ? component.data['list']\n : [];\n\n // Setting up text fields.\n const textfieldsIds: string[] = [];\n for (let index = 0; index < textfieldArray.length; index++) {\n const textfield: GenericObject = textfieldArray[index];\n if (textfield['id']) {\n textfieldsIds.push(textfield['id']);\n }\n }\n // Setting up buttons.\n const listIds: string[] = [];\n for (let index = 0; index < listArray.length; index++) {\n const el: GenericObject = listArray[index];\n if (el['id']) {\n listIds.push(el['id']);\n }\n }\n\n return (\n <div class={`standard-layout-${component.layoutNumber} `}>\n {textfieldArray.length > 0 && (\n <div\n class={`section-1 ${\n textfieldArray.length > 0\n ? KupCardCSSClasses.HAS_CONTENT\n : ''\n }`}\n >\n <div\n class={`sub-field ${\n textfieldArray.length > 0\n ? KupCardCSSClasses.HAS_CONTENT\n : ''\n }`}\n >\n {textfieldsIds.includes(\n KupColumnMenuIds.TEXTFIELD_FILTER\n ) ? (\n <kup-text-field\n {...textfieldArray.find(\n (x) =>\n x.id ===\n KupColumnMenuIds.TEXTFIELD_FILTER\n )}\n />\n ) : null}\n </div>\n </div>\n )}\n <div class=\"section-2\">\n {listArray.length > 0 ? (\n <div class=\"sub-list\">\n {listArray.map((b) => {\n return <kup-list {...b}></kup-list>;\n })}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","/*!\n * vanilla-picker v2.12.3\n * https://vanilla-picker.js.org\n *\n * Copyright 2017-2024 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate)\n * Released under the ISC license.\n */\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nString.prototype.startsWith = String.prototype.startsWith || function (needle) {\n return this.indexOf(needle) === 0;\n};\nString.prototype.padStart = String.prototype.padStart || function (len, pad) {\n var str = this;while (str.length < len) {\n str = pad + str;\n }return str;\n};\n\nvar colorNames = { cb: '0f8ff', tqw: 'aebd7', q: '-ffff', qmrn: '7fffd4', zr: '0ffff', bg: '5f5dc', bsq: 'e4c4', bck: '---', nch: 'ebcd', b: '--ff', bvt: '8a2be2', brwn: 'a52a2a', brw: 'deb887', ctb: '5f9ea0', hrt: '7fff-', chcT: 'd2691e', cr: '7f50', rnw: '6495ed', crns: '8dc', crms: 'dc143c', cn: '-ffff', Db: '--8b', Dcn: '-8b8b', Dgnr: 'b8860b', Dgr: 'a9a9a9', Dgrn: '-64-', Dkhk: 'bdb76b', Dmgn: '8b-8b', Dvgr: '556b2f', Drng: '8c-', Drch: '9932cc', Dr: '8b--', Dsmn: 'e9967a', Dsgr: '8fbc8f', DsTb: '483d8b', DsTg: '2f4f4f', Dtrq: '-ced1', Dvt: '94-d3', ppnk: '1493', pskb: '-bfff', mgr: '696969', grb: '1e90ff', rbrc: 'b22222', rwht: 'af0', stg: '228b22', chs: '-ff', gnsb: 'dcdcdc', st: '8f8ff', g: 'd7-', gnr: 'daa520', gr: '808080', grn: '-8-0', grnw: 'adff2f', hnw: '0fff0', htpn: '69b4', nnr: 'cd5c5c', ng: '4b-82', vr: '0', khk: '0e68c', vnr: 'e6e6fa', nrb: '0f5', wngr: '7cfc-', mnch: 'acd', Lb: 'add8e6', Lcr: '08080', Lcn: 'e0ffff', Lgnr: 'afad2', Lgr: 'd3d3d3', Lgrn: '90ee90', Lpnk: 'b6c1', Lsmn: 'a07a', Lsgr: '20b2aa', Lskb: '87cefa', LsTg: '778899', Lstb: 'b0c4de', Lw: 'e0', m: '-ff-', mgrn: '32cd32', nn: 'af0e6', mgnt: '-ff', mrn: '8--0', mqm: '66cdaa', mmb: '--cd', mmrc: 'ba55d3', mmpr: '9370db', msg: '3cb371', mmsT: '7b68ee', '': '-fa9a', mtr: '48d1cc', mmvt: 'c71585', mnLb: '191970', ntc: '5fffa', mstr: 'e4e1', mccs: 'e4b5', vjw: 'dead', nv: '--80', c: 'df5e6', v: '808-0', vrb: '6b8e23', rng: 'a5-', rngr: '45-', rch: 'da70d6', pgnr: 'eee8aa', pgrn: '98fb98', ptrq: 'afeeee', pvtr: 'db7093', ppwh: 'efd5', pchp: 'dab9', pr: 'cd853f', pnk: 'c0cb', pm: 'dda0dd', pwrb: 'b0e0e6', prp: '8-080', cc: '663399', r: '--', sbr: 'bc8f8f', rb: '4169e1', sbrw: '8b4513', smn: 'a8072', nbr: '4a460', sgrn: '2e8b57', ssh: '5ee', snn: 'a0522d', svr: 'c0c0c0', skb: '87ceeb', sTb: '6a5acd', sTgr: '708090', snw: 'afa', n: '-ff7f', stb: '4682b4', tn: 'd2b48c', t: '-8080', thst: 'd8bfd8', tmT: '6347', trqs: '40e0d0', vt: 'ee82ee', whT: '5deb3', wht: '', hts: '5f5f5', w: '-', wgrn: '9acd32' };\n\nfunction printNum(num) {\n var decs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n var str = decs > 0 ? num.toFixed(decs).replace(/0+$/, '').replace(/\\.$/, '') : num.toString();\n return str || '0';\n}\n\nvar Color = function () {\n function Color(r, g, b, a) {\n classCallCheck(this, Color);\n\n\n var that = this;\n function parseString(input) {\n\n if (input.startsWith('hsl')) {\n var _input$match$map = input.match(/([\\-\\d\\.e]+)/g).map(Number),\n _input$match$map2 = slicedToArray(_input$match$map, 4),\n h = _input$match$map2[0],\n s = _input$match$map2[1],\n l = _input$match$map2[2],\n _a = _input$match$map2[3];\n\n if (_a === undefined) {\n _a = 1;\n }\n\n h /= 360;\n s /= 100;\n l /= 100;\n that.hsla = [h, s, l, _a];\n } else if (input.startsWith('rgb')) {\n var _input$match$map3 = input.match(/([\\-\\d\\.e]+)/g).map(Number),\n _input$match$map4 = slicedToArray(_input$match$map3, 4),\n _r = _input$match$map4[0],\n _g = _input$match$map4[1],\n _b = _input$match$map4[2],\n _a2 = _input$match$map4[3];\n\n if (_a2 === undefined) {\n _a2 = 1;\n }\n\n that.rgba = [_r, _g, _b, _a2];\n } else {\n if (input.startsWith('#')) {\n that.rgba = Color.hexToRgb(input);\n } else {\n that.rgba = Color.nameToRgb(input) || Color.hexToRgb(input);\n }\n }\n }\n\n if (r === undefined) ; else if (Array.isArray(r)) {\n this.rgba = r;\n } else if (b === undefined) {\n var color = r && '' + r;\n if (color) {\n parseString(color.toLowerCase());\n }\n } else {\n this.rgba = [r, g, b, a === undefined ? 1 : a];\n }\n }\n\n createClass(Color, [{\n key: 'printRGB',\n value: function printRGB(alpha) {\n var rgb = alpha ? this.rgba : this.rgba.slice(0, 3),\n vals = rgb.map(function (x, i) {\n return printNum(x, i === 3 ? 3 : 0);\n });\n\n return alpha ? 'rgba(' + vals + ')' : 'rgb(' + vals + ')';\n }\n }, {\n key: 'printHSL',\n value: function printHSL(alpha) {\n var mults = [360, 100, 100, 1],\n suff = ['', '%', '%', ''];\n\n var hsl = alpha ? this.hsla : this.hsla.slice(0, 3),\n vals = hsl.map(function (x, i) {\n return printNum(x * mults[i], i === 3 ? 3 : 1) + suff[i];\n });\n\n return alpha ? 'hsla(' + vals + ')' : 'hsl(' + vals + ')';\n }\n }, {\n key: 'printHex',\n value: function printHex(alpha) {\n var hex = this.hex;\n return alpha ? hex : hex.substring(0, 7);\n }\n }, {\n key: 'rgba',\n get: function get() {\n if (this._rgba) {\n return this._rgba;\n }\n if (!this._hsla) {\n throw new Error('No color is set');\n }\n\n return this._rgba = Color.hslToRgb(this._hsla);\n },\n set: function set(rgb) {\n if (rgb.length === 3) {\n rgb[3] = 1;\n }\n\n this._rgba = rgb;\n this._hsla = null;\n }\n }, {\n key: 'rgbString',\n get: function get() {\n return this.printRGB();\n }\n }, {\n key: 'rgbaString',\n get: function get() {\n return this.printRGB(true);\n }\n }, {\n key: 'hsla',\n get: function get() {\n if (this._hsla) {\n return this._hsla;\n }\n if (!this._rgba) {\n throw new Error('No color is set');\n }\n\n return this._hsla = Color.rgbToHsl(this._rgba);\n },\n set: function set(hsl) {\n if (hsl.length === 3) {\n hsl[3] = 1;\n }\n\n this._hsla = hsl;\n this._rgba = null;\n }\n }, {\n key: 'hslString',\n get: function get() {\n return this.printHSL();\n }\n }, {\n key: 'hslaString',\n get: function get() {\n return this.printHSL(true);\n }\n }, {\n key: 'hex',\n get: function get() {\n var rgb = this.rgba,\n hex = rgb.map(function (x, i) {\n return i < 3 ? x.toString(16) : Math.round(x * 255).toString(16);\n });\n\n return '#' + hex.map(function (x) {\n return x.padStart(2, '0');\n }).join('');\n },\n set: function set(hex) {\n this.rgba = Color.hexToRgb(hex);\n }\n }], [{\n key: 'hexToRgb',\n value: function hexToRgb(input) {\n\n var hex = (input.startsWith('#') ? input.slice(1) : input).replace(/^(\\w{3})$/, '$1F').replace(/^(\\w)(\\w)(\\w)(\\w)$/, '$1$1$2$2$3$3$4$4').replace(/^(\\w{6})$/, '$1FF');\n\n if (!hex.match(/^([0-9a-fA-F]{8})$/)) {\n throw new Error('Unknown hex color; ' + input);\n }\n\n var rgba = hex.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map(function (x) {\n return parseInt(x, 16);\n });\n\n rgba[3] = rgba[3] / 255;\n return rgba;\n }\n }, {\n key: 'nameToRgb',\n value: function nameToRgb(input) {\n\n var hash = input.toLowerCase().replace('at', 'T').replace(/[aeiouyldf]/g, '').replace('ght', 'L').replace('rk', 'D').slice(-5, 4),\n hex = colorNames[hash];\n return hex === undefined ? hex : Color.hexToRgb(hex.replace(/\\-/g, '00').padStart(6, 'f'));\n }\n }, {\n key: 'rgbToHsl',\n value: function rgbToHsl(_ref) {\n var _ref2 = slicedToArray(_ref, 4),\n r = _ref2[0],\n g = _ref2[1],\n b = _ref2[2],\n a = _ref2[3];\n\n r /= 255;\n g /= 255;\n b /= 255;\n\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h = void 0,\n s = void 0,\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);break;\n case g:\n h = (b - r) / d + 2;break;\n case b:\n h = (r - g) / d + 4;break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, a];\n }\n }, {\n key: 'hslToRgb',\n value: function hslToRgb(_ref3) {\n var _ref4 = slicedToArray(_ref3, 4),\n h = _ref4[0],\n s = _ref4[1],\n l = _ref4[2],\n a = _ref4[3];\n\n var r = void 0,\n g = void 0,\n b = void 0;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n var hue2rgb = function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s,\n p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n var rgba = [r * 255, g * 255, b * 255].map(Math.round);\n rgba[3] = a;\n\n return rgba;\n }\n }]);\n return Color;\n}();\n\nvar EventBucket = function () {\n function EventBucket() {\n classCallCheck(this, EventBucket);\n\n this._events = [];\n }\n\n createClass(EventBucket, [{\n key: 'add',\n value: function add(target, type, handler) {\n target.addEventListener(type, handler, false);\n this._events.push({\n target: target,\n type: type,\n handler: handler\n });\n }\n }, {\n key: 'remove',\n value: function remove(target, type, handler) {\n this._events = this._events.filter(function (e) {\n var isMatch = true;\n if (target && target !== e.target) {\n isMatch = false;\n }\n if (type && type !== e.type) {\n isMatch = false;\n }\n if (handler && handler !== e.handler) {\n isMatch = false;\n }\n\n if (isMatch) {\n EventBucket._doRemove(e.target, e.type, e.handler);\n }\n return !isMatch;\n });\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this._events.forEach(function (e) {\n return EventBucket._doRemove(e.target, e.type, e.handler);\n });\n this._events = [];\n }\n }], [{\n key: '_doRemove',\n value: function _doRemove(target, type, handler) {\n target.removeEventListener(type, handler, false);\n }\n }]);\n return EventBucket;\n}();\n\nfunction parseHTML(htmlString) {\n\n var div = document.createElement('div');\n div.innerHTML = htmlString;\n return div.firstElementChild;\n}\n\nfunction dragTrack(eventBucket, area, callback) {\n var dragging = false;\n\n function clamp(val, min, max) {\n return Math.max(min, Math.min(val, max));\n }\n\n function onMove(e, info, starting) {\n if (starting) {\n dragging = true;\n }\n if (!dragging) {\n return;\n }\n\n e.preventDefault();\n\n var bounds = area.getBoundingClientRect(),\n w = bounds.width,\n h = bounds.height,\n x = info.clientX,\n y = info.clientY;\n\n var relX = clamp(x - bounds.left, 0, w),\n relY = clamp(y - bounds.top, 0, h);\n\n callback(relX / w, relY / h);\n }\n\n function onMouse(e, starting) {\n var button = e.buttons === undefined ? e.which : e.buttons;\n if (button === 1) {\n onMove(e, e, starting);\n } else {\n dragging = false;\n }\n }\n\n function onTouch(e, starting) {\n if (e.touches.length === 1) {\n onMove(e, e.touches[0], starting);\n } else {\n dragging = false;\n }\n }\n\n eventBucket.add(area, 'mousedown', function (e) {\n onMouse(e, true);\n });\n eventBucket.add(area, 'touchstart', function (e) {\n onTouch(e, true);\n });\n eventBucket.add(window, 'mousemove', onMouse);\n eventBucket.add(area, 'touchmove', onTouch);\n eventBucket.add(window, 'mouseup', function (e) {\n dragging = false;\n });\n eventBucket.add(area, 'touchend', function (e) {\n dragging = false;\n });\n eventBucket.add(area, 'touchcancel', function (e) {\n dragging = false;\n });\n}\n\nvar BG_TRANSP = 'linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em';\nvar HUES = 360;\n\nvar EVENT_KEY = 'keydown',\n EVENT_CLICK_OUTSIDE = 'mousedown',\n EVENT_TAB_MOVE = 'focusin';\n\nfunction $(selector, context) {\n return (context || document).querySelector(selector);\n}\n\nfunction stopEvent(e) {\n\n e.preventDefault();\n e.stopPropagation();\n}\nfunction onKey(bucket, target, keys, handler, stop) {\n bucket.add(target, EVENT_KEY, function (e) {\n if (keys.indexOf(e.key) >= 0) {\n if (stop) {\n stopEvent(e);\n }\n handler(e);\n }\n });\n}\n\nvar Picker = function () {\n function Picker(options) {\n classCallCheck(this, Picker);\n\n\n this.settings = {\n\n popup: 'right',\n layout: 'default',\n alpha: true,\n editor: true,\n editorFormat: 'hex',\n cancelButton: false,\n defaultColor: '#0cf'\n };\n\n this._events = new EventBucket();\n\n this.onChange = null;\n\n this.onDone = null;\n\n this.onOpen = null;\n\n this.onClose = null;\n\n this.setOptions(options);\n }\n\n createClass(Picker, [{\n key: 'setOptions',\n value: function setOptions(options) {\n var _this = this;\n\n if (!options) {\n return;\n }\n var settings = this.settings;\n\n function transfer(source, target, skipKeys) {\n for (var key in source) {\n if (skipKeys && skipKeys.indexOf(key) >= 0) {\n continue;\n }\n\n target[key] = source[key];\n }\n }\n\n if (options instanceof HTMLElement) {\n settings.parent = options;\n } else {\n\n if (settings.parent && options.parent && settings.parent !== options.parent) {\n this._events.remove(settings.parent);\n this._popupInited = false;\n }\n\n transfer(options, settings);\n\n if (options.onChange) {\n this.onChange = options.onChange;\n }\n if (options.onDone) {\n this.onDone = options.onDone;\n }\n if (options.onOpen) {\n this.onOpen = options.onOpen;\n }\n if (options.onClose) {\n this.onClose = options.onClose;\n }\n\n var col = options.color || options.colour;\n if (col) {\n this._setColor(col);\n }\n }\n\n var parent = settings.parent;\n if (parent && settings.popup && !this._popupInited) {\n\n var openProxy = function openProxy(e) {\n return _this.openHandler(e);\n };\n\n this._events.add(parent, 'click', openProxy);\n\n onKey(this._events, parent, [' ', 'Spacebar', 'Enter'], openProxy);\n\n this._popupInited = true;\n } else if (options.parent && !settings.popup) {\n this.show();\n }\n }\n }, {\n key: 'openHandler',\n value: function openHandler(e) {\n if (this.show()) {\n\n e && e.preventDefault();\n\n this.settings.parent.style.pointerEvents = 'none';\n\n var toFocus = e && e.type === EVENT_KEY ? this._domEdit : this.domElement;\n setTimeout(function () {\n return toFocus.focus();\n }, 100);\n\n if (this.onOpen) {\n this.onOpen(this.colour);\n }\n }\n }\n }, {\n key: 'closeHandler',\n value: function closeHandler(e) {\n var event = e && e.type;\n var doHide = false;\n\n if (!e) {\n doHide = true;\n } else if (event === EVENT_CLICK_OUTSIDE || event === EVENT_TAB_MOVE) {\n\n var knownTime = (this.__containedEvent || 0) + 100;\n if (e.timeStamp > knownTime) {\n doHide = true;\n }\n } else {\n\n stopEvent(e);\n\n doHide = true;\n }\n\n if (doHide && this.hide()) {\n this.settings.parent.style.pointerEvents = '';\n\n if (event !== EVENT_CLICK_OUTSIDE) {\n this.settings.parent.focus();\n }\n\n if (this.onClose) {\n this.onClose(this.colour);\n }\n }\n }\n }, {\n key: 'movePopup',\n value: function movePopup(options, open) {\n\n this.closeHandler();\n\n this.setOptions(options);\n if (open) {\n this.openHandler();\n }\n }\n }, {\n key: 'setColor',\n value: function setColor(color, silent) {\n this._setColor(color, { silent: silent });\n }\n }, {\n key: '_setColor',\n value: function _setColor(color, flags) {\n if (typeof color === 'string') {\n color = color.trim();\n }\n if (!color) {\n return;\n }\n\n flags = flags || {};\n var c = void 0;\n try {\n\n c = new Color(color);\n } catch (ex) {\n if (flags.failSilently) {\n return;\n }\n throw ex;\n }\n\n if (!this.settings.alpha) {\n var hsla = c.hsla;\n hsla[3] = 1;\n c.hsla = hsla;\n }\n this.colour = this.color = c;\n this._setHSLA(null, null, null, null, flags);\n }\n }, {\n key: 'setColour',\n value: function setColour(colour, silent) {\n this.setColor(colour, silent);\n }\n }, {\n key: 'show',\n value: function show() {\n var parent = this.settings.parent;\n if (!parent) {\n return false;\n }\n\n if (this.domElement) {\n var toggled = this._toggleDOM(true);\n\n this._setPosition();\n\n return toggled;\n }\n\n var html = this.settings.template || '<div class=\"picker_wrapper\" tabindex=\"-1\"><div class=\"picker_arrow\"></div><div class=\"picker_hue picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_sl\"><div class=\"picker_selector\"></div></div><div class=\"picker_alpha picker_slider\"><div class=\"picker_selector\"></div></div><div class=\"picker_editor\"><input aria-label=\"Type a color name or hex value\"/></div><div class=\"picker_sample\"></div><div class=\"picker_done\"><button>Ok</button></div><div class=\"picker_cancel\"><button>Cancel</button></div></div>';\n var wrapper = parseHTML(html);\n\n this.domElement = wrapper;\n this._domH = $('.picker_hue', wrapper);\n this._domSL = $('.picker_sl', wrapper);\n this._domA = $('.picker_alpha', wrapper);\n this._domEdit = $('.picker_editor input', wrapper);\n this._domSample = $('.picker_sample', wrapper);\n this._domOkay = $('.picker_done button', wrapper);\n this._domCancel = $('.picker_cancel button', wrapper);\n\n wrapper.classList.add('layout_' + this.settings.layout);\n if (!this.settings.alpha) {\n wrapper.classList.add('no_alpha');\n }\n if (!this.settings.editor) {\n wrapper.classList.add('no_editor');\n }\n if (!this.settings.cancelButton) {\n wrapper.classList.add('no_cancel');\n }\n this._ifPopup(function () {\n return wrapper.classList.add('popup');\n });\n\n this._setPosition();\n\n if (this.colour) {\n this._updateUI();\n } else {\n this._setColor(this.settings.defaultColor);\n }\n this._bindEvents();\n\n return true;\n }\n }, {\n key: 'hide',\n value: function hide() {\n return this._toggleDOM(false);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this._events.destroy();\n if (this.domElement) {\n this.settings.parent.removeChild(this.domElement);\n }\n }\n }, {\n key: '_bindEvents',\n value: function _bindEvents() {\n var _this2 = this;\n\n var that = this,\n dom = this.domElement,\n events = this._events;\n\n function addEvent(target, type, handler) {\n events.add(target, type, handler);\n }\n\n addEvent(dom, 'click', function (e) {\n return e.preventDefault();\n });\n\n dragTrack(events, this._domH, function (x, y) {\n return that._setHSLA(x);\n });\n\n dragTrack(events, this._domSL, function (x, y) {\n return that._setHSLA(null, x, 1 - y);\n });\n\n if (this.settings.alpha) {\n dragTrack(events, this._domA, function (x, y) {\n return that._setHSLA(null, null, null, 1 - y);\n });\n }\n\n var editInput = this._domEdit;\n {\n addEvent(editInput, 'input', function (e) {\n that._setColor(this.value, { fromEditor: true, failSilently: true });\n });\n\n addEvent(editInput, 'focus', function (e) {\n var input = this;\n\n if (input.selectionStart === input.selectionEnd) {\n input.select();\n }\n });\n }\n\n this._ifPopup(function () {\n\n var popupCloseProxy = function popupCloseProxy(e) {\n return _this2.closeHandler(e);\n };\n\n addEvent(window, EVENT_CLICK_OUTSIDE, popupCloseProxy);\n addEvent(window, EVENT_TAB_MOVE, popupCloseProxy);\n onKey(events, dom, ['Esc', 'Escape'], popupCloseProxy);\n\n var timeKeeper = function timeKeeper(e) {\n _this2.__containedEvent = e.timeStamp;\n };\n addEvent(dom, EVENT_CLICK_OUTSIDE, timeKeeper);\n\n addEvent(dom, EVENT_TAB_MOVE, timeKeeper);\n\n addEvent(_this2._domCancel, 'click', popupCloseProxy);\n });\n\n var onDoneProxy = function onDoneProxy(e) {\n _this2._ifPopup(function () {\n return _this2.closeHandler(e);\n });\n if (_this2.onDone) {\n _this2.onDone(_this2.colour);\n }\n };\n addEvent(this._domOkay, 'click', onDoneProxy);\n onKey(events, dom, ['Enter'], onDoneProxy);\n }\n }, {\n key: '_setPosition',\n value: function _setPosition() {\n var parent = this.settings.parent,\n elm = this.domElement;\n\n if (parent !== elm.parentNode) {\n parent.appendChild(elm);\n }\n\n this._ifPopup(function (popup) {\n\n if (getComputedStyle(parent).position === 'static') {\n parent.style.position = 'relative';\n }\n\n var cssClass = popup === true ? 'popup_right' : 'popup_' + popup;\n\n ['popup_top', 'popup_bottom', 'popup_left', 'popup_right'].forEach(function (c) {\n\n if (c === cssClass) {\n elm.classList.add(c);\n } else {\n elm.classList.remove(c);\n }\n });\n\n elm.classList.add(cssClass);\n });\n }\n }, {\n key: '_setHSLA',\n value: function _setHSLA(h, s, l, a, flags) {\n flags = flags || {};\n\n var col = this.colour,\n hsla = col.hsla;\n\n [h, s, l, a].forEach(function (x, i) {\n if (x || x === 0) {\n hsla[i] = x;\n }\n });\n col.hsla = hsla;\n\n this._updateUI(flags);\n\n if (this.onChange && !flags.silent) {\n this.onChange(col);\n }\n }\n }, {\n key: '_updateUI',\n value: function _updateUI(flags) {\n if (!this.domElement) {\n return;\n }\n flags = flags || {};\n\n var col = this.colour,\n hsl = col.hsla,\n cssHue = 'hsl(' + hsl[0] * HUES + ', 100%, 50%)',\n cssHSL = col.hslString,\n cssHSLA = col.hslaString;\n\n var uiH = this._domH,\n uiSL = this._domSL,\n uiA = this._domA,\n thumbH = $('.picker_selector', uiH),\n thumbSL = $('.picker_selector', uiSL),\n thumbA = $('.picker_selector', uiA);\n\n function posX(parent, child, relX) {\n child.style.left = relX * 100 + '%';\n }\n function posY(parent, child, relY) {\n child.style.top = relY * 100 + '%';\n }\n\n posX(uiH, thumbH, hsl[0]);\n\n this._domSL.style.backgroundColor = this._domH.style.color = cssHue;\n\n posX(uiSL, thumbSL, hsl[1]);\n posY(uiSL, thumbSL, 1 - hsl[2]);\n\n uiSL.style.color = cssHSL;\n\n posY(uiA, thumbA, 1 - hsl[3]);\n\n var opaque = cssHSL,\n transp = opaque.replace('hsl', 'hsla').replace(')', ', 0)'),\n bg = 'linear-gradient(' + [opaque, transp] + ')';\n\n this._domA.style.background = bg + ', ' + BG_TRANSP;\n\n if (!flags.fromEditor) {\n var format = this.settings.editorFormat,\n alpha = this.settings.alpha;\n\n var value = void 0;\n switch (format) {\n case 'rgb':\n value = col.printRGB(alpha);break;\n case 'hsl':\n value = col.printHSL(alpha);break;\n default:\n value = col.printHex(alpha);\n }\n this._domEdit.value = value;\n }\n\n this._domSample.style.color = cssHSLA;\n }\n }, {\n key: '_ifPopup',\n value: function _ifPopup(actionIf, actionElse) {\n if (this.settings.parent && this.settings.popup) {\n actionIf && actionIf(this.settings.popup);\n } else {\n actionElse && actionElse();\n }\n }\n }, {\n key: '_toggleDOM',\n value: function _toggleDOM(toVisible) {\n var dom = this.domElement;\n if (!dom) {\n return false;\n }\n\n var displayStyle = toVisible ? '' : 'none',\n toggle = dom.style.display !== displayStyle;\n\n if (toggle) {\n dom.style.display = displayStyle;\n }\n return toggle;\n }\n }]);\n return Picker;\n}();\n\n{\n var style = document.createElement('style');\n style.textContent = '.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:\"\";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:\"\";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:\"\";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\"\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}';\n document.documentElement.firstElementChild.appendChild(style);\n\n Picker.StyleElement = style;\n}\n\nexport { Picker as default };\n","@import 'box/kup-card-box';\n@import 'built-in/kup-card-built-in';\n@import 'collapsible/kup-card-collapsible';\n@import 'dialog/kup-card-dialog';\n@import 'free/kup-card-free';\n@import 'scalable/kup-card-scalable';\n@import 'standard/kup-card-standard';\n\n/**\n* @prop --kup-card-backdrop: Backdrop of the component when is visible.\n* @prop --kup-card-ripple-color: Sets color of ripple effect (for Material layouts).\n* @prop --kup-card-scalable-box-shadow: Box shadow of the scalable layouts.\n* @prop --kup-card-scalable-starting-font-size: Starting font size for scalable cards.\n*/\n\n:host {\n --kup_card_backdrop: var(--kup-card-backdrop, rgba(0, 0, 0, 0.32));\n --kup_card_ripple_color: var(\n --kup-card-ripple-color,\n var(--kup-primary-color)\n );\n --kup_card_scalable_box_shadow: var(\n --kup-card-scalable-box-shadow,\n 0 2px 1px -1px rgba(0, 0, 0, 0.2),\n 0 1px 1px 0 rgba(0, 0, 0, 0.14),\n 0 1px 3px 0 rgba(0, 0, 0, 0.12)\n );\n --kup_card_scalable_starting_font_size: var(\n --kup-card-scalable-starting-font-size,\n 3em\n );\n --kup_card_scalable_static_font_size: var(\n --kup-card-scalable-static-font-size\n );\n\n display: block;\n font-size: var(--kup-font-size);\n height: var(--kup_card_height);\n min-height: var(--kup_card_height);\n min-width: var(--kup_card_width);\n outline: none;\n position: relative;\n width: var(--kup_card_width);\n}\n\n:host([is-menu]) {\n display: none;\n animation: fade-in 0.25s ease-out;\n}\n\n:host([menu-visible]) {\n box-shadow: var(--kup-box-shadow);\n display: block;\n}\n\n@media screen and (max-width: 600px) {\n :host(#kup-tooltip) {\n z-index: 1000 !important;\n width: 100%;\n inset: auto 0px 0px !important;\n }\n}\n\n#kup-component {\n height: 100%;\n width: 100%;\n}\n\n.mdc-ripple-surface {\n cursor: pointer;\n flex-direction: column;\n display: flex;\n height: 100%;\n position: relative;\n\n &:before,\n &:after {\n background-color: var(--kup_card_ripple_color);\n }\n}\n\n.card-view {\n animation: fade-in 0.25s ease-out;\n display: none;\n height: 100%;\n width: 100%;\n\n &.visible {\n display: block;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n VNode,\n} from '@stencil/core';\nimport { MDCRipple } from '@material/ripple';\nimport * as boxLayouts from './box/kup-card-box';\nimport * as builtInLayouts from './built-in/kup-card-built-in';\nimport * as collapsibleLayouts from './collapsible/kup-card-collapsible';\nimport * as dialogLayouts from './dialog/kup-card-dialog';\nimport * as freeLayouts from './free/kup-card-free';\nimport * as scalableLayouts from './scalable/kup-card-scalable';\nimport * as standardLayouts from './standard/kup-card-standard';\nimport type {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport Picker from 'vanilla-picker';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n KupCardData,\n KupCardFamily,\n KupCardCSSClasses,\n KupCardEventPayload,\n KupCardIds,\n KupCardProps,\n KupCardClickPayload,\n KupCardColorPickerOptions,\n} from './kup-card-declarations';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { KupLanguageGeneric } from '../../managers/kup-language/kup-language-declarations';\nimport { layoutSpecificEvents } from './kup-card-helper';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-card',\n styleUrl: 'kup-card.scss',\n shadow: true,\n})\nexport class KupCard {\n /**\n * References the root HTML element of the component (<kup-card>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The actual data of the card.\n * @default null\n */\n @Prop() data: KupCardData = null;\n /**\n * Defines whether the card is a menu or not.\n * Works together with menuVisible.\n * @default false\n */\n @Prop({ reflect: true }) isMenu: boolean = false;\n /**\n * Sets the type of the card.\n * @default KupCardFamily.STANDARD\n */\n @Prop() layoutFamily: KupCardFamily = KupCardFamily.STANDARD;\n /**\n * Sets the number of the layout.\n * @default 1\n */\n @Prop() layoutNumber: number = 1;\n /**\n * Sets the status of the card as menu, when false it's hidden otherwise it's visible.\n * Works together with isMenu.\n * @default false\n */\n @Prop({ mutable: true, reflect: true }) menuVisible: boolean = false;\n /**\n * The width of the card, defaults to 100%. Accepts any valid CSS format (px, %, vw, etc.).\n * @default \"100%\"\n */\n @Prop() sizeX: string = '100%';\n /**\n * The height of the card, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).\n * @default \"100%\"\n */\n @Prop() sizeY: string = '100%';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * kup-card-event callback.\n */\n private cardEvent: EventListenerOrEventListenerObject = (\n e: CustomEvent\n ) => {\n e.stopPropagation();\n this.onKupEvent(e);\n };\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n /**\n * Previous height of the component, tested when the card is collapsible.\n */\n oldSizeY: string;\n /**\n * Used to prevent too many resizes callbacks at once.\n */\n private resizeTimeout: number;\n /**\n * Prevents multiple scaling callbacks when the card is scalable.\n */\n private scalingActive: boolean = false;\n private componentWrapper: HTMLElement = null;\n private colorPicker: Picker = null;\n private firstColorPickerChange: boolean = true;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the card is clicked.\n */\n @Event({\n eventName: 'kup-card-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupCardClickPayload>;\n /**\n * Triggered when a dialog card is closed with the \"X\".\n */\n @Event({\n eventName: 'kup-card-close',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClose: EventEmitter<KupEventPayload>;\n /**\n * Triggered when a sub-component of the card emits an event.\n */\n @Event({\n eventName: 'kup-card-event',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupEvent: EventEmitter<KupCardEventPayload>;\n /**\n * Triggered when the component is ready.\n */\n @Event({\n eventName: 'kup-card-ready',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupReady: EventEmitter<KupEventPayload>;\n\n onKupClick(id: string, value: string): void {\n this.kupClick.emit({\n comp: this,\n id: id,\n value: value,\n });\n }\n\n onKupClose(id: string): void {\n this.kupClose.emit({\n comp: this,\n id: id,\n });\n this.rootElement.remove();\n }\n\n onKupEvent(e: CustomEvent): void {\n layoutSpecificEvents(this, e);\n this.kupEvent.emit({\n comp: this,\n id: this.rootElement.id,\n event: e,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupCardProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * This method is invoked by KupManager whenever the component changes size.\n */\n @Method()\n async resizeCallback(): Promise<void> {\n window.clearTimeout(this.resizeTimeout);\n this.resizeTimeout = window.setTimeout(() => {\n this.layoutManager();\n }, 300);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupCardProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Set the events of the component.\n */\n private setEvents(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n // The dialog \"X\" button.\n const dialogClose: HTMLElement = root.querySelector(\n '#' + KupCardIds.DIALOG_CLOSE\n );\n if (dialogClose) {\n dialogClose.onclick = () =>\n this.onKupClose(KupCardIds.DIALOG_CLOSE);\n }\n // When an element can be clicked. Ideally anchors/links.\n const links: NodeListOf<HTMLElement> = root.querySelectorAll(\n '.' + KupCardCSSClasses.CLICKABLE_LINK\n );\n for (let index = 0; index < links.length; index++) {\n const link: HTMLElement = links[index];\n link.onclick = (e) => {\n e.stopPropagation();\n this.onKupClick(link.id, null);\n };\n }\n }\n }\n\n /**\n * This method is invoked by the layout manager when the layout family is collapsible.\n * When the card is not expanded and the collapsible content fits the wrapper, the bottom bar won't be displayed.\n */\n collapsible(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n const el: HTMLElement = root.querySelector(\n '.' + KupCardCSSClasses.COLLAPSIBLE_ELEMENT\n );\n const card: HTMLElement = root.querySelector(\n '.' + KupCardCSSClasses.COLLAPSIBLE_CARD\n );\n const wrapper: HTMLElement = root.querySelector(\n '.' + KupCardCSSClasses.COLLAPSIBLE_WRAPPER\n );\n if (!card.classList.contains(KupCardCSSClasses.EXPANDED)) {\n if (el.clientHeight > wrapper.clientHeight) {\n if (\n !card.classList.contains(\n KupCardCSSClasses.COLLAPSIBLE_ACTIVE\n )\n ) {\n card.classList.add(KupCardCSSClasses.COLLAPSIBLE_ACTIVE);\n }\n } else {\n if (\n card.classList.contains(\n KupCardCSSClasses.COLLAPSIBLE_ACTIVE\n )\n ) {\n card.classList.remove(KupCardCSSClasses.COLLAPSIBLE_ACTIVE);\n }\n }\n }\n }\n /**\n * This method will return the virtual node of the card, selecting the correct layout through layoutFamily and layoutNumber.\n * @returns {VNode} Virtual node of the card for the specified family layout and number.\n */\n getLayout(): VNode {\n const family: string = this.layoutFamily.toLowerCase();\n const method: string = 'create' + this.layoutNumber;\n\n try {\n switch (family) {\n case KupCardFamily.BOX: {\n return boxLayouts[method](this);\n }\n case KupCardFamily.BUILT_IN: {\n return builtInLayouts[method](this);\n }\n case KupCardFamily.COLLAPSIBLE: {\n return collapsibleLayouts[method](this);\n }\n case KupCardFamily.DIALOG: {\n return dialogLayouts[method](this);\n }\n case KupCardFamily.FREE: {\n return freeLayouts[method](this);\n }\n case KupCardFamily.SCALABLE: {\n return scalableLayouts[method](this);\n }\n default:\n case KupCardFamily.STANDARD: {\n return standardLayouts[method](this);\n }\n }\n } catch (error) {\n this.kupManager.debug.logMessage(\n this,\n error,\n KupDebugCategory.WARNING\n );\n let props = {\n resource: 'warning',\n title:\n this.kupManager.language.translate(\n KupLanguageGeneric.LAYOUT_NYI\n ) + '!',\n };\n return <FImage {...props}></FImage>;\n }\n }\n /**\n * This method is invoked by the layout manager when the layout family is dialog.\n * It will \"dialogify\" the card.\n */\n dialog(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const card: HTMLElement = this.rootElement as HTMLElement;\n const dragHandle: HTMLElement = root.querySelector(\n '#' + KupCardIds.DRAG_HANDLE\n );\n const unresizable: boolean = !!root.querySelector(\n '.' + KupCardCSSClasses.DIALOG_UNRESIZABLE\n );\n if (!this.kupManager.interact.isRegistered(card)) {\n this.kupManager.interact.dialogify(\n card,\n dragHandle ? dragHandle : null,\n unresizable\n );\n }\n }\n }\n /**\n * This method is invoked by the layout manager when the layout family is built-in.\n */\n builtIn(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const builtinLayout: HTMLElement = root.querySelector(\n '.' + KupCardCSSClasses.BUILT_IN_CARD\n );\n switch (this.layoutNumber) {\n case 4:\n const colorPickerOptions: KupCardColorPickerOptions =\n this.data && this.data.options\n ? (this.data.options as KupCardColorPickerOptions)\n : null;\n const color = colorPickerOptions\n ? colorPickerOptions.initialValue\n : null;\n if (!this.colorPicker) {\n this.colorPicker = new Picker({\n alpha: false,\n color: color,\n parent: builtinLayout,\n popup: false,\n onChange:\n colorPickerOptions &&\n colorPickerOptions.changeCb\n ? (color) => {\n if (!this.firstColorPickerChange) {\n colorPickerOptions.changeCb(\n color\n );\n }\n this.firstColorPickerChange = false;\n }\n : null,\n });\n if (\n colorPickerOptions &&\n colorPickerOptions.creationCb\n ) {\n colorPickerOptions.creationCb(this.colorPicker);\n }\n }\n break;\n }\n }\n }\n /**\n * This method will trigger whenever the card's render() hook occurs or when the size changes (through KupManager), in order to manage the more complex layout families.\n * It will also update any dynamic color handled by the selected layout.\n */\n layoutManager(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (this.componentWrapper) {\n const family: string = this.layoutFamily.toLowerCase();\n const dynColors: NodeListOf<HTMLElement> =\n root.querySelectorAll('.dyn-color');\n for (let index = 0; index < dynColors.length; index++) {\n this.rootElement.style.setProperty(\n '--kup_card_dynamic_color_' + index,\n this.kupManager.theme.colorContrast(\n window.getComputedStyle(dynColors[index])\n .backgroundColor\n )\n );\n }\n const autoscroll = root.querySelectorAll(\n '.' + KupCardCSSClasses.AUTOSCROLL\n );\n if (autoscroll && autoscroll.length) {\n autoscroll.forEach((el) => {\n el.scrollTop = el.scrollHeight;\n });\n }\n switch (family) {\n case KupCardFamily.COLLAPSIBLE:\n this.collapsible();\n break;\n case KupCardFamily.DIALOG:\n this.dialog();\n break;\n case KupCardFamily.BUILT_IN:\n this.builtIn();\n break;\n case KupCardFamily.SCALABLE:\n if (!this.scalingActive) {\n this.scalable();\n }\n break;\n default:\n break;\n }\n }\n }\n /**\n * Sets the event listeners on the sub-components, in order to properly emit the generic kup-card-event.\n */\n registerListeners(): void {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n root.addEventListener('kup-autocomplete-blur', this.cardEvent);\n root.addEventListener('kup-autocomplete-change', this.cardEvent);\n root.addEventListener('kup-autocomplete-input', this.cardEvent);\n root.addEventListener('kup-autocomplete-itemclick', this.cardEvent);\n root.addEventListener('kup-button-click', this.cardEvent);\n root.addEventListener('kup-checkbox-change', this.cardEvent);\n root.addEventListener('kup-chip-blur', this.cardEvent);\n root.addEventListener('kup-chip-click', this.cardEvent);\n root.addEventListener('kup-chip-iconclick', this.cardEvent);\n root.addEventListener('kup-combobox-change', this.cardEvent);\n root.addEventListener('kup-combobox-itemclick', this.cardEvent);\n root.addEventListener('kup-datatable-cellupdate', this.cardEvent);\n root.addEventListener('kup-datatable-rowselected', this.cardEvent);\n root.addEventListener('kup-datepicker-cleariconclick', this.cardEvent);\n root.addEventListener('kup-datepicker-input', this.cardEvent);\n root.addEventListener('kup-datepicker-itemclick', this.cardEvent);\n root.addEventListener('kup-datepicker-textfieldsubmit', this.cardEvent);\n root.addEventListener('kup-dropdownbutton-itemclick', this.cardEvent);\n root.addEventListener('kup-list-click', this.cardEvent);\n root.addEventListener('kup-switch-change', this.cardEvent);\n root.addEventListener('kup-tabbar-click', this.cardEvent);\n root.addEventListener('kup-textfield-cleariconclick', this.cardEvent);\n root.addEventListener('kup-textfield-change', this.cardEvent);\n root.addEventListener('kup-textfield-input', this.cardEvent);\n root.addEventListener('kup-textfield-submit', this.cardEvent);\n root.addEventListener('kup-timepicker-cleariconclick', this.cardEvent);\n root.addEventListener('kup-timepicker-input', this.cardEvent);\n root.addEventListener('kup-timepicker-itemclick', this.cardEvent);\n root.addEventListener('kup-timepicker-textfieldsubmit', this.cardEvent);\n root.addEventListener('kup-tree-dynamicmassexpansion', this.cardEvent);\n root.addEventListener('kup-tree-buttonclick', this.cardEvent);\n root.addEventListener('kup-tree-didunload', this.cardEvent);\n root.addEventListener('kup-tree-nodecollapse', this.cardEvent);\n root.addEventListener('kup-tree-nodedblclick', this.cardEvent);\n root.addEventListener('kup-tree-nodeexpand', this.cardEvent);\n root.addEventListener('kup-tree-nodeselected', this.cardEvent);\n }\n /**\n * This method is invoked by the layout manager when the layout family is scalable.\n * The content of the card (.scalable-element) will be resized to fit the wrapper (kup-card).\n * The scaling is performed by using a CSS variable (--kup_card_scalable_multiplier) which will impact the card's font-size.\n * When there is empty space, the multiplier will be increased, as will the content.\n * Viceversa, when the content exceeds the boundaries, the multiplier will be decreased.\n */\n async scalable() {\n this.scalingActive = true;\n const root: ShadowRoot = this.rootElement.shadowRoot;\n const el: HTMLElement = root.querySelector('.scalable-element');\n const card: HTMLElement = this.rootElement;\n /**\n * cardHeight sets the maximum height of the content, when exceeded the multiplier will be reduced (90%).\n */\n const cardHeight = (90 / 100) * card.clientHeight;\n /**\n * cardWidthLow and cardWidthHigh will set the boundaries in which the component must fit (85% - 95%).\n */\n const cardWidthLow = (85 / 100) * card.clientWidth;\n const cardWidthHigh = (95 / 100) * card.clientWidth;\n const multiplierStep = 0.1;\n let tooManyAttempts = 75;\n let multiplier = 1;\n let redrawCount = 0;\n const redraw = async () => {\n card.style.setProperty(\n '--kup_card_scalable_multiplier',\n multiplier.toFixed(1) + ''\n );\n this.kupManager.debug.logMessage(\n this,\n 'Redrawing scalable card (' + ++redrawCount + ').',\n KupDebugCategory.INFO\n );\n };\n const roundMultiplier = (m: number) => {\n return parseFloat(m.toFixed(1));\n };\n card.style.opacity = '0';\n card.style.transition = 'opacity 125ms ease-in';\n /**\n * Cycle to adjust the width.\n */\n await redraw();\n while (\n (el.clientWidth < cardWidthLow || el.clientWidth > cardWidthHigh) &&\n tooManyAttempts > 0 &&\n multiplier > multiplierStep\n ) {\n tooManyAttempts--;\n if (\n el.clientWidth < cardWidthLow &&\n el.clientHeight <= cardHeight\n ) {\n multiplier = roundMultiplier(multiplier + multiplierStep);\n await redraw();\n } else if (el.clientWidth > cardWidthHigh) {\n multiplier = roundMultiplier(multiplier - multiplierStep);\n await redraw();\n } else {\n tooManyAttempts = 0;\n }\n }\n card.style.opacity = '1';\n this.scalingActive = false;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.language.register(this);\n this.kupManager.theme.register(this);\n this.registerListeners();\n }\n\n componentDidLoad() {\n const rippleEl: HTMLElement = this.rootElement.shadowRoot.querySelector(\n '.mdc-ripple-surface'\n );\n if (rippleEl) {\n MDCRipple.attachTo(rippleEl);\n }\n this.kupManager.resize.observe(this.rootElement);\n this.kupReady.emit({\n comp: this,\n id: this.rootElement.id,\n });\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.setEvents();\n this.layoutManager();\n if (\n this.isMenu &&\n this.menuVisible &&\n (!document.activeElement ||\n document.activeElement.tagName === 'BODY')\n ) {\n setTimeout(() => {\n this.rootElement.focus();\n }, 0);\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n if (!this.data && this.rootElement.children.length < 1) {\n return;\n }\n\n const style: GenericObject = {\n '--kup_card_height': this.sizeY ? this.sizeY : '100%',\n '--kup_card_width': this.sizeX ? this.sizeX : '100%',\n };\n\n return (\n <Host style={style}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div\n id={componentWrapperId}\n onClick={() => this.onKupClick(null, null)}\n ref={(el) => (this.componentWrapper = el)}\n >\n {this.getLayout()}\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.interact.unregister([this.rootElement]);\n this.kupManager.language.unregister(this);\n this.kupManager.resize.unobserve(this.rootElement);\n this.kupManager.theme.unregister(this);\n }\n}\n","import {\n KupDataColumn,\n KupDataRow,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { GenericObject, KupEventPayload } from '../../types/GenericTypes';\n/**\n * Props of the kup-card component.\n * Used to export every prop in an object.\n */\nexport enum KupChartProps {\n asp = 'Sets the chart to a 2D or 3D aspect. 3D only works for Pie graphs.',\n axis = 'Sets the axis of the chart.',\n colors = 'Colors of the chart.',\n chartTitle = 'Title of the graph.',\n customStyle = 'Custom style of the component.',\n data = 'The actual data of the chart.',\n hAxis = 'Customize the hAxis.',\n legend = 'Sets the position of the legend. Supported values: bottom, labeled, left, none, right, top. Keep in mind that legend types are tied to chart types, some combinations might not work.',\n offlineMode = 'Renders charts without the Google API and using jQuery Sparkline.',\n series = 'The data series to be displayed. They must be of the same type.',\n showMarks = 'Displays the numerical values.',\n sizeX = 'The width of the chart, defaults to 100%. Accepts any valid CSS format (px, %, vw, etc.).',\n sizeY = 'The height of the chart, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).',\n sorting = 'Used to sort series.',\n stacked = 'Displays the data columns of an object on top of each other.',\n types = 'The type of the chart. Supported formats: Area, Bubble, Cal, Candlestick, Combo, Geo, Hbar, Line, Ohlc, Pie, Sankey, Scatter, Unk, Vbar.',\n vAxes = 'Customize the vAxes for multiple-charts.',\n vAxis = 'Customize the vAxis.',\n version = 'Google chart version to load.',\n}\n\nexport enum ChartAspect {\n D2 = '2D',\n D3 = '3D',\n}\n\nexport interface KupChartSort {\n column: number;\n desc?: boolean;\n}\n\nexport interface KupChartTrendlines {\n [index: string]: GenericObject;\n}\n\nexport interface ChartAxis {\n ticks?: string[];\n textPosition?: string;\n gridlines?: ChartAxisGridlines;\n viewWindow?: ChartAxisViewWindow;\n textStyle?: { color?: string; fontSize?: number };\n}\n\nexport interface ChartAxisGridlines {\n count?: number;\n}\n\nexport interface ChartAxisViewWindow {\n min?: number;\n max?: number;\n}\n\nexport interface KupChartClickEvent extends KupEventPayload {\n datetime?: string;\n column?: KupDataColumn;\n row?: KupDataRow;\n rowindex?: number;\n colindex?: number;\n}\n\nexport interface ChartOfflineMode {\n value: string;\n shape: string;\n}\n\nexport interface ChartOptions {\n backgroundColor: string;\n is3D: boolean;\n colors?: string[];\n width?: string;\n height?: string;\n legend?: { position: string; textStyle?: { color?: string } };\n isStacked?: boolean;\n title?: string;\n titleTextStyle?: { color?: string; fontSize?: number };\n series?: { [index: string]: ChartOptionsSerie };\n slices?: {\n color?: string;\n offset?: number;\n textStyle?: { color?: string };\n }[];\n hAxis?: ChartAxis;\n hAxes?: { [index: string]: ChartAxis };\n vAxis?: ChartAxis;\n vAxes?: { [index: string]: ChartAxis };\n type?: string;\n trendlines?: KupChartTrendlines;\n}\n\nexport interface ChartOptionsSerie {\n type?: string;\n targetAxisIndex?: string;\n}\nexport interface ChartSerie {\n code: string;\n decode?: string;\n}\n\nexport interface ChartTitle {\n value: string;\n color?: string;\n size?: number;\n}\n\nexport enum ChartType {\n Area = 'Area',\n Bubble = 'Bubble',\n Cal = 'Cal',\n Candlestick = 'Candlestick',\n Combo = 'Combo',\n Geo = 'Geo',\n Hbar = 'Hbar',\n Line = 'Line',\n Ohlc = 'Ohlc',\n Pie = 'Pie',\n Sankey = 'Sankey',\n Scatter = 'Scatter',\n Unk = 'Unk',\n ColumnChart = 'ColumnChart',\n Vbar = 'Vbar',\n}\n","import { formatToNumber } from '../../utils/cell-utils';\nimport { ChartSerie } from './kup-chart-declarations';\nimport { getColumnByName } from '../../utils/cell-utils';\nimport { KupObjects } from '../../managers/kup-objects/kup-objects';\nimport { KupDates } from '../../managers/kup-dates/kup-dates';\nimport { KupDatesFormats } from '../../managers/kup-dates/kup-dates-declarations';\nimport {\n KupDataColumn,\n KupDataDataset,\n KupDataRow,\n} from '../../managers/kup-data/kup-data-declarations';\n\nexport function getSerieDecode(serie: string, series: KupDataColumn[]): string {\n if (serie == null || series == null) {\n return null;\n }\n\n for (let i = 0; i < series.length; i++) {\n let serieObj = series[i];\n if (serieObj != null && serieObj.name == serie) {\n return serieObj.title;\n }\n }\n return serie;\n}\n\nexport const convertColumns = (\n data: KupDataDataset,\n { series, axis }\n): KupDataColumn[] => {\n if (!data || !series) {\n return [];\n }\n\n const columns: KupDataColumn[] = [];\n\n // axis\n const axisColumn = getColumnByName(data.columns, axis);\n if (axisColumn) {\n columns.push(axisColumn);\n }\n\n // series\n series.map((serie: ChartSerie) => {\n // searching colum\n const c = getColumnByName(data.columns, serie.code);\n\n if (c) {\n columns.push(c);\n }\n });\n\n return columns;\n};\n\nexport const convertRows = (\n data: any,\n columns: KupDataColumn[],\n showMarks: boolean\n) => {\n if (!data) {\n return [];\n }\n\n const rows = [];\n\n if (data.rows) {\n const kupDates: KupDates = new KupDates();\n const kupObjects: KupObjects = new KupObjects();\n data.rows.forEach((r: KupDataRow) => {\n const cells = r.cells;\n\n const currentRow = [];\n\n columns.forEach((c, index) => {\n const cell = cells[c.name];\n\n if (cell && cell.obj) {\n const addMark = showMarks && index > 0;\n\n if (kupObjects.isNumber(cell.obj)) {\n const value = formatToNumber(cell);\n currentRow.push(value);\n if (addMark) {\n currentRow.push(value.toString());\n }\n } else if (kupObjects.isDate(cell.obj)) {\n const value = kupDates.toDate(\n kupObjects.parseDate(cell.obj)\n );\n currentRow.push(value);\n if (addMark) {\n currentRow.push(value.toString());\n }\n } else if (kupObjects.isTime(cell.obj)) {\n const datetime = kupDates.normalize(\n cell.obj.k,\n KupDatesFormats.ISO_TIME\n );\n currentRow.push(datetime.toDate());\n if (addMark) {\n currentRow.push(datetime.toDate());\n }\n } else if (kupObjects.isTimestamp(cell.obj)) {\n const datetime = kupDates.normalize(\n cell.obj.k,\n KupDatesFormats.ISO_DATE_TIME\n );\n currentRow.push(datetime.toDate());\n if (addMark) {\n currentRow.push(datetime.toDate());\n }\n } else {\n currentRow.push(cell.obj.k);\n if (addMark) {\n currentRow.push(cell.value);\n }\n }\n }\n });\n\n rows.push(currentRow);\n });\n }\n\n return rows;\n};\n",":host {\n display: block;\n margin: auto;\n position: relative;\n\n #kup-component {\n height: 100%;\n width: 100%;\n overflow: hidden;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n Watch,\n} from '@stencil/core';\nimport {\n ChartType,\n ChartAspect,\n ChartOptions,\n ChartAxis,\n ChartOfflineMode,\n ChartSerie,\n ChartTitle,\n KupChartProps,\n KupChartClickEvent,\n KupChartTrendlines,\n KupChartSort,\n} from './kup-chart-declarations';\nimport {\n convertColumns,\n convertRows,\n getSerieDecode,\n} from './kup-chart-builder';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, identify, setProps } from '../../utils/utils';\nimport { getColumnByName } from '../../utils/cell-utils';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupDataDataset } from '../../managers/kup-data/kup-data-declarations';\n\ndeclare const google: any;\ndeclare const $: any;\n\n@Component({\n tag: 'kup-chart',\n styleUrl: 'kup-chart.scss',\n shadow: true,\n})\nexport class KupChart {\n /**\n * References the root HTML element of the component (<kup-chart>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Sets the chart to a 2D or 3D aspect. 3D only works for Pie graphs.\n * @default undefined\n */\n @Prop() asp: ChartAspect;\n /**\n * Sets the axis of the chart.\n * @default undefined\n */\n @Prop() axis: string;\n /**\n * Title of the graph.\n * @default undefined\n */\n @Prop() chartTitle: ChartTitle;\n /**\n * Colors of the chart.\n * @default []\n */\n @Prop() colors: string[] = [];\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The actual data of the chart.\n * @default undefined\n */\n @Prop() data: KupDataDataset;\n /**\n * Customize the hAxis.\n * @default undefined\n */\n @Prop() hAxis: ChartAxis;\n /**\n * Customize the hAxes for multiple-chart.\n */\n @Prop() hAxes: ChartAxis[];\n /**\n * Sets the position of the legend. Supported values: bottom, labeled, left, none, right, top. Keep in mind that legend types are tied to chart types, some combinations might not work.\n * @default \"right\"\n */\n @Prop() legend: string = 'right';\n /**\n * Renders charts without the Google API and using jQuery Sparkline.\n * @default undefined\n */\n @Prop() offlineMode: ChartOfflineMode = undefined;\n /**\n * The data series to be displayed. They must be of the same type.\n * @default undefined\n */\n @Prop() series: ChartSerie[];\n /**\n * Displays the numerical values.\n * @default false\n */\n @Prop() showMarks = false;\n /**\n * The width of the chart, defaults to 100%. Accepts any valid CSS format (px, %, vw, etc.).\n * @default \"100%\"\n */\n @Prop() sizeX: string = '100%';\n /**\n * The height of the chart, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).\n * @default \"100%\"\n */\n @Prop() sizeY: string = '100%';\n /**\n * Used to sort series.\n * @default null\n */\n @Prop() sorting: KupChartSort[] = null;\n /**\n * Displays the data columns of an object on top of each other.\n */\n @Prop() stacked = false;\n /**\n * The type of the chart. Supported formats: Area, Bubble, Cal, Candlestick, Combo, Geo, Hbar, Line, Ohlc, Pie, Sankey, Scatter, Unk, Vbar.\n * @default [ChartType.Hbar]\n */\n @Prop() types: ChartType[] = [ChartType.Hbar];\n /**\n * Customize the vAxes for multiple-chart.\n */\n @Prop() vAxes: ChartAxis[];\n /**\n * Customize the vAxis.\n * @default undefined\n *\n */\n @Prop() vAxis: ChartAxis;\n /**\n * KupChartTrendlines.\n */\n @Prop() trendlines: KupChartTrendlines;\n /**\n * Google chart version to load\n * @default \"45.2\"\n */\n @Prop() version = '45.2';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Used to prevent too many resize callbacks at once.\n */\n private resizeTimeout: number;\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n private chartContainer?: HTMLDivElement;\n private gChart: any;\n private gChartDataTable: any;\n private gChartView: any;\n private elStyle = undefined;\n private themeColors: string[] = null;\n private themeText: string = null;\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('data')\n identifyRows() {\n if (this.data) {\n identify(this.data.rows);\n }\n }\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when a chart serie is clicked\n */\n @Event({\n eventName: 'kup-chart-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChartClick: EventEmitter<KupChartClickEvent>;\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupChartProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * This method is invoked by KupManager whenever the component changes size.\n */\n @Method()\n async resizeCallback(): Promise<void> {\n window.clearTimeout(this.resizeTimeout);\n this.resizeTimeout = window.setTimeout(() => {\n if (!this.offlineMode) {\n const options = this.createGoogleChartOptions();\n try {\n this.gChart.draw(this.gChartView, options);\n } catch (error) {}\n } else {\n this.loadOfflineChart();\n }\n }, 300);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupChartProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n private loadGoogleChart(): void {\n google.charts.setOnLoadCallback(this.createChart.bind(this));\n }\n\n private createGoogleChart(): any {\n if (this.isComboChart()) {\n return new google.visualization.ComboChart(this.chartContainer);\n } else if (this.types.length === 1) {\n switch (this.types[0]) {\n case ChartType.Area:\n return new google.visualization.AreaChart(\n this.chartContainer\n );\n\n case ChartType.Bubble:\n return new google.visualization.BubbleChart(\n this.chartContainer\n );\n\n case ChartType.Cal:\n return new google.visualization.Calendar(\n this.chartContainer\n );\n\n case ChartType.Candlestick:\n return new google.visualization.CandlestickChart(\n this.chartContainer\n );\n\n case ChartType.Geo:\n return new google.visualization.GeoChart(\n this.chartContainer\n );\n\n case ChartType.Hbar:\n return new google.visualization.BarChart(\n this.chartContainer\n );\n\n case ChartType.Line:\n return new google.visualization.LineChart(\n this.chartContainer\n );\n\n case ChartType.Pie:\n return new google.visualization.PieChart(\n this.chartContainer\n );\n\n case ChartType.Sankey:\n return new google.visualization.Sankey(this.chartContainer);\n\n case ChartType.Scatter:\n return new google.visualization.ScatterChart(\n this.chartContainer\n );\n\n default:\n return new google.visualization.ColumnChart(\n this.chartContainer\n );\n }\n }\n }\n\n private getMainChartType(): ChartType {\n if (this.types.length > 0) {\n return this.types[0];\n }\n\n return ChartType.Unk;\n }\n\n private isComboChart(): boolean {\n return this.types.length > 1;\n }\n\n private createGoogleChartOptions(): ChartOptions {\n const opts: ChartOptions = {\n backgroundColor: 'transparent',\n is3D: ChartAspect.D3 === this.asp,\n };\n\n if (this.trendlines) opts.trendlines = this.trendlines;\n\n if (this.colors && this.colors.length > 0) {\n opts.colors = this.colors;\n } else {\n opts.colors = this.themeColors;\n }\n\n if (this.legend && this.legend !== 'none') {\n opts.legend = {\n position: this.legend,\n textStyle: { color: this.themeText },\n };\n } else {\n opts.legend = {\n position: 'none',\n };\n }\n\n if (\n this.stacked &&\n (ChartType.ColumnChart === this.getMainChartType() ||\n ChartType.Unk === this.getMainChartType() ||\n ChartType.Hbar === this.getMainChartType() ||\n ChartType.Vbar === this.getMainChartType())\n ) {\n opts.isStacked = true;\n }\n\n if (this.chartTitle) {\n opts.title = this.chartTitle.value;\n\n opts.titleTextStyle = {};\n if (this.chartTitle.color) {\n opts.titleTextStyle.color = this.chartTitle.color;\n } else {\n opts.titleTextStyle.color = this.themeText;\n }\n\n if (this.chartTitle.size) {\n opts.titleTextStyle.fontSize = this.chartTitle.size;\n }\n }\n\n // series for combo chart\n if (this.isComboChart()) {\n opts.series = {};\n\n this.types.forEach((type, index) => {\n let serieType = 'bars';\n\n if (ChartType.Line === type) {\n serieType = 'line';\n } else if (ChartType.Area === type) {\n serieType = 'area';\n }\n\n let idx = '';\n if (\n (this.vAxes && this.vAxes.length > 0) ||\n (this.hAxes && this.hAxes.length > 0)\n ) {\n idx = index.toString();\n }\n opts.series[index.toString()] = {\n type: serieType,\n targetAxisIndex: idx,\n };\n });\n }\n if (this.vAxes) {\n opts.vAxes = {};\n this.vAxes.forEach((vAxe, index) => {\n opts.vAxes[index.toString()] = vAxe;\n });\n }\n\n if (this.vAxis) {\n opts.vAxis = this.vAxis;\n opts.vAxis['textStyle'] = { color: this.themeText };\n } else {\n opts.vAxis = { textStyle: { color: this.themeText } };\n }\n\n if (this.hAxes) {\n opts.hAxes = {};\n this.hAxes.forEach((hAxe, index) => {\n opts.hAxes[index.toString()] = hAxe;\n });\n }\n\n if (this.hAxis) {\n opts.hAxis = this.hAxis;\n opts.hAxis['textStyle'] = { color: this.themeText };\n } else {\n opts.hAxis = { textStyle: { color: this.themeText } };\n }\n\n if (this.types[0] === 'Pie') {\n opts.slices = [];\n for (let index = 0; index < opts.colors.length; index++) {\n opts.slices.push({\n textStyle: {\n color: this.kupManager.theme.colorContrast(\n opts.colors[index]\n ),\n },\n });\n }\n }\n return opts;\n }\n\n private createChart(): void {\n const tableColumns = convertColumns(this.data, {\n axis: this.axis,\n series: this.series,\n });\n\n const tableRows = convertRows(this.data, tableColumns, this.showMarks);\n\n const dataTableColumns = [];\n\n for (let i = 0; i < tableColumns.length; i++) {\n const c = tableColumns[i];\n\n dataTableColumns.push({\n label: getSerieDecode(c.name, this.data.columns),\n });\n\n if (i > 0 && this.showMarks) {\n dataTableColumns.push({\n type: 'string',\n role: 'annotation',\n });\n }\n }\n\n this.gChartDataTable = new google.visualization.arrayToDataTable([\n dataTableColumns,\n ...tableRows,\n ]);\n\n this.gChartView = new google.visualization.DataView(\n this.gChartDataTable\n );\n\n if (this.sorting && this.sorting.length > 0) {\n this.gChartView.setRows(\n this.gChartView.getSortedRows(this.sorting)\n );\n }\n\n this.gChart = this.createGoogleChart();\n\n const options = this.createGoogleChartOptions();\n\n this.gChart.draw(this.gChartView, options);\n\n google.visualization.events.addListener(\n this.gChart,\n 'select',\n this.onChartSelect.bind(this)\n );\n }\n\n private onChartSelect(): void {\n const selectedItem = this.gChart.getSelection()[0];\n\n if (selectedItem) {\n const event: KupChartClickEvent = {\n comp: this,\n id: this.rootElement.id,\n };\n\n if (selectedItem.date) {\n // calendar chart\n event.datetime = selectedItem.date;\n\n if (selectedItem.row || selectedItem.row == 0) {\n const rowIndex = this.gChartView.getTableRowIndex(\n selectedItem.row\n );\n event.row = this.data.rows[rowIndex];\n event.rowindex = rowIndex;\n } else {\n return;\n }\n } else {\n // any other chart\n const rowIndex = selectedItem.row;\n const colIndex = selectedItem.column;\n\n const originalRowIndex = this.gChartView.getTableRowIndex(\n rowIndex != null ? rowIndex : 0\n );\n\n event.row = this.data.rows[originalRowIndex];\n event.rowindex = originalRowIndex;\n\n if (this.series.length > 1) {\n let originalColIndex = this.gChartView.getTableColumnIndex(\n colIndex != null ? colIndex : 0\n );\n\n // checking if col is annotation\n if (\n 'annotation' ===\n this.gChartDataTable.getColumnProperty(\n originalColIndex,\n 'role'\n )\n ) {\n --originalColIndex;\n }\n\n event.column = getColumnByName(\n this.data.columns,\n this.series[originalColIndex - 1].code\n );\n\n event.colindex = originalColIndex;\n } else {\n event.column = getColumnByName(\n this.data.columns,\n this.series[0].code\n );\n event.colindex = 0;\n }\n }\n this.kupChartClick.emit(event);\n }\n }\n\n private loadOfflineChart(): void {\n if (!this.offlineMode.value || this.offlineMode.value == '') {\n this.kupManager.debug.logMessage(\n this,\n \"Incorrect or incomplete data, can't render chart in offline mode!\",\n KupDebugCategory.WARNING\n );\n return;\n }\n\n let valueAsArray: string[] = this.offlineMode.value.split(';');\n let colors: string[] = undefined;\n\n var options = {\n height: this.rootElement.clientHeight,\n width: this.rootElement.clientWidth,\n };\n\n if (this.colors && this.colors.length > 0) {\n colors = this.colors;\n } else {\n colors = this.themeColors;\n }\n\n switch (this.offlineMode.shape) {\n case 'box':\n options['type'] = 'box';\n break;\n\n case 'bul':\n case 'bullet':\n options['type'] = 'bullet';\n options['targetWidth'] = this.rootElement.clientWidth / 20;\n break;\n\n case 'dis':\n case 'discrete':\n options['type'] = 'discrete';\n options['lineColor'] = colors[0];\n break;\n\n case 'lin':\n case 'line':\n options['type'] = 'line';\n options['lineColor'] = colors[0];\n options['fillColor'] = colors[1];\n break;\n\n case 'pie':\n options['type'] = 'pie';\n options['sliceColors'] = colors;\n break;\n\n case 'tri':\n case 'tristate':\n options['type'] = 'tristate';\n options['barWidth'] =\n this.rootElement.clientWidth / valueAsArray.length;\n break;\n\n default:\n options['type'] = 'bar';\n options['barColor'] = colors[0];\n options['negBarColor'] = colors[1];\n options['zeroBarColor'] = colors[2];\n options['barWidth'] =\n this.rootElement.clientWidth / valueAsArray.length;\n }\n\n $(this.chartContainer).sparkline(\n this.complianceCheck(valueAsArray),\n options\n );\n }\n\n private complianceCheck(valueAsArray: string[]): number[] {\n let ints: number[] = [valueAsArray.length];\n let i = 0;\n valueAsArray.forEach((element) => {\n try {\n element = element.replace(',', '.');\n ints[i++] = parseFloat(element);\n } catch (e) {\n ints[i++] = null;\n }\n });\n return ints;\n }\n\n private fetchThemeColors(): void {\n const colorArray: string[] = [];\n const key: string = '--kup-chart-color-';\n for (\n let index = 1;\n this.kupManager.theme.cssVars[key + index];\n index++\n ) {\n colorArray.push(this.kupManager.theme.cssVars[key + index]);\n }\n this.themeText =\n this.kupManager.theme.cssVars[KupThemeColorValues.TEXT];\n\n try {\n for (\n let index = 0;\n index < this.data.rows.length ||\n index < this.data.columns.length;\n index++\n ) {\n colorArray.push(this.kupManager.theme.randomColor(25));\n }\n } catch (error) {\n if (!this.offlineMode) {\n this.kupManager.debug.logMessage(\n this,\n 'Chart colors setup failed!',\n KupDebugCategory.WARNING\n );\n }\n }\n\n this.themeColors = colorArray;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.identifyRows();\n }\n\n componentDidLoad() {\n this.kupManager.resize.observe(this.rootElement);\n if (!this.offlineMode && (!this.axis || !this.series)) {\n return;\n }\n\n // loading charts\n if (google && !this.offlineMode) {\n // getting google charts css from main document\n document\n .querySelectorAll(\n `link[href^=\"https://www.gstatic.com/charts/${this.version}/css\"]`\n )\n .forEach((node) =>\n this.rootElement.shadowRoot.appendChild(node.cloneNode())\n );\n\n try {\n this.loadGoogleChart();\n } catch (err) {\n console.error(err);\n }\n } else {\n try {\n this.loadOfflineChart();\n } catch (err) {\n console.error(err);\n }\n }\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n this.fetchThemeColors();\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n componentWillUpdate() {\n if (this.gChart) {\n this.gChart.clearChart();\n }\n }\n\n componentDidUpdate() {\n if (!this.offlineMode) {\n this.loadGoogleChart();\n } else {\n this.loadOfflineChart();\n }\n }\n\n render() {\n this.elStyle = undefined;\n this.elStyle = {\n height: this.sizeY,\n minHeight: this.sizeY,\n width: this.sizeX,\n minWidth: this.sizeX,\n };\n\n return (\n <Host style={this.elStyle}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div\n id={componentWrapperId}\n ref={(chartContainer) =>\n (this.chartContainer = chartContainer)\n }\n />\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n this.kupManager.resize.unobserve(this.rootElement);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-checkbox component.\n * Used to export every prop in an object.\n */\nexport enum KupCheckboxProps {\n checked = \"Defaults at false. When set to true, the component will be set to 'checked'.\",\n customStyle = 'Custom style of the component.',\n disabled = 'When set to true, the component is disabled.',\n indeterminate = \"When set to true, the component will be set to 'indeterminate'.\",\n label = 'When specified, its content will be shown as a label.',\n leadingLabel = 'When set to true, the label will be on the left of the component.',\n}\n\nexport interface KupCheckboxEventPayload extends KupEventPayload {\n checked: boolean;\n value: string;\n}\n","/**\n* NOTE: These variables are used in the related f-component.\n*\n* @prop --kup-checkbox-font-family: Sets font family of the checkbox's label.\n* @prop --kup-checkbox-font-size: Sets font size of the checkbox's label.\n* @prop --kup-checkbox-font-weight: Sets font weight of the checkbox's label.\n* @prop --kup-checkbox-disabled-checkmark-color: Sets color of the checkmark of a disabled checkbox.\n* @prop --kup-checkbox-padding: Sets padding of the checkbox.\n* @prop --kup-checkbox-primary-color: Sets primary color of the component.\n* @prop --kup-checkbox-primary-color-rgb: Sets primary color RGB values of the component (used for shaders).\n* @prop --kup-checkbox-text-color: Sets the text color of the component.\n* @prop --kup-checkbox-text-color-rgb: Sets the text color RGB values of the component (used for shaders).\n* @prop --kup-checkbox-text-on-primary-color: Sets text on primary color of the component.\n* @prop --kup-checkbox-text-on-primary-color-rgb: Sets text on primary color RGB values of the component (used for shaders).\n*/\n\n:host {\n display: block;\n margin: auto;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FCheckbox } from '../../f-components/f-checkbox/f-checkbox';\nimport { FCheckboxProps } from '../../f-components/f-checkbox/f-checkbox-declarations';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupCheckboxProps,\n KupCheckboxEventPayload,\n} from './kup-checkbox-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-checkbox',\n styleUrl: 'kup-checkbox.scss',\n shadow: true,\n})\nexport class KupCheckbox {\n /**\n * References the root HTML element of the component (<kup-checkbox>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The value of the component.\n * @default \"\"\n */\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Set alert message\n * @default '''\n */\n @Prop() alert: string = '';\n /**\n * Defaults at false. When set to true, the component will be set to 'checked'.\n * @default false\n */\n @Prop({ mutable: true }) checked: boolean = false;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n /**\n * When set to true, the component will be set to 'indeterminate'.\n * @default false\n */\n @Prop({ mutable: true }) indeterminate: boolean = false;\n /**\n * When specified, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the input element loses focus.\n */\n @Event({\n eventName: 'kup-checkbox-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupCheckboxEventPayload>;\n /**\n * Triggered when the input element's value changes.\n */\n @Event({\n eventName: 'kup-checkbox-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupCheckboxEventPayload>;\n /**\n * Triggered when the input element gets focused.\n */\n @Event({\n eventName: 'kup-checkbox-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupCheckboxEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n checked: this.checked == true ? true : false,\n value: this.value,\n });\n }\n\n onKupChange() {\n if (this.indeterminate) {\n this.checked = true;\n this.indeterminate = false;\n this.value = 'indeterminate';\n } else if (this.checked) {\n this.checked = false;\n this.value = 'off';\n } else {\n this.checked = true;\n this.value = 'on';\n }\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n checked: this.checked,\n value: this.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n checked: this.checked == true ? true : false,\n value: this.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupCheckboxProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupCheckboxProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n if (this.checked) {\n this.value = 'on';\n } else {\n this.value = 'off';\n }\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FCheckboxProps = {\n checked: this.checked,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n indeterminate: this.indeterminate,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n label: this.label,\n leadingLabel: this.leadingLabel,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n alert: this.alert,\n error: this.error,\n onBlur: () => this.onKupBlur(),\n onChange: () => this.onKupChange(),\n onFocus: () => this.onKupFocus(),\n };\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FCheckbox {...props} />\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupDataNode } from '../../managers/kup-data/kup-data-declarations';\nimport { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-chip component.\n * Used to export every prop in an object.\n */\nexport enum KupChipProps {\n customStyle = 'Custom style of the component.',\n data = 'List of elements.',\n displayId = \"When enabled, the chip's text will display both the id and the value.\",\n enableInput = \"When enabled, it's possible to add items to the chip's dataset through an input slot (kup-autocomplete, kup-combobox, kup-text-field).\",\n type = 'The type of chip. Available types: input, filter, choice or empty for default.',\n}\n\nexport interface KupChipNode extends KupDataNode {\n checked?: boolean;\n}\n\nexport interface KupChipEventPayload extends KupEventPayload {\n chip: KupChipNode;\n}\n\nexport interface KupChipChangeEventPayload extends KupEventPayload {\n stringifiedValues: string;\n}\n","/**\n* NOTE: These variables are used in the related f-component.\n*\n* @prop --kup-chip-background-color: Sets background color of the component.\n* @prop --kup-chip-border-radius: Sets border radius of the chips.\n* @prop --kup-chip-font-family: Sets font family of the chips.\n* @prop --kup-chip-font-size: Sets font size of the chips.\n* @prop --kup-chip-font-weight: Sets font weight of the chips.\n* @prop --kup-chip-height: Sets height of the chips.\n* @prop --kup-chip-indent-multiplier: Sets the indentation multiplier for children chips.\n* @prop --kup-chip-margin: Sets margin of the chips.\n* @prop --kup-chip-padding: Sets padding of the chips.\n* @prop --kup-chip-primary-color: Sets primary color of the component.\n* @prop --kup-chip-primary-color-rgb: Sets primary color RGB values of the component (used for shaders).\n* @prop --kup-chip-text-color: Sets text color of the component.\n* @prop --kup-chip-text-color-rgb: Sets text color RGB values of the component (used for shaders).\n*/\n\n:host {\n display: block;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FChip } from '../../f-components/f-chip/f-chip';\nimport {\n FChipSize,\n FChipsProps,\n FChipStyling,\n FChipType,\n} from '../../f-components/f-chip/f-chip-declarations';\nimport {\n KupChipChangeEventPayload,\n KupChipEventPayload,\n KupChipNode,\n KupChipProps,\n} from './kup-chip-declarations';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupDataDataset } from '../../managers/kup-data/kup-data-declarations';\nimport { KupTextFieldEventPayload } from '../kup-text-field/kup-text-field-declarations';\nimport { KupAutocompleteEventPayload } from '../kup-autocomplete/kup-autocomplete-declarations';\nimport { KupComboboxEventPayload } from '../kup-combobox/kup-combobox-declarations';\n\n@Component({\n tag: 'kup-chip',\n styleUrl: 'kup-chip.scss',\n shadow: true,\n})\nexport class KupChip {\n /**\n * References the root HTML element of the component (<kup-chip>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * List of elements.\n * @default []\n */\n @Prop({ mutable: true }) data: KupChipNode[] = [];\n /**\n * When enabled, the chip's text will display both the id and the value.\n * @default false\n */\n @Prop() displayId = false;\n /**\n * When enabled, it's possible to add items to the chip's dataset through an input slot (kup-autocomplete, kup-combobox, kup-text-field).\n * @default false\n */\n @Prop() enableInput = false;\n /**\n * The type of chip. Available types: input, filter, choice or empty for default.\n * @default FChipType.STANDARD\n */\n @Prop() type: FChipType = FChipType.STANDARD;\n /**\n * Sets the size of the chip\n * @default FChipSize.MEDIUM\n */\n @Prop() sizing: FChipSize = FChipSize.MEDIUM;\n /**\n * Sets the style of the chip\n * @default FChipStyling.RAISED\n */\n @Prop() styling: FChipStyling = FChipStyling.RAISED;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when a chip loses focus.\n */\n @Event({\n eventName: 'kup-chip-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupChipEventPayload>;\n /**\n * Triggered when the chip dataset changes.\n */\n @Event({\n eventName: 'kup-chip-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupChipChangeEventPayload>;\n /**\n * Triggered when a chip is clicked.\n */\n @Event({\n eventName: 'kup-chip-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupChipEventPayload>;\n /**\n * Triggered when a chip gets focused.\n */\n @Event({\n eventName: 'kup-chip-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupChipEventPayload>;\n /**\n * Triggered when the removal icon on input chips is clicked.\n */\n @Event({\n eventName: 'kup-chip-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupChipEventPayload>;\n\n onKupBlur(chip: KupChipNode) {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n chip: chip,\n });\n }\n\n onKupClick(chip: KupChipNode) {\n const isChoice: boolean = this.type.toLowerCase() === FChipType.CHOICE;\n const isFilter: boolean = this.type.toLowerCase() === FChipType.FILTER;\n if (isChoice) {\n this.kupManager.data.node.setProperties(\n this.data,\n { checked: false } as KupChipNode,\n true,\n [chip]\n );\n }\n if (isChoice || isFilter) {\n chip.checked = chip.checked ? false : true;\n }\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n chip: chip,\n });\n this.refresh();\n }\n\n onKupFocus(chip: KupChipNode) {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n chip: chip,\n });\n }\n\n onKupIconClick(chip: KupChipNode) {\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n chip: this.kupManager.data.node.remove(this.data, chip),\n });\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n stringifiedValues: this.#stringifiedValues(),\n });\n this.refresh();\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('data')\n checkDataset(newData: KupChipNode[] | KupDataDataset) {\n if (!newData) {\n newData = [];\n }\n if ((newData as KupDataDataset).columns) {\n this.kupManager.debug.logMessage(\n this,\n 'Detected KupDataDataset: converting rows to nodes.',\n KupDebugCategory.WARNING\n );\n const data = this.data as KupDataDataset;\n this.data = this.kupManager.data.row.toNode(data);\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupChipProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupChipProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n async #changeHandler(\n e: CustomEvent<\n | KupAutocompleteEventPayload\n | KupComboboxEventPayload\n | KupTextFieldEventPayload\n >\n ) {\n e.stopPropagation();\n const value = e.detail?.value;\n const listNode = (e.detail as KupAutocompleteEventPayload).node;\n if (value) {\n const node = this.data?.find((node) => node.id === value);\n if (!node) {\n const data = this.data && this.data.length ? this.data : [];\n this.data = [\n ...data,\n {\n id: listNode ? listNode.id : value,\n value: listNode ? listNode.value : value,\n },\n ];\n const slot:\n | HTMLKupAutocompleteElement\n | HTMLKupComboboxElement\n | HTMLKupTextFieldElement =\n this.rootElement.querySelector('[slot=field]');\n await slot.setValue('');\n await slot.refresh();\n await slot.setFocus();\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n stringifiedValues: this.#stringifiedValues(),\n });\n }\n }\n }\n\n #stringifiedValues() {\n let stringifiedValues = '';\n this.data.forEach((node) => (stringifiedValues += node.id + ';'));\n return stringifiedValues;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.checkDataset(this.data);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillUpdate() {\n const isChoice: boolean = this.type.toLowerCase() === FChipType.CHOICE;\n let firstCheckedFound: boolean = false;\n if (isChoice) {\n for (let j = 0; this.data && j < this.data.length; j++) {\n if (this.data[j].checked && firstCheckedFound) {\n this.data[j].checked = false;\n let message =\n 'Found occurence of data(' +\n j +\n \") to be set on 'checked' when another one was found before! Overriding to false because the 'choice' type only allows 1 'checked'.\";\n\n this.kupManager.debug.logMessage(\n this,\n message,\n KupDebugCategory.WARNING\n );\n }\n if (this.data[j].checked && !firstCheckedFound) {\n firstCheckedFound = true;\n }\n }\n }\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FChipsProps = {\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n data: this.data,\n displayId: this.displayId,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n onBlur: [],\n onClick: [],\n onExpansionClick: [],\n onFocus: [],\n onIconClick: [],\n primary: this.rootElement.classList.contains('kup-primary')\n ? true\n : false,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n sizing: this.sizing,\n styling: this.styling,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n type: this.type,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n };\n for (let j = 0; this.data && j < this.data.length; j++) {\n props.onBlur.push((chip) => this.onKupBlur(chip));\n props.onClick.push((chip) => this.onKupClick(chip));\n props.onExpansionClick.push((chip, e) => {\n chip.isExpanded = !chip.isExpanded ? true : false;\n if (e.ctrlKey && chip.children && chip.children.length > 0) {\n this.kupManager.data.node.setProperties(\n chip.children,\n { isExpanded: chip.isExpanded },\n true\n );\n }\n this.refresh();\n });\n props.onFocus.push((chip) => this.onKupFocus(chip));\n props.onIconClick.push((chip) => this.onKupIconClick(chip));\n }\n\n return (\n <Host\n onKup-autocomplete-itemclick={(\n e: CustomEvent<KupAutocompleteEventPayload>\n ) => {\n this.#changeHandler(e);\n }}\n onKup-combobox-itemclick={(\n e: CustomEvent<KupComboboxEventPayload>\n ) => {\n this.#changeHandler(e);\n }}\n onKup-textfield-change={(\n e: CustomEvent<KupTextFieldEventPayload>\n ) => {\n this.#changeHandler(e);\n }}\n >\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n {this.data?.length > 0 ? <FChip {...props} /> : null}\n <slot name=\"field\"></slot>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-color-picker component.\n * Used to export every prop in an object.\n */\nexport enum KupColorPickerProps {\n customStyle = 'Custom style of the component.',\n data = 'Props of the text field.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n initialValue = 'Sets the initial value of the component. Can be css color name, hex code or rgb code (sample: \"red\" or rgb(255, 0, 0) or \"#FF0000\" ).',\n swatchOnly = \"When true, the component's text field will be replaced by a swatch.\",\n}\n\nexport interface KupColorPickerEventPayload extends KupEventPayload {\n value: string;\n}\n","@import './styles/kup-color-picker-main.scss';\n@import './styles/kup-color-picker-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n VNode,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport type { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupColorPickerEventPayload,\n KupColorPickerProps,\n} from './kup-color-picker-declarations';\nimport { KupLanguageGeneric } from '../../managers/kup-language/kup-language-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupCardColorPickerOptions,\n KupCardData,\n KupCardFamily,\n} from '../kup-card/kup-card-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport Picker from 'vanilla-picker';\n\n@Component({\n tag: 'kup-color-picker',\n styleUrl: 'kup-color-picker.scss',\n shadow: true,\n})\nexport class KupColorPicker {\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * State of the component.\n * @default null\n */\n @State() value: string = null;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the text field.\n * @default null\n */\n @Prop({ mutable: true }) data: Object = null;\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Sets the initial value of the component. Can be css color name, hex code or rgb code (sample: \"red\" or rgb(255, 0, 0) or \"#FF0000\" ).\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * Sets the component to read only state, making it not editable, but interactable.\n * @default false\n */\n @Prop() readOnly: boolean = false;\n /**\n * When true, the component's text field will be replaced by a swatch.\n * @default false\n */\n @Prop() swatchOnly: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n kupManager: KupManager = kupManagerInstance();\n private card: HTMLKupCardElement;\n private clickCb: KupManagerClickCb = null;\n private picker: Picker;\n private textfieldEl: HTMLElement;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-colorpicker-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupColorPickerEventPayload>;\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupColorPickerProps, descriptions);\n }\n /**\n * Retrieves the component's value.\n * @returns {string} Value of the component.\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value;\n }\n /**\n * Sets the focus to the component.\n */\n @Method()\n async setFocus(): Promise<void> {\n this.textfieldEl.querySelector('input').focus();\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupColorPickerProps, props);\n }\n /**\n * Sets the component's value.\n * @param {string} value - Value to be set.\n */\n @Method()\n async setValue(value: string): Promise<void> {\n this.value = value;\n if (this.picker && !this.isPickerOpened()) {\n this.picker.setColor(value, true);\n }\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n private setHexValue(): void {\n if (this.value) {\n if (this.value.indexOf('#') < 0) {\n this.value = this.kupManager.theme.colorCheck(\n this.value\n ).hexColor;\n }\n }\n }\n\n private createCard(): HTMLKupCardElement {\n const card = document.createElement('kup-card');\n const cardData: KupCardData = {\n options: {\n initialValue: this.value,\n changeCb: (color: any) => {\n this.setValue(color.hex.substring(0, 7));\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n },\n creationCb: (picker: Picker) => {\n this.picker = picker;\n },\n } as KupCardColorPickerOptions,\n };\n card.data = cardData;\n card.isMenu = true;\n card.layoutFamily = KupCardFamily.BUILT_IN;\n card.layoutNumber = 4;\n return card;\n }\n\n private openPicker(): void {\n if (!this.card) {\n this.card = this.createCard();\n }\n const textfieldEl = this.textfieldEl;\n this.card.menuVisible = true;\n this.card.sizeX = this.textfieldEl.parentElement.clientWidth + 'px';\n this.card.sizeY = 'auto';\n if (textfieldEl != null) {\n textfieldEl.classList.add('toggled');\n }\n if (this.kupManager.dynamicPosition.isRegistered(this.card)) {\n this.kupManager.dynamicPosition.changeAnchor(\n this.card,\n this.textfieldEl.parentElement\n );\n } else {\n this.kupManager.dynamicPosition.register(\n this.card,\n this.textfieldEl.parentElement,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.kupManager.dynamicPosition.start(this.card);\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.closePicker();\n },\n el: this.card,\n };\n }\n this.kupManager.addClickCallback(this.clickCb, true);\n }\n\n closePicker(): void {\n this.kupManager.removeClickCallback(this.clickCb);\n const textfieldEl = this.textfieldEl;\n if (textfieldEl) {\n textfieldEl.classList.remove('toggled');\n }\n this.card.menuVisible = false;\n this.kupManager.dynamicPosition.stop(this.card);\n }\n\n isPickerOpened(): boolean {\n return this.card && this.card.menuVisible ? true : false;\n }\n\n private prepTextField(): VNode {\n let value: string = null;\n let textfieldProps: FTextFieldProps = {\n readOnly: this.readOnly,\n ...this.data['kup-text-field'],\n };\n if (!textfieldProps.icon) {\n textfieldProps.icon = 'brightness-1';\n }\n if (textfieldProps.trailingIcon === undefined) {\n textfieldProps.trailingIcon = true;\n }\n\n if (this.value === '') {\n value = this.value;\n textfieldProps.icon = '';\n } else if (!this.value) {\n const message: string =\n this.kupManager.language.translate(\n KupLanguageGeneric.INVALID_COLOR\n ) +\n ': ' +\n this.value;\n value = message;\n textfieldProps.icon = 'warning';\n textfieldProps.title = message;\n } else {\n value = this.value;\n }\n\n return (\n <FTextField\n {...textfieldProps}\n disabled={this.disabled}\n fullHeight={\n this.rootElement.classList.contains('kup-full-height')\n ? true\n : false\n }\n fullWidth={\n this.rootElement.classList.contains('kup-full-width')\n ? true\n : false\n }\n value={value}\n wrapperClass={\n textfieldProps.icon === 'brightness-1' ? 'thumb-icon' : ''\n }\n onClick={() => {\n if (this.isPickerOpened()) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n }}\n onIconClick={() => {\n if (this.isPickerOpened()) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n }}\n />\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.language.register(this);\n this.kupManager.theme.register(this);\n this.value = this.initialValue;\n this.setHexValue();\n if (!this.data) {\n this.data = {\n 'kup-text-field': {},\n };\n }\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillUpdate() {\n this.setHexValue();\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n if (root) {\n this.textfieldEl = root.querySelector('.f-text-field');\n if (this.textfieldEl) {\n FTextFieldMDC(this.textfieldEl);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n let widget: VNode = null;\n if (this.swatchOnly) {\n widget = (\n <button\n disabled={this.disabled}\n class=\"color-picker\"\n onClick={() => this.openPicker()}\n style={{\n backgroundColor: this.value,\n }}\n type=\"button\"\n />\n );\n } else {\n widget = this.prepTextField();\n }\n\n const style: GenericObject = {\n ['--kup_colorpicker_thumb_color']: this.value ? this.value : '',\n };\n\n return (\n <Host style={style}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>{widget}</div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n if (this.card) {\n this.kupManager.dynamicPosition.unregister([this.card]);\n this.card.remove();\n }\n this.kupManager.language.unregister(this);\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\n\n/**\n * Props of the kup-combobox component.\n * Used to export every prop in an object.\n */\nexport enum KupComboboxProps {\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components (date input text field).',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n displayMode = 'Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".',\n initialValue = 'Sets the initial value of the component',\n isClearable = 'Enables a clear trailing icon.',\n isSelect = 'Lets the combobox behave as a select element.',\n selectMode = 'Sets how to return the selected item value. Suported values: \"code\", \"description\", \"both\".',\n showDropDownIcon = 'When true shows the drop-down icon, for open list.',\n label = 'When set, its content will be shown as a label.',\n leadingLabel = 'When set to true, the label will be on the left of the component.',\n}\n\nexport interface KupComboboxEventPayload extends KupEventPayload {\n inputValue: any;\n node?: KupListNode;\n value: any;\n}\nexport interface KupComboboxIconClickEventPayload\n extends KupComboboxEventPayload {\n open: boolean;\n}\n","@import 'styles/kup-combobox-main.scss';\n@import 'styles/kup-combobox-classes.scss';\n","import {\n Component,\n Event,\n EventEmitter,\n Element,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n ItemsDisplayMode,\n KupListEventPayload,\n ValueDisplayedValue,\n} from '../kup-list/kup-list-declarations';\nimport { consistencyCheck } from '../kup-list/kup-list-helper';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport {\n KupComboboxEventPayload,\n KupComboboxIconClickEventPayload,\n KupComboboxProps,\n} from './kup-combobox-declarations';\nimport { KupThemeIconValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\n\n@Component({\n tag: 'kup-combobox',\n styleUrl: 'kup-combobox.scss',\n shadow: true,\n})\nexport class KupCombobox {\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() displayedValue: string = undefined;\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Set alert message\n * @default '''\n */\n @Prop() alert: string = '';\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components (date input text field).\n */\n @Prop() data: Object = undefined;\n /**\n * Defaults at false. When set to true, the component is disabled.\n */\n @Prop() disabled: boolean = false;\n /**\n * Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".\n */\n @Prop() displayMode: ItemsDisplayMode = ItemsDisplayMode.DESCRIPTION;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n /**\n * When set, the text-field will show this icon.\n * @default null\n */\n @Prop() icon: string = null;\n /**\n * Sets the initial value of the component\n */\n @Prop() initialValue: string = '';\n /**\n * Enables a clear trailing icon.\n * @default false\n */\n @Prop() isClearable: boolean = false;\n /**\n * Lets the combobox behave as a select element.\n */\n @Prop({ reflect: true }) isSelect: boolean = false;\n /**\n * When set, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n /**\n * Sets the component to read only state, making it not editable, but interactable. Used in combobox component when it behaves as a select.\n * @default false\n */\n @Prop() readOnly: boolean = false;\n /**\n * Sets how to return the selected item value. Suported values: \"code\", \"description\", \"both\".\n */\n @Prop() selectMode: ItemsDisplayMode = ItemsDisplayMode.CODE;\n /**\n * When true shows the drop-down icon, for open list.\n */\n @Prop() showDropDownIcon: boolean = true;\n /**\n * Sets the type of the button\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * When set, the icon will be shown after the text.\n * @default false\n */\n @Prop() trailingIcon: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n #elStyle: any = undefined;\n #listEl: HTMLKupListElement = undefined;\n #textfieldWrapper: HTMLElement = undefined;\n #textfieldEl: HTMLInputElement | HTMLTextAreaElement = undefined;\n #clickCb: KupManagerClickCb = null;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-combobox-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupComboboxEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupComboboxEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupComboboxEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupComboboxEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-input',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInput: EventEmitter<KupComboboxEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupComboboxIconClickEventPayload>;\n\n @Event({\n eventName: 'kup-combobox-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupComboboxEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupChange(value: string) {\n let ret = this.#consistencyCheck(value, true);\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n node: ret.node,\n });\n }\n\n onKupClick() {\n if (this.isSelect == true) {\n if (this.#textfieldWrapper.classList.contains('toggled')) {\n this.#closeList();\n } else {\n this.#openList();\n }\n }\n\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n onKupInput() {\n let ret = this.#consistencyCheck(this.#textfieldEl.value, false);\n this.#openList();\n this.kupInput.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n node: ret.node,\n });\n }\n\n onKupIconClick() {\n if (this.#textfieldWrapper.classList.contains('toggled')) {\n this.#closeList();\n } else {\n this.#openList();\n }\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n open: this.#textfieldWrapper.classList.contains('toggled'),\n });\n }\n\n onKupItemClick(e: CustomEvent<KupListEventPayload>) {\n this.onKupChange(e.detail.selected.id);\n this.#closeList();\n if (this.#textfieldEl) {\n this.#textfieldEl.focus();\n }\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n node: e.detail.selected,\n value: this.value,\n inputValue: this.#textfieldEl.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('initialValue')\n initialValueChange(newValue: string) {\n this.setValue(newValue);\n }\n\n /*-------------------------------------------------*/\n /* L i s t e n e r s */\n /*-------------------------------------------------*/\n\n @Listen('keydown')\n listenKeydown(e: KeyboardEvent) {\n if (this.#isListOpened()) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.focusPrevious();\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n this.#listEl.select().then(() => {\n this.#closeList();\n this.#textfieldEl.focus();\n });\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n this.#closeList();\n break;\n }\n } else {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.#openList();\n this.#listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.#openList();\n this.#listEl.focusPrevious();\n break;\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupComboboxProps, descriptions);\n }\n /**\n * Retrieves the component's value.\n * @returns {string} Value of the component.\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the focus to the component.\n */\n @Method()\n async setFocus() {\n this.#textfieldEl.focus();\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupComboboxProps, props);\n }\n /**\n * Sets the component's value.\n * @param {string} value - Value to be set.\n */\n @Method()\n async setValue(value: string) {\n this.#consistencyCheck(value, true);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n #openList() {\n if (this.#isListOpened()) {\n return;\n }\n // Manage list open while helperline is displayed\n const hasError = this.error?.trim().length > 0;\n const hasAlert = this.alert?.trim().length > 0;\n const topOffset = hasError || hasAlert ? -20 : 0;\n this.#textfieldWrapper.classList.add('toggled');\n this.#listEl.menuVisible = true;\n this.#listEl.filter = '';\n const elStyle = this.#listEl.style;\n elStyle.height = 'auto';\n elStyle.minWidth = this.#textfieldWrapper.clientWidth + 'px';\n if (this.#kupManager.dynamicPosition.isRegistered(this.#listEl)) {\n this.#kupManager.dynamicPosition.changeAnchor(\n this.#listEl,\n this.#textfieldWrapper\n );\n } else {\n this.#kupManager.dynamicPosition.register(\n this.#listEl,\n this.#textfieldWrapper,\n topOffset,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.#kupManager.dynamicPosition.start(this.#listEl);\n if (!this.#clickCb) {\n this.#clickCb = {\n cb: () => {\n this.#closeList();\n },\n el: this.#listEl,\n };\n }\n this.#kupManager.addClickCallback(this.#clickCb, true);\n }\n\n #closeList() {\n this.#textfieldWrapper.classList.remove('toggled');\n this.#listEl.menuVisible = false;\n this.#kupManager.dynamicPosition.stop(this.#listEl);\n this.#kupManager.removeClickCallback(this.#clickCb);\n }\n\n #isListOpened(): boolean {\n return this.#listEl.menuVisible == true;\n }\n\n #consistencyCheck(idIn: string, setValue: boolean): ValueDisplayedValue {\n let ret = consistencyCheck(\n idIn,\n this.data['kup-list'],\n this.#listEl,\n this.selectMode,\n this.displayMode\n );\n\n if (ret.exists) {\n if (setValue) {\n this.value = ret.value;\n this.displayedValue = ret.displayedValue;\n }\n if (this.#listEl != null) {\n this.#listEl.filter = ret.value;\n }\n } else {\n this.value = idIn;\n this.displayedValue = idIn;\n if (this.#listEl != null) {\n this.#listEl.filter = ret.value;\n }\n }\n\n return ret;\n }\n\n #prepList() {\n return (\n <kup-list\n {...this.data['kup-list']}\n displayMode={this.displayMode}\n is-menu\n onkup-list-click={(e: CustomEvent<KupListEventPayload>) =>\n this.onKupItemClick(e)\n }\n ref={(el) => (this.#listEl = el)}\n ></kup-list>\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.theme.register(this);\n this.value = this.initialValue;\n if (!this.data) {\n this.data = {\n 'kup-list': {},\n 'kup-text-field': {},\n };\n }\n }\n\n componentDidLoad() {\n this.#consistencyCheck(this.value, true);\n this.#kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const f: HTMLElement = root.querySelector('.f-text-field');\n if (f) {\n this.#textfieldWrapper = f;\n this.#textfieldEl = f.querySelector('input');\n FTextFieldMDC(f);\n }\n }\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FTextFieldProps = {\n alert: this.alert,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n error: this.error,\n icon: this.icon,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n isClearable: this.isClearable,\n label: this.label,\n leadingLabel: this.leadingLabel,\n readOnly: this.readOnly,\n sizing: this.sizing,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n value: this.value,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n };\n const fullHeight: boolean =\n this.rootElement.classList.contains('kup-full-height');\n const fullWidth: boolean =\n this.rootElement.classList.contains('kup-full-width');\n return (\n <Host\n class={`${fullHeight ? 'kup-full-height' : ''} ${\n fullWidth ? 'kup-full-width' : ''\n }`}\n style={this.#elStyle}\n >\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} style={this.#elStyle}>\n <FTextField\n {...props}\n {...this.data['kup-text-field']}\n disabled={this.disabled}\n fullHeight={fullHeight}\n fullWidth={fullWidth}\n trailingIcon={true}\n icon={\n this.showDropDownIcon\n ? KupThemeIconValues.DROPDOWN\n : null\n }\n value={this.displayedValue}\n onBlur={() => this.onKupBlur()}\n onClick={() => this.onKupClick()}\n onChange={(e: UIEvent & { target: HTMLInputElement }) =>\n this.onKupChange(e.target.value)\n }\n onFocus={() => this.onKupFocus()}\n onInput={() => this.onKupInput()}\n onIconClick={() => this.onKupIconClick()}\n ></FTextField>\n </div>\n {this.#prepList()}\n </Host>\n );\n }\n\n disconnectedCallback() {\n if (this.#listEl) {\n this.#kupManager.dynamicPosition.unregister([this.#listEl]);\n this.#listEl.remove();\n }\n this.#kupManager.theme.unregister(this);\n }\n}\n","import { GenericFilter } from '../../utils/filters/filters-declarations';\nimport { KupState } from '../kup-state/kup-state';\n\nimport {\n GroupObject,\n SortObject,\n GroupLabelDisplayMode,\n TotalsMap,\n SelectionMode,\n} from './kup-data-table-declarations';\n\nexport class KupDataTableState implements KupState {\n filters: GenericFilter = {};\n expandGroups = false;\n groupLabelDisplay = GroupLabelDisplayMode.BOTH;\n density: string = 'small';\n enableSortableColumns: boolean = false;\n enableExtraColumns: boolean = true;\n forceOneLine: boolean = false;\n globalFilter = false;\n globalFilterValue = '';\n groups: Array<GroupObject> = [];\n headerIsPersistent = true;\n lazyLoadRows = false;\n loadMoreLimit: number = 1000;\n selection = SelectionMode.SINGLE;\n rowsPerPage = 10;\n showFilters = false;\n showGroups = false;\n showHeader = true;\n showLoadMore: boolean = false;\n sortEnabled = true;\n sort: Array<SortObject> = [];\n sortableColumnsMutateData: boolean = true;\n pageSelected: number = 1;\n selectRow: number;\n selectRowsById: string;\n dragEnabled: boolean = false;\n dropEnabled: boolean = false;\n showFooter: boolean = false;\n totals: TotalsMap;\n load: boolean = false;\n\n public toDebugString() {\n // TODO\n return 'dt state';\n }\n}\n","import type { KupCardData } from '../../components/kup-card/kup-card-declarations';\nimport type { GenericObject } from '../../types/GenericTypes';\nimport type { KupDataTable } from '../../components/kup-data-table/kup-data-table';\nimport type {\n KupDom,\n KupManagerClickCb,\n} from '../../managers/kup-manager/kup-manager-declarations';\nimport type { KupTree } from '../../components/kup-tree/kup-tree';\nimport {\n KupDynamicPositionElement,\n KupDynamicPositionPlacement,\n} from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport type { GroupObject } from '../../components/kup-data-table/kup-data-table-declarations';\nimport type { KupTextFieldEventPayload } from '../../components/kup-text-field/kup-text-field-declarations';\nimport type { KupTextField } from '../../components/kup-text-field/kup-text-field';\nimport { FiltersColumnMenu } from '../filters/filters-column-menu';\nimport {\n FilterInterval,\n GenericFilter,\n ValueDisplayedValue,\n} from '../filters/filters-declarations';\nimport { getValueForDisplay, getValueForDisplay2 } from '../cell-utils';\nimport { FiltersRows } from '../filters/filters-rows';\nimport { Filters } from '../filters/filters';\nimport {\n KupLanguageColumn,\n KupLanguageSearch,\n KupLanguageGrouping,\n KupLanguageCheckbox,\n KupLanguageGeneric,\n KupLanguageRow,\n KupLanguageTotals,\n} from '../../managers/kup-language/kup-language-declarations';\nimport { KupTabBarNode } from '../../components/kup-tab-bar/kup-tab-bar-declarations';\nimport { FButtonStyling } from '../../f-components/f-button/f-button-declarations';\nimport { KupColumnMenuIds } from './kup-column-menu-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport {\n FChipsProps,\n FChipType,\n} from '../../f-components/f-chip/f-chip-declarations';\nimport {\n KupDataColumn,\n KupDataNewColumnTypes,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupChipNode } from '../../components/kup-chip/kup-chip-declarations';\nimport { KupObj } from '../../managers/kup-objects/kup-objects-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\n/**\n * Definition and events of the column menu card.\n * @module KupColumnMenu\n */\nexport class KupColumnMenu {\n clickCb: KupManagerClickCb = null;\n filtersColumnMenuInstance = new FiltersColumnMenu();\n filtersRowsInstance = new FiltersRows();\n /**\n * Function called by the component when the column menu must be opened.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {string} column - Name of the column.\n */\n open(comp: KupDataTable | KupTree, column: string): void {\n this.filtersColumnMenuInstance.resetTextualFilters(\n comp.filters,\n column\n );\n }\n /**\n * Function called by the component when the column menu must be closed.\n * @param {HTMLKupCardElement} card - Column menu card.\n */\n close(card: HTMLKupCardElement): void {\n card.menuVisible = false;\n dom.ketchup.removeClickCallback(this.clickCb);\n dom.ketchup.dynamicPosition.stop(\n card as unknown as KupDynamicPositionElement\n );\n }\n /**\n * Function called to reposition the column menu card to the appropriate column.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n */\n reposition(comp: KupDataTable | KupTree, card: HTMLKupCardElement): void {\n const root: ShadowRoot = comp.rootElement.shadowRoot;\n if (root) {\n if (card) {\n const column: string = card.dataset.column;\n const wrapper: HTMLElement = root.querySelector(\n 'th[data-column=\"' + column + '\"]'\n );\n if (dom.ketchup.dynamicPosition.isRegistered(card as any)) {\n dom.ketchup.dynamicPosition.changeAnchor(\n card as any,\n wrapper\n );\n } else {\n dom.ketchup.dynamicPosition.register(\n card as any,\n wrapper,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.close(card);\n },\n el: card,\n };\n }\n dom.ketchup.addClickCallback(this.clickCb, true);\n dom.ketchup.dynamicPosition.start(card as any);\n card.menuVisible = true;\n }\n }\n }\n /**\n * Function called by the column menu card to prepare its 'data' prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @param {KupCardData} currentData - 'data' prop of the column menu card when it's already initialized.\n * @returns {GenericObject} 'data' prop of the column menu card.\n */\n prepData(\n comp: KupDataTable | KupTree,\n column: KupDataColumn,\n currentData?: KupCardData\n ): KupCardData {\n const data: KupCardData = currentData ? { ...currentData } : {};\n data.button = this.prepButton(comp, column);\n data.checkbox = this.prepCheckbox(comp, column);\n data.chip = this.prepChip(comp, column);\n data.datepicker = this.prepIntervalDatePicker(comp, column);\n data.object = column.objs\n ? column.objs\n : column.obj\n ? [column.obj]\n : null;\n data.switch = this.prepSwitch(comp, column, data.object);\n if (!currentData) {\n data.tabbar = this.prepTabBar(comp, column);\n data.text = [column.title];\n }\n data.textfield = this.prepTextfield(comp, column);\n data.timepicker = this.prepIntervalTimePicker(comp, column);\n return data;\n }\n /**\n * Handles the column menu's button prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Buttons props.\n */\n prepButton(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n const props: GenericObject[] = [];\n if (\n !FiltersColumnMenu.isTree(comp) &&\n (comp as KupDataTable).showGroups\n ) {\n props.push({\n className: 'printable',\n 'data-storage': {\n columnName: column.name,\n },\n icon: 'book',\n id: KupColumnMenuIds.BUTTON_GROUP,\n title:\n comp.getGroupByName(column.name) != null\n ? dom.ketchup.language.translate(\n KupLanguageGrouping.DISABLE\n )\n : dom.ketchup.language.translate(\n KupLanguageGrouping.ENABLE\n ),\n });\n }\n if (comp.removableColumns) {\n props.push({\n className: 'printable',\n 'data-storage': {\n column: column,\n },\n icon: 'table-column-remove',\n id: KupColumnMenuIds.BUTTON_REMOVE,\n title: dom.ketchup.language.translate(KupLanguageColumn.HIDE),\n });\n }\n if (\n comp.enableExtraColumns &&\n (dom.ketchup.objects.canObjHaveExtraColumns(column.obj) ||\n dom.ketchup.objects.canObjsHaveExtraColumns(column.objs))\n ) {\n props.push({\n className: 'printable',\n 'data-storage': {\n columnName: column.name,\n },\n icon: 'table-column-plus-after',\n id: KupColumnMenuIds.BUTTON_ADD_COLUMNS,\n title: dom.ketchup.language.translate(KupLanguageColumn.ADD),\n });\n props.push({\n className: 'printable',\n label: dom.ketchup.language.translate(KupLanguageGeneric.APPLY),\n id: KupColumnMenuIds.BUTTON_APPLY,\n styling: FButtonStyling.OUTLINED,\n title: dom.ketchup.language.translate(KupLanguageGeneric.APPLY),\n });\n }\n return props;\n }\n /**\n * Handles the column menu's checkbox prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Checkboxes props.\n */\n prepCheckbox(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n const props: GenericObject[] = [];\n if (\n comp.showFilters &&\n (dom.ketchup.objects.isStringObject(column.obj) ||\n dom.ketchup.objects.isCheckbox(column.obj))\n ) {\n const checkBoxesFilter: ValueDisplayedValue[] =\n this.filtersColumnMenuInstance.getCheckBoxFilterValues(\n comp.filters,\n column.name\n );\n const columnValues: ValueDisplayedValue[] =\n comp.getColumnValues(column);\n\n if (columnValues.length > 0) {\n props.push({\n checked: checkBoxesFilter.length == 0,\n 'data-storage': {\n column: column,\n value: null,\n },\n id: KupColumnMenuIds.CHECKBOX_GLOBAL,\n key: KupColumnMenuIds.CHECKBOX_GLOBAL + column.name,\n label: dom.ketchup.language.translate(\n KupLanguageCheckbox.ALL\n ),\n });\n }\n for (let index = 0; index < columnValues.length; index++) {\n let label = getValueForDisplay2(columnValues[index], column);\n if (dom.ketchup.objects.isCheckbox(column.obj)) {\n if (columnValues[index].value == '1') {\n label = dom.ketchup.language.translate(\n KupLanguageCheckbox.CHECKED\n );\n } else {\n label = dom.ketchup.language.translate(\n KupLanguageCheckbox.UNCHECKED\n );\n }\n }\n props.push({\n checked: Filters.valuesArrayContainsValue(\n checkBoxesFilter,\n columnValues[index].value\n ),\n 'data-storage': {\n column: column,\n value: columnValues[index].value,\n displayedValue: getValueForDisplay2(\n columnValues[index],\n column\n ),\n },\n label: label,\n });\n }\n }\n return props;\n }\n /**\n * Handles the column menu's chip prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Chips props (only 1 is handled).\n */\n prepChip(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n let props: GenericObject[] = [];\n const chipProps: FChipsProps = { data: [] };\n if (column.children) {\n const chipData: KupChipNode[] = [];\n for (let index = 0; index < column.children.length; index++) {\n const child = column.children[index];\n let childColumn: KupDataColumn = null;\n try {\n if (FiltersColumnMenu.isTree(comp)) {\n (comp as KupTree).columns;\n childColumn = (comp as KupTree).columns.find(\n (x: KupDataColumn) => x.name === child.name\n );\n } else {\n childColumn = (comp as KupDataTable).data.columns.find(\n (x: KupDataColumn) => x.name === child.name\n );\n }\n } catch (error) {\n dom.ketchup.debug.logMessage(\n this,\n 'Child column not found (' + child.name + ')!' + error,\n KupDebugCategory.ERROR\n );\n }\n chipData.push({\n icon: child.icon ? child.icon : null,\n value: childColumn ? childColumn.title : '*Not found!',\n obj: child.obj ? child.obj : null,\n id: childColumn ? childColumn.name : '*NOTFND',\n });\n }\n chipProps.dataSet = { initialData: [...chipData] };\n chipProps.data = chipData;\n }\n chipProps.type = FChipType.INPUT;\n props.push(chipProps);\n return props;\n }\n /**\n * Handles the column menu's switch prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @param {KupObj[]} objs - Column's objs.\n * @returns {GenericObject[]} Switches props.\n */\n prepSwitch(\n comp: KupDataTable | KupTree,\n column: KupDataColumn,\n objs: KupObj[]\n ): GenericObject[] {\n const props: GenericObject[] = [];\n if (!FiltersColumnMenu.isTree(comp)) {\n if (\n objs &&\n objs.length > 0 &&\n !dom.ketchup.objects.isEmptyKupObj(objs[0])\n ) {\n props.push({\n 'data-storage': {\n columnName: column.name,\n },\n checked: column.isKey ? true : false,\n key: KupColumnMenuIds.SWITCH_KEY + column.name,\n id: KupColumnMenuIds.SWITCH_KEY,\n label: dom.ketchup.language.translate(KupLanguageRow.KEY),\n leadingLabel: true,\n });\n }\n if ((comp as KupDataTable).showGroups) {\n const isGroupActive: boolean =\n comp.getGroupByName(column.name) != null;\n props.push({\n 'data-storage': {\n columnName: column.name,\n },\n key: KupColumnMenuIds.SWITCH_GROUP + column.name,\n checked: isGroupActive ? true : false,\n id: KupColumnMenuIds.SWITCH_GROUP,\n label: dom.ketchup.language.translate(\n KupLanguageGrouping.GROUPS\n ),\n leadingLabel: true,\n });\n }\n }\n return props;\n }\n /**\n * Handles the column menu's tabbar prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @returns {GenericObject[]} Tab bar props.\n */\n prepTabBar(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n const props: GenericObject[] = [{ data: [] }];\n const data: KupTabBarNode[] = props[0].data;\n if (comp.showFilters) {\n data.push({\n id: KupLanguageGeneric.FILTERS,\n value: dom.ketchup.language.translate(\n KupLanguageGeneric.FILTERS\n ),\n });\n }\n if (\n (comp.enableExtraColumns &&\n (dom.ketchup.objects.canObjHaveExtraColumns(column.obj) ||\n dom.ketchup.objects.canObjsHaveExtraColumns(\n column.objs\n ))) ||\n comp.removableColumns\n ) {\n data.push({\n id: KupLanguageColumn.COLUMNS,\n value: dom.ketchup.language.translate(\n KupLanguageColumn.COLUMNS\n ),\n });\n }\n if (!FiltersColumnMenu.isTree(comp)) {\n data.push({\n icon: 'settings',\n id: KupLanguageGeneric.SETTINGS,\n value: '',\n });\n }\n\n if (data.length > 0) {\n data[0].active = true;\n }\n return props;\n }\n /**\n * Handles the column menu's textfield prop.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Text fields props.\n */\n prepTextfield(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n let props: GenericObject[] = [];\n if (comp.showFilters) {\n if (\n this.filtersColumnMenuInstance.isColumnFiltrableByInterval(\n column\n )\n ) {\n props = props.concat(this.prepIntervalTextfield(comp, column));\n } else if (dom.ketchup.objects.isStringObject(column.obj)) {\n let filterInitialValue =\n this.filtersColumnMenuInstance.getTextFilterValue(\n comp.filters,\n column.name\n );\n filterInitialValue = getValueForDisplay(\n filterInitialValue,\n column.obj,\n column.decimals\n );\n props.push({\n 'data-storage': {\n column: column,\n },\n fullWidth: true,\n id: KupColumnMenuIds.TEXTFIELD_FILTER,\n initialValue: filterInitialValue,\n isClearable: true,\n key: KupColumnMenuIds.TEXTFIELD_FILTER + column.name,\n label: dom.ketchup.language.translate(\n KupLanguageSearch.SEARCH\n ),\n trailingIcon: true,\n });\n }\n }\n if (!FiltersColumnMenu.isTree(comp)) {\n if (\n dom.ketchup.objects.isNumber(column.obj) &&\n comp.enableColumnsFormula\n ) {\n props.push({\n fullWidth: true,\n icon: 'functions',\n id: KupColumnMenuIds.TEXTFIELD_FORMULA,\n key: KupColumnMenuIds.TEXTFIELD_FORMULA + column.name,\n helper: `i.e.: Description;[${column.name}] * 2`,\n label: dom.ketchup.language.translate(\n KupLanguageTotals.FORMULA\n ),\n trailingIcon: true,\n });\n }\n }\n return props;\n }\n\n /**\n * Handles the column menu's interval textfields props (number column type).\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {Column} column - Column of the menu.\n * @returns {GenericObject[]} Text fields props.\n */\n prepIntervalTextfield(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n let props: GenericObject[] = [];\n if (!comp.showFilters) {\n return props;\n }\n if (!dom.ketchup.objects.isNumber(column.obj)) {\n return props;\n }\n\n let interval =\n this.filtersColumnMenuInstance.getIntervalTextFieldFilterValues(\n comp.filters,\n column\n );\n let initialValueFrom = interval[FilterInterval.FROM];\n let initialValueTo = interval[FilterInterval.TO];\n\n props.push({\n 'data-storage': {\n column: column,\n intervalIndex: FilterInterval.FROM,\n isInterval: true,\n },\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_FROM,\n key: KupColumnMenuIds.TEXTFIELD_FROM + column.name,\n initialValue: initialValueFrom,\n isClearable: true,\n label: dom.ketchup.language.translate(KupLanguageSearch.FROM),\n trailingIcon: true,\n });\n props.push({\n 'data-storage': {\n column: column,\n intervalIndex: FilterInterval.TO,\n isInterval: true,\n },\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_TO,\n key: KupColumnMenuIds.TEXTFIELD_TO + column.name,\n initialValue: initialValueTo,\n isClearable: true,\n label: dom.ketchup.language.translate(KupLanguageSearch.TO),\n trailingIcon: true,\n });\n\n return props;\n }\n /**\n * Handles the column menu's interval timepicker props (time column type).\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Time picker fields props.\n */\n prepIntervalTimePicker(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n let props: GenericObject[] = [];\n if (!comp.showFilters) {\n return props;\n }\n if (!dom.ketchup.objects.isTime(column.obj)) {\n return props;\n }\n\n let interval =\n this.filtersColumnMenuInstance.getIntervalTextFieldFilterValues(\n comp.filters,\n column\n );\n let initialValueFrom = interval[FilterInterval.FROM];\n let initialValueTo = interval[FilterInterval.TO];\n\n props.push({\n 'data-storage': {\n column: column,\n intervalIndex: FilterInterval.FROM,\n isInterval: true,\n },\n data: {\n 'kup-text-field': {\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_FROM,\n key: KupColumnMenuIds.TEXTFIELD_FROM + column.name,\n isClearable: true,\n label: dom.ketchup.language.translate(\n KupLanguageSearch.FROM\n ),\n },\n },\n initialValue: initialValueFrom,\n manageSeconds: dom.ketchup.objects.isTimeWithSeconds(column.obj),\n });\n props.push({\n 'data-storage': {\n column: column,\n intervalIndex: FilterInterval.TO,\n isInterval: true,\n },\n data: {\n 'kup-text-field': {\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_TO,\n key: KupColumnMenuIds.TEXTFIELD_TO + column.name,\n isClearable: true,\n label: dom.ketchup.language.translate(KupLanguageSearch.TO),\n },\n },\n initialValue: initialValueTo,\n manageSeconds: dom.ketchup.objects.isTimeWithSeconds(column.obj),\n });\n\n return props;\n }\n /**\n * Handles the column menu's interval datepicker props (date/timestamp column type).\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @returns {GenericObject[]} Date picker fields props.\n */\n prepIntervalDatePicker(\n comp: KupDataTable | KupTree,\n column: KupDataColumn\n ): GenericObject[] {\n let props: GenericObject[] = [];\n if (!comp.showFilters) {\n return props;\n }\n if (\n !dom.ketchup.objects.isDate(column.obj) &&\n !dom.ketchup.objects.isTimestamp(column.obj)\n ) {\n return props;\n }\n\n let interval =\n this.filtersColumnMenuInstance.getIntervalTextFieldFilterValues(\n comp.filters,\n column\n );\n let initialValueFrom = interval[FilterInterval.FROM];\n let initialValueTo = interval[FilterInterval.TO];\n\n let suffixFrom = null;\n let suffixTo = null;\n if (dom.ketchup.objects.isTimestamp(column.obj)) {\n suffixFrom = ' 00:00:00';\n suffixTo = ' 23:59:59';\n if (initialValueFrom && initialValueFrom.length >= 10) {\n initialValueFrom = initialValueFrom.substring(0, 10);\n } else {\n initialValueFrom = '';\n }\n if (initialValueTo && initialValueTo.length >= 10) {\n initialValueTo = initialValueTo.substring(0, 10);\n } else {\n initialValueTo = '';\n }\n }\n\n props.push({\n 'data-storage': {\n column: column,\n suffix: suffixFrom,\n intervalIndex: FilterInterval.FROM,\n isInterval: true,\n },\n data: {\n 'kup-text-field': {\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_FROM,\n key: KupColumnMenuIds.TEXTFIELD_FROM + column.name,\n isClearable: true,\n label: dom.ketchup.language.translate(\n KupLanguageSearch.FROM\n ),\n },\n },\n initialValue: initialValueFrom,\n });\n props.push({\n 'data-storage': {\n column: column,\n suffix: suffixTo,\n intervalIndex: FilterInterval.TO,\n isInterval: true,\n },\n data: {\n 'kup-text-field': {\n fullWidth: true,\n helperWhenFocused: true,\n id: KupColumnMenuIds.TEXTFIELD_TO,\n key: KupColumnMenuIds.TEXTFIELD_TO + column.name,\n isClearable: true,\n label: dom.ketchup.language.translate(KupLanguageSearch.TO),\n },\n },\n initialValue: initialValueTo,\n });\n\n return props;\n }\n /**\n * Function called by the column menu card when a kup-card-event is received.\n * @param {CustomEvent} cardEvent - kup-card-event emitted by the column menu.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n */\n eventHandlers(cardEvent: CustomEvent, comp: KupDataTable | KupTree): void {\n const card: HTMLKupCardElement = cardEvent.detail.card\n ? cardEvent.detail.card\n : cardEvent.detail.comp.rootElement;\n const compEvent: CustomEvent = cardEvent.detail.event;\n const compID: string = compEvent.detail.id;\n const subcomp: HTMLElement = compEvent.target as HTMLElement;\n const dataStorage: GenericObject[] = subcomp['data-storage'];\n const compEventType: string = compEvent.type;\n const isClickEvent: boolean = compEventType\n .toLowerCase()\n .endsWith('click');\n switch (compEvent.type) {\n case 'kup-button-click':\n switch (compID) {\n case KupColumnMenuIds.BUTTON_GROUP:\n this.toggleGroup(\n comp as KupDataTable,\n dataStorage['columnName']\n );\n break;\n case KupColumnMenuIds.BUTTON_REMOVE:\n comp.closeColumnMenu().then(() => {\n comp.hideColumn(dataStorage['column']);\n });\n break;\n }\n break;\n case 'kup-checkbox-change':\n this.checkboxChange(\n comp,\n compEvent.detail.checked,\n dataStorage['column'],\n {\n value: dataStorage['value'],\n displayedValue: dataStorage['displayedValue'],\n }\n );\n break;\n case 'kup-switch-change':\n switch (compID) {\n case KupColumnMenuIds.SWITCH_GROUP:\n this.toggleGroup(\n comp as KupDataTable,\n dataStorage['columnName']\n );\n break;\n case KupColumnMenuIds.SWITCH_KEY:\n this.setKey(\n comp as KupDataTable,\n dataStorage['columnName'],\n compEvent.detail.value\n );\n break;\n }\n break;\n case 'kup-textfield-submit':\n case 'kup-datepicker-textfieldsubmit':\n case 'kup-timepicker-textfieldsubmit':\n switch (compID) {\n case KupColumnMenuIds.TEXTFIELD_FORMULA:\n break;\n default:\n this.saveTextualFilters(comp, dataStorage['column']);\n this.close(card);\n break;\n }\n break;\n case 'kup-textfield-cleariconclick':\n case 'kup-datepicker-cleariconclick':\n case 'kup-timepicker-cleariconclick':\n if (dataStorage['isInterval'] == true) {\n this.intervalChange(\n comp,\n null,\n dataStorage['column'],\n dataStorage['intervalIndex'],\n false\n );\n } else {\n this.textfieldChange(comp, null, dataStorage['column']);\n }\n this.saveTextualFilters(comp, dataStorage['column']);\n break;\n case 'kup-textfield-change':\n switch (compID) {\n case KupColumnMenuIds.TEXTFIELD_FORMULA:\n const valueString = (\n compEvent as CustomEvent<KupTextFieldEventPayload>\n ).detail.value;\n const parts = valueString.split(';');\n const hasDescription = parts.length >= 2;\n const description = hasDescription\n ? parts[0].trim()\n : '';\n const value = hasDescription\n ? (parts[1].trim() as KupLanguageTotals)\n : valueString;\n (comp as KupDataTable)\n .newColumn(KupDataNewColumnTypes.MATH, {\n operation: value,\n newColumn: hasDescription\n ? { name: description, title: description }\n : undefined,\n })\n .then((res) => {\n if (\n typeof res === 'string' ||\n res instanceof String\n ) {\n const textField = (\n compEvent as CustomEvent<KupTextFieldEventPayload>\n ).detail.comp as KupTextField;\n textField.rootElement.classList.add(\n 'kup-danger'\n );\n textField.helper = res as string;\n } else {\n this.close(card);\n }\n });\n break;\n }\n break;\n case 'kup-textfield-input':\n case 'kup-datepicker-input':\n case 'kup-datepicker-itemclick':\n case 'kup-timepicker-input':\n case 'kup-timepicker-itemclick':\n switch (compID) {\n case KupColumnMenuIds.TEXTFIELD_FORMULA:\n break;\n default:\n window.clearTimeout(comp.columnFilterTimeout);\n comp.columnFilterTimeout = window.setTimeout(() => {\n if (dataStorage['isInterval'] == true) {\n this.intervalChange(\n comp,\n compEvent.detail.value,\n dataStorage['column'],\n dataStorage['intervalIndex'],\n !isClickEvent,\n dataStorage['suffix']\n );\n } else {\n this.textfieldChange(\n comp,\n compEvent.detail.value,\n dataStorage['column']\n );\n }\n if (isClickEvent) {\n this.saveTextualFilters(\n comp,\n dataStorage['column']\n );\n }\n if (card.data?.checkbox) {\n card.data.checkbox = this.prepCheckbox(\n comp,\n dataStorage['column']\n );\n card.refresh();\n }\n }, 300);\n break;\n }\n break;\n }\n if (\n card.data?.checkbox &&\n !dataStorage?.['isInterval'] &&\n dataStorage?.['column']\n ) {\n card.data.checkbox = this.prepCheckbox(comp, dataStorage['column']);\n card.refresh();\n }\n }\n /**\n * Triggered when the text filter changes.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {string} value - New value of the filter.\n * @param {KupDataColumn} column - Column of the menu.\n */\n textfieldChange(\n comp: KupDataTable | KupTree,\n value: string,\n column: KupDataColumn\n ): void {\n if (!FiltersColumnMenu.isTree(comp)) {\n comp.resetCurrentPage();\n }\n let newFilter = '';\n if (value) {\n newFilter = this.filtersColumnMenuInstance.normalizeValue(\n value.trim(),\n column.obj\n );\n }\n const newFilters: GenericFilter = { ...comp.filters };\n this.filtersColumnMenuInstance.setTextFieldFilterValue(\n newFilters,\n column.name,\n newFilter\n );\n comp.filters = newFilters;\n }\n\n intervalChange(\n comp: KupDataTable | KupTree,\n value: string,\n column: KupDataColumn,\n index: FilterInterval,\n needNormalize: boolean,\n suffix?: string\n ): void {\n if (!FiltersColumnMenu.isTree(comp)) {\n comp.resetCurrentPage();\n }\n let newFilter = '';\n if (value) {\n newFilter = value.trim();\n if (needNormalize) {\n newFilter = this.filtersColumnMenuInstance.normalizeValue(\n newFilter,\n column.obj\n );\n }\n if (suffix != null && newFilter != '') {\n newFilter = newFilter + suffix;\n }\n }\n\n const newFilters: GenericFilter = { ...comp.filters };\n this.filtersColumnMenuInstance.setIntervalTextFieldFilterValue(\n newFilters,\n column.name,\n newFilter,\n index\n );\n comp.filters = newFilters;\n }\n\n saveTextualFilters(comp: KupDataTable | KupTree, column: KupDataColumn) {\n const newFilters: GenericFilter = { ...comp.filters };\n this.filtersColumnMenuInstance.saveTextualFilters(\n newFilters,\n column.name\n );\n comp.filters = newFilters;\n }\n /**\n * Triggered when the checkbox list changes.\n * @param {KupDataTable | KupTree} comp - Component using the column menu.\n * @param {boolean} checked - State of the changed checkbox.\n * @param {KupDataColumn} column - Column of the menu.\n * @param {string} filterValue - Value used to filter.\n */\n checkboxChange(\n comp: KupDataTable | KupTree,\n checked: boolean,\n column: KupDataColumn,\n filterValueItem: ValueDisplayedValue\n ): void {\n if (!FiltersColumnMenu.isTree(comp)) {\n comp.resetCurrentPage();\n }\n\n const newFilters = { ...comp.filters };\n\n if (\n checked ||\n filterValueItem == null ||\n filterValueItem.value == null\n ) {\n this.filtersColumnMenuInstance.addCheckboxFilter(\n newFilters,\n column.name,\n filterValueItem\n );\n } else {\n this.filtersColumnMenuInstance.removeCheckboxFilter(\n newFilters,\n column.name,\n filterValueItem.value\n );\n }\n\n comp.filters = newFilters;\n }\n /**\n * Toggles the grouping of the given column.\n * @param {KupDataTable} comp - Component using the column menu.\n * @param {Column} column - Column of the menu.\n */\n toggleGroup(comp: KupDataTable, column: string): void {\n const group: GroupObject = comp.getGroupByName(column);\n if (group !== null) {\n const index: number = comp.groups.indexOf(group);\n comp.groups.splice(index, 1);\n comp.groups = [...comp.groups];\n } else {\n comp.groups = [...comp.groups, { column, visible: true }];\n }\n comp.refresh();\n }\n /**\n * Sets the given column as key for the table.\n * @param {KupDataTable} comp - Component using the column menu.\n * @param {KupDataColumn} column - Column of the menu.\n * @param {string} value - The status of the switch.\n */\n setKey(comp: KupDataTable, column: string, value: string): void {\n const columns: KupDataColumn[] = comp.data.columns;\n const switchOn: boolean = value === 'on' ? true : false;\n for (let index = 0; index < columns.length; index++) {\n const col: KupDataColumn = columns[index];\n if (col.name === column) {\n col.isKey = switchOn;\n } else if (switchOn) {\n col.isKey = false;\n }\n }\n comp.refresh();\n }\n}\n","@import 'styles/kup-data-table-main';\n@import 'styles/kup-data-table-paginator';\n@import 'styles/kup-data-table-sticky-header';\n@import 'styles/kup-data-table-fixed-rows';\n@import 'styles/kup-data-table-drag-drop';\n@import 'styles/kup-data-table-classes';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type {\n DropEvent,\n InteractEvent,\n PointerEvent,\n} from '@interactjs/types/index';\nimport type { ResizeEvent } from '@interactjs/actions/resize/plugin';\nimport type { KupComboboxEventPayload } from '../kup-combobox/kup-combobox-declarations';\nimport {\n FixedCellsClasses,\n FixedCellsCSSVarsBase,\n GroupLabelDisplayMode,\n GroupObject,\n LoadMoreMode,\n PaginatorPos,\n ShowGrid,\n SortMode,\n SortObject,\n TotalsMap,\n TotalMode,\n TotalLabel,\n KupDatatableEventHandlerDetails,\n KupDataTableProps,\n fieldColumn,\n iconColumn,\n keyColumn,\n SelectionMode,\n KupDatatableRowSelectedEventPayload,\n KupDatatableClickEventPayload,\n KupDatatableColumnMenuEventPayload,\n KupDatatableLoadMoreClickEventPayload,\n KupDatatableColumnRemoveEventPayload,\n KupDatatableColumnMoveEventPayload,\n KupDataTableDataset,\n KupDataTableRow,\n KupDataTableRowCells,\n KupDataTableCell,\n KupDatatableDeleteRowEventPayload,\n KupDatatableInsertRowEventPayload,\n KupDataTableInsertMode,\n KupDatatableHistoryEventPayload,\n KupDatatableRowActionItemClickEventPayload,\n KupDatatableUpdatePayload,\n DataTableAreasEnum,\n} from './kup-data-table-declarations';\nimport { getColumnByName } from '../../utils/cell-utils';\nimport {\n calcTotals,\n normalizeRows,\n filterRows,\n groupRows,\n paginateRows,\n sortRows,\n getDiffData,\n decorateDataTable,\n} from './kup-data-table-helper';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { identify, getProps, setProps } from '../../utils/utils';\nimport {\n KupListNode,\n ItemsDisplayMode,\n} from '../kup-list/kup-list-declarations';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { KupDataTableState } from './kup-data-table-state';\nimport { KupStore } from '../kup-state/kup-store';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FChip } from '../../f-components/f-chip/f-chip';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport {\n FChipsProps,\n FChipType,\n} from '../../f-components/f-chip/f-chip-declarations';\nimport { FCheckbox } from '../../f-components/f-checkbox/f-checkbox';\nimport { FCheckboxProps } from '../../f-components/f-checkbox/f-checkbox-declarations';\nimport {\n GenericFilter,\n ValueDisplayedValue,\n} from '../../utils/filters/filters-declarations';\nimport { KupColumnMenu } from '../../utils/kup-column-menu/kup-column-menu';\nimport { FiltersColumnMenu } from '../../utils/filters/filters-column-menu';\nimport { FiltersRows } from '../../utils/filters/filters-rows';\nimport {\n KupDynamicPositionAnchor,\n kupDynamicPositionAttribute,\n KupDynamicPositionElement,\n KupDynamicPositionPlacement,\n} from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { KupScrollOnHoverElement } from '../../managers/kup-scroll-on-hover/kup-scroll-on-hover-declarations';\nimport {\n KupCardData,\n KupCardFamily,\n KupCardEventPayload,\n KupCardColumnDropMenuOptions,\n} from '../kup-card/kup-card-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport {\n KupLanguageDensity,\n KupLanguageFontsize,\n KupLanguageGeneric,\n KupLanguageGrid,\n KupLanguageKey,\n KupLanguageRow,\n KupLanguageSearch,\n KupLanguageTotals,\n} from '../../managers/kup-language/kup-language-declarations';\nimport { FImageProps } from '../../f-components/f-image/f-image-declarations';\nimport { KupDynamicPositionCoordinates } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport {\n KupThemeColorValues,\n KupThemeIconValues,\n} from '../../managers/kup-theme/kup-theme-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport {\n kupDragActiveAttr,\n KupDragCallbacks,\n KupDragDataTransferCallback,\n KupDragEffect,\n kupDraggableCellAttr,\n kupDraggableColumnAttr,\n KupDraggableElement,\n KupDropCallbacks,\n KupDropDataTransferCallback,\n KupDropEventTypes,\n KupPointerEventTypes,\n KupResizeCallbacks,\n} from '../../managers/kup-interact/kup-interact-declarations';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n FCellEventPayload,\n FCellPadding,\n FCellShapes,\n} from '../../f-components/f-cell/f-cell-declarations';\nimport { FCell } from '../../f-components/f-cell/f-cell';\nimport { FPaginator } from '../../f-components/f-paginator/f-paginator';\nimport {\n pageChange,\n rowsPerPageChange,\n} from '../../f-components/f-paginator/f-paginator-utils';\nimport {\n KupCommand,\n KupDataCell,\n KupDataColumn,\n KupDataCommand,\n KupDataDataset,\n KupDataNewColumnOptions,\n KupDataNewColumnTypes,\n KupDataRow,\n KupDataRowAction,\n KupDataRowCells,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { FButton } from '../../f-components/f-button/f-button';\nimport { FButtonStyling } from '../../f-components/f-button/f-button-declarations';\nimport { KupFormRow } from '../kup-form/kup-form-declarations';\nimport { KupColumnMenuIds } from '../../utils/kup-column-menu/kup-column-menu-declarations';\nimport { KupList } from '../kup-list/kup-list';\nimport { KupDropdownButtonEventPayload } from '../kup-dropdown-button/kup-dropdown-button-declarations';\n@Component({\n tag: 'kup-data-table',\n styleUrl: 'kup-data-table.scss',\n shadow: true,\n})\nexport class KupDataTable {\n @Prop() stateId: string = '';\n @Prop() store: KupStore;\n\n state: KupDataTableState = new KupDataTableState();\n\n initWithPersistedState(): void {\n if (this.store && this.stateId) {\n const state = this.store.getState(this.stateId);\n if (state != null) {\n this.#kupManager.debug.logMessage(\n this,\n 'Initializing stateId ' + this.stateId\n );\n // *** PROPS ***\n this.filters = { ...state.filters };\n this.groups = [...state.groups];\n this.expandGroups = state.expandGroups;\n this.groupLabelDisplay = state.groupLabelDisplay;\n this.density = state.density;\n this.enableExtraColumns = state.enableExtraColumns;\n this.enableSortableColumns = state.enableSortableColumns;\n this.forceOneLine = state.forceOneLine;\n this.globalFilter = state.globalFilter;\n this.globalFilterValue = state.globalFilterValue;\n this.headerIsPersistent = state.headerIsPersistent;\n this.lazyLoadRows = state.lazyLoadRows;\n this.loadMoreLimit = state.loadMoreLimit;\n this.selection = state.selection;\n this.rowsPerPage = state.rowsPerPage;\n this.showFilters = state.showFilters;\n this.showGroups = state.showGroups;\n this.showHeader = state.showHeader;\n this.showLoadMore = state.showLoadMore;\n this.sortEnabled = state.sortEnabled;\n this.sort = [...state.sort];\n this.pageSelected = state.pageSelected;\n this.sortableColumnsMutateData =\n state.sortableColumnsMutateData;\n this.dragEnabled = state.dragEnabled;\n this.dropEnabled = state.dropEnabled;\n this.showFooter = state.showFooter;\n this.totals = { ...state.totals };\n }\n }\n }\n\n persistState(): void {\n if (this.store && this.stateId) {\n let somethingChanged = false;\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.filters,\n this.filters\n )\n ) {\n this.state.filters = { ...this.filters };\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.groups,\n this.groups\n )\n ) {\n this.state.groups = [...this.groups];\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(this.state.sort, this.sort)\n ) {\n this.state.sort = [...this.sort];\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.expandGroups,\n this.expandGroups\n )\n ) {\n this.state.expandGroups = this.expandGroups;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.groupLabelDisplay,\n this.groupLabelDisplay\n )\n ) {\n this.state.groupLabelDisplay = this.groupLabelDisplay;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.density,\n this.density\n )\n ) {\n this.state.density = this.density;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.enableExtraColumns,\n this.enableExtraColumns\n )\n ) {\n this.state.enableExtraColumns = this.enableExtraColumns;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.enableSortableColumns,\n this.enableSortableColumns\n )\n ) {\n this.state.enableSortableColumns = this.enableSortableColumns;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.forceOneLine,\n this.forceOneLine\n )\n ) {\n this.state.forceOneLine = this.forceOneLine;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.globalFilter,\n this.globalFilter\n )\n ) {\n this.state.globalFilter = this.globalFilter;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.globalFilterValue,\n this.globalFilterValue\n )\n ) {\n this.state.globalFilterValue = this.globalFilterValue;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.headerIsPersistent,\n this.headerIsPersistent\n )\n ) {\n this.state.headerIsPersistent = this.headerIsPersistent;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.lazyLoadRows,\n this.lazyLoadRows\n )\n ) {\n this.state.lazyLoadRows = this.lazyLoadRows;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.loadMoreLimit,\n this.loadMoreLimit\n )\n ) {\n this.state.loadMoreLimit = this.loadMoreLimit;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.selection,\n this.selection\n )\n ) {\n this.state.selection = this.selection;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.rowsPerPage,\n this.currentRowsPerPage\n )\n ) {\n this.state.rowsPerPage = this.currentRowsPerPage;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showFilters,\n this.showFilters\n )\n ) {\n this.state.showFilters = this.showFilters;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showGroups,\n this.showGroups\n )\n ) {\n this.state.showGroups = this.showGroups;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showHeader,\n this.showHeader\n )\n ) {\n this.state.showHeader = this.showHeader;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showLoadMore,\n this.showLoadMore\n )\n ) {\n this.state.showLoadMore = this.showLoadMore;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.sortEnabled,\n this.sortEnabled\n )\n ) {\n this.state.sortEnabled = this.sortEnabled;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.sortableColumnsMutateData,\n this.sortableColumnsMutateData\n )\n ) {\n this.state.sortableColumnsMutateData =\n this.sortableColumnsMutateData;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.pageSelected,\n this.currentPage\n )\n ) {\n this.state.pageSelected = this.currentPage;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.dragEnabled,\n this.dragEnabled\n )\n ) {\n this.state.dragEnabled = this.dragEnabled;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.dropEnabled,\n this.dropEnabled\n )\n ) {\n this.state.dropEnabled = this.dropEnabled;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showFooter,\n this.showFooter\n )\n ) {\n this.state.showFooter = this.showFooter;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.totals,\n this.totals\n )\n ) {\n this.state.totals = { ...this.totals };\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.selectRowsById,\n this.selectedRows.reduce(\n (accumulator, row, currentIndex) => {\n const prefix = currentIndex > 0 ? ';' : '';\n return accumulator + prefix + row.id;\n },\n ''\n )\n )\n ) {\n this.state.selectRowsById = this.selectedRows.reduce(\n (accumulator, row, currentIndex) => {\n const prefix = currentIndex > 0 ? ';' : '';\n return accumulator + prefix + row.id;\n },\n ''\n );\n somethingChanged = true;\n }\n\n if (!this.state.load) {\n this.state.load = true;\n return;\n }\n\n if (somethingChanged) {\n this.#kupManager.debug.logMessage(\n this,\n 'Persisting stateId ' + this.stateId\n );\n this.store.persistState(this.stateId, this.state);\n }\n }\n }\n\n //////////////////////////////\n // End state stuff\n //////////////////////////////\n\n @Element() rootElement: HTMLElement;\n\n /**\n * When true and when a row is missing some columns, the missing cells will be autogenerated.\n * @default false\n */\n @Prop() autoFillMissingCells: boolean = false;\n /**\n * Custom style of the component. For more information: https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The data of the table.\n */\n @Prop({ mutable: true }) data: KupDataTableDataset;\n /**\n * The density of the rows, defaults at 'medium' and can be also set to 'large' or 'small'.\n */\n @Prop() density: FCellPadding = FCellPadding.DENSE;\n /**\n * Enables drag.\n */\n @Prop({ mutable: true, reflect: true }) dragEnabled: boolean = false;\n /**\n * Enables drop.\n */\n @Prop({ reflect: true }) dropEnabled: boolean = false;\n /**\n * When set to true, editable cells will be rendered using input components.\n * @default false\n */\n @Prop({ mutable: true }) editableData: boolean = false;\n /**\n * Defines the label to show when the table is empty.\n */\n @Prop({ mutable: true }) emptyDataLabel: string = null;\n /**\n * Enables the choice to set formulas on columns by dragging them into different columns.\n * @default true\n */\n @Prop() enableColumnsFormula: boolean = true;\n /**\n * Enables the extracolumns add buttons.\n */\n @Prop() enableExtraColumns: boolean = true;\n /**\n * Enables the merging of columns by dragging them into different columns.\n * @default true\n */\n @Prop() enableMergeColumns: boolean = true;\n /**\n * Enables the sorting of columns by dragging them into different columns.\n */\n @Prop() enableSortableColumns: boolean = true;\n /**\n * Expands groups when set to true.\n */\n @Prop() expandGroups: boolean = false;\n /**\n * List of filters set by the user.\n */\n @Prop({ mutable: true }) filters: GenericFilter = {};\n /**\n * Fixes the given number of columns so that they stay visible when horizontally scrolling the data-table.\n * If grouping is active or the value of the prop is <= 0, this prop will have no effect.\n * Can be combined with fixedRows.\n * @see fixedRows\n */\n @Prop() fixedColumns: number = 0;\n /**\n * Fixes the given number of columns to the right so that they stay visible when horizontally scrolling the data-table.\n * If grouping is active or the value of the prop is <= 0, this prop will have no effect.\n * Can be combined with fixedRows.\n * @see fixedRows\n */\n @Prop() fixedColumnsR: number = 0;\n /**\n * Fixes the given number of rows so that they stay visible when vertically scrolling the data-table.\n * If grouping is active or the value of the prop is <= 0, this prop will have no effect.\n * Can be combined with fixedColumns.\n * @see fixedColumns\n */\n @Prop() fixedRows: number = 0;\n /**\n * Forces cells with long text and a fixed column size to have an ellipsis set on their text.\n * The reflect attribute is mandatory to allow styling.\n */\n @Prop({ reflect: true }) forceOneLine: boolean = false;\n /**\n * When set to true it activates the global filter.\n */\n @Prop() globalFilter: boolean = false;\n /**\n * The value of the global filter.\n */\n @Prop({ reflect: true, mutable: true }) globalFilterValue = '';\n /**\n * How the label of a group must be displayed.\n * For available values [see here]{@link GroupLabelDisplayMode}\n */\n @Prop() groupLabelDisplay: GroupLabelDisplayMode =\n GroupLabelDisplayMode.BOTH;\n /**\n * The list of groups.\n */\n @Prop({ mutable: true }) groups: Array<GroupObject> = [];\n /**\n * When set to true the header will stick on top of the table when scrolling.\n */\n @Prop() headerIsPersistent = true;\n /**\n * Enables insert mode.\n * @default '''\n */\n @Prop() insertMode: KupDataTableInsertMode = '';\n /**\n * When set to true, clicked-on rows will have a visual feedback.\n * @default false\n */\n @Prop() isFocusable: boolean = false;\n /**\n * When set to true, extra rows will be automatically loaded once the last row enters the viewport. When groups are present, the number of rows is referred to groups and not to their content. Paginator is disabled.\n */\n @Prop() lazyLoadRows: boolean = false;\n /**\n * Defines the placeholder character which will be replaced by a line break inside table header cells, normal or sticky.\n */\n @Prop() lineBreakCharacter: string = '\\n';\n /**\n * Sets a maximum limit of new records which can be required by the load more functionality.\n */\n @Prop() loadMoreLimit: number = 1000;\n /**\n * Establish the modality of how many new records will be downloaded.\n *\n * This property is regulated also by loadMoreStep.\n * @see loadMoreStep\n * @see loadMoreLimit\n */\n @Prop() loadMoreMode: LoadMoreMode = LoadMoreMode.PROGRESSIVE_THRESHOLD;\n /**\n * The number of records which will be requested to be downloaded when clicking on the load more button.\n *\n * This property is regulated also by loadMoreMode.\n * @see loadMoreMode\n * @see loadMoreLimit\n */\n @Prop() loadMoreStep: number = 60;\n /**\n * Current selected page set on component load\n */\n @Prop() pageSelected: number = -1;\n /**\n * Sets the position of the paginator. Available positions: top, bottom or both.\n */\n @Prop() paginatorPos: PaginatorPos = PaginatorPos.TOP;\n /**\n * When enabled, the extra whitespaces will be displayed and the font will be set to monospace by default.\n */\n @Prop({ reflect: true }) legacyLook = false;\n /**\n * Sets the possibility to remove the selected column.\n */\n @Prop() removableColumns: boolean = false;\n /**\n * Gives the possibility to resize columns by dragging on their right edge.\n */\n @Prop() resizableColumns: boolean = true;\n /**\n * Sets the actions of the rows.\n */\n @Prop() rowActions: Array<KupDataRowAction>;\n /**\n * Sets the commands for the rows\n */\n @Prop() commands: Array<KupCommand>;\n /**\n * Sets the number of rows per page to display.\n */\n @Prop() rowsPerPage = 10;\n /**\n * Activates the scroll on hover function.\n */\n @Prop() scrollOnHover: boolean = false;\n /**\n * Set the type of the rows selection.\n */\n @Prop() selection: SelectionMode = SelectionMode.SINGLE;\n /**\n * If set to true, displays the button to open the customization panel.\n */\n @Prop() showCustomization: boolean = true;\n /**\n * Enables the delete row button.\n */\n @Prop() showDeleteButton: boolean = false;\n /**\n * Enables the history button.\n */\n @Prop() showHistoryButton: boolean = false;\n /**\n * When set to true enables the column filters.\n */\n @Prop() showFilters: boolean = false;\n /**\n * When set to true shows the footer.\n */\n @Prop() showFooter: boolean = false;\n /**\n * Can be used to customize the grid view of the table.\n */\n @Prop() showGrid: ShowGrid = ShowGrid.ROW;\n /**\n * When set to true enables the column grouping.\n */\n @Prop() showGroups: boolean = false;\n /**\n * Enables rendering of the table header.\n * @namespace KupDataTable.showHeader\n */\n @Prop() showHeader: boolean = true;\n /**\n * If set to true, displays the button to load more records.\n */\n @Prop() showLoadMore: boolean = false;\n /**\n * Defines the current sorting options.\n */\n @Prop({ mutable: true }) sort: Array<SortObject> = [];\n /**\n * If set to true, when a column is dragged to be sorted, the component directly mutates the data.columns property\n * and then fires the event\n */\n @Prop() sortableColumnsMutateData: boolean = true;\n /**\n * When set to true enables the sorting of the columns by clicking on the column header.\n */\n @Prop() sortEnabled = true;\n /**\n * Sets the height of the table.\n */\n @Prop() tableHeight: string = undefined;\n /**\n * Sets the width of the table.\n */\n @Prop() tableWidth: string = undefined;\n /**\n * Defines the current totals options\n */\n @Prop({ mutable: true }) totals: TotalsMap;\n /**\n * Transposes the data of the data table\n */\n @Prop({ mutable: true }) transpose: boolean = false;\n\n /**\n * When set to true, editable cells will be rendered using input components,\n * and update button will appair below the matrix\n * @default false\n */\n @Prop({ mutable: true }) updatableData: boolean = false;\n\n //-------- State --------\n\n @State()\n private lazyLoadCells = false;\n\n @State()\n private currentPage = 1;\n\n @State()\n private currentRowsPerPage = 50;\n\n @State()\n private selectedRows: Array<KupDataTableRow> = [];\n\n @State()\n private selectedColumn: string;\n\n @State()\n private columnMenuAnchor: string = null;\n\n @State()\n private groupState: {\n [index: string]: {\n expanded: boolean;\n };\n } = {};\n\n /**\n * name of the column with the opened total menu\n */\n @State()\n private openedTotalMenu: string = null;\n\n @State()\n private openedCustomSettings: boolean = false;\n\n @State()\n private fontsize: string = 'medium';\n\n @Watch('rowsPerPage')\n rowsPerPageHandler(newValue: number) {\n this.currentRowsPerPage = newValue;\n }\n\n @Watch('expandGroups')\n expandGroupsHandler() {\n if (!this.#isRestoringState) {\n this.recalculateRows();\n // reset group state\n this.groupState = {};\n this.#forceGroupExpansion();\n }\n }\n\n @Watch('filters')\n @Watch('globalFilterValue')\n filtersChanged() {\n this.expandGroupsHandler();\n }\n\n @Watch('sort')\n @Watch('rowsPerPage')\n @Watch('totals')\n @Watch('currentPage')\n @Watch('currentRowsPerPage')\n recalculateRows() {\n if (!this.#isRestoringState) {\n this.#initRows();\n }\n }\n\n @Watch('data')\n identifyAndInitRows() {\n identify(this.getRows());\n this.expandGroupsHandler();\n this.#resetSelectedRows();\n }\n\n @Watch('data')\n decorateAndInitForUpdTable() {\n if (this.data['type'] === 'SmeupDataTable') {\n decorateDataTable(this.data);\n }\n if (this.updatableData) {\n this.#originalDataLoaded = JSON.parse(JSON.stringify(this.data));\n this.selection = this.data.setup?.operations?.delete\n ? SelectionMode.MULTIPLE_CHECKBOX\n : this.selection;\n\n this.#originalDataLoadedMaxId =\n this.#originalDataLoaded.rows?.length > 0\n ? Math.max(\n ...this.#originalDataLoaded.rows.map((r) =>\n parseInt(r.id)\n )\n )\n : -1;\n }\n }\n\n @Watch('groups')\n recalculateRowsAndUndoSelections() {\n if (!this.#isRestoringState) {\n this.recalculateRows();\n // reset group state\n this.groupState = {};\n this.#forceGroupExpansion();\n this.#resetSelectedRows();\n }\n }\n\n @Watch('fixedColumns')\n @Watch('fixedColumnsR')\n @Watch('fixedRows')\n controlFixedRowsColumns() {\n let warnMessage = '';\n\n if (isNaN(this.fixedColumns) || this.fixedColumns < 0) {\n warnMessage += `The value ${this.fixedColumns} set on fixedColumns property is not valid.`;\n }\n\n if (isNaN(this.fixedColumnsR) || this.fixedColumnsR < 0) {\n warnMessage += `The value ${this.fixedColumnsR} set on fixedColumnsR property is not valid.`;\n }\n\n if (isNaN(this.fixedRows) || this.fixedRows < 0) {\n warnMessage += `The value ${this.fixedRows} set on fixedRows property is not valid.`;\n }\n\n if (warnMessage && console) {\n console.warn(warnMessage + 'Any fixed rule will be ignored.');\n }\n }\n\n @Watch('transpose')\n recalculateData() {\n if (this.#initialized) {\n this.#calculateData();\n }\n }\n\n #initialized = false;\n #rows: Array<KupDataTableRow>;\n #rowsLength: number = 0;\n\n #paginatedRows: Array<KupDataTableRow>;\n #paginatedRowsLength: number = 0;\n\n #footer: { [index: string]: any }; // TODO change any\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n #renderedRows: Array<KupDataTableRow> = [];\n\n #loadMoreEventCounter: number = 0;\n\n #loadMoreEventPreviousQuantity: number = 0;\n\n /**\n * Reference for the thead element\n */\n #theadRef: any;\n #tableRef: HTMLTableElement;\n\n /**\n * contains the original data, used in transposed function\n */\n #originalData: KupDataTableDataset = undefined;\n\n /**\n * contains the original data when the component is\n * loaded the first time\n */\n #originalDataLoaded: KupDataDataset = undefined;\n\n /**\n * contains the id greater value in #originalDataLoaded\n */\n #originalDataLoadedMaxId: number;\n\n /**\n * Reference to the working area of the table. This is the below-wrapper reference.\n */\n #tableAreaRef: KupScrollOnHoverElement;\n #stickyTheadRef: any;\n #lastPointerDetails: KupDatatableEventHandlerDetails;\n #customizeTopButtonRef: any;\n #customizeTopPanelRef: HTMLKupCardElement;\n #sizedColumns: KupDataColumn[] = undefined;\n #intObserver: IntersectionObserver = undefined;\n #navBarHeight: number = 0;\n #theadIntersecting: boolean = false;\n #tableIntersecting: boolean = false;\n #isSafariBrowser: boolean = false;\n #isRestoringState: boolean = false;\n #globalFilterTimeout: number;\n #totalMenuCoords: KupDynamicPositionCoordinates = null;\n columnFilterTimeout: number;\n #clickTimeout: ReturnType<typeof setTimeout>[] = [];\n #thRefs: HTMLElement[] = [];\n #rowsRefs: HTMLElement[] = [];\n #oldWidth: number = null;\n #hold: boolean = false;\n #interactableDrag: HTMLElement[] = [];\n #interactableDrop: HTMLElement[] = [];\n #interactableResize: HTMLElement[] = [];\n #interactableTouch: HTMLElement[] = [];\n #dropareaRef: HTMLElement = null;\n #removeDropareaRef: HTMLElement = null;\n #groupsDropareaRef: HTMLElement = null;\n #clickCb: KupManagerClickCb = null;\n #clickCbCustomPanel: KupManagerClickCb = null;\n #clickCbDropCard: KupManagerClickCb = null;\n /**\n * Used to prevent too many resizes callbacks at once.\n */\n #resizeTimeout: number;\n #columnMenuInstance: KupColumnMenu;\n #filtersColumnMenuInstance: FiltersColumnMenu;\n #filtersRowsInstance: FiltersRows;\n #detailCard: HTMLKupCardElement = null;\n #insertCard: HTMLKupCardElement = null;\n #actionsCard: HTMLKupCardElement = null;\n #confirmDeleteCard: HTMLKupCardElement = null;\n #confirmDeleteDialog: HTMLKupDialogElement = null;\n #columnMenuCard: HTMLKupCardElement = null;\n #columnDropCard: HTMLKupCardElement = null;\n #columnDropCardAnchor: HTMLElement = null;\n #dropDownActionCardAnchor: HTMLElement = null;\n #insertCount = 0;\n\n #BUTTON_CANCEL_ID: string = 'cancel';\n #BUTTON_SUBMIT_ID: string = 'submit';\n #FIELDS_FORM_ID: string = 'fieldsForm';\n #MESSAGE_ID: string = 'message';\n #MESSAGE_WRAPPER_ID: string = 'messageWrapper';\n #INSERT_PREFIX = 'insert_';\n\n /**\n * When component unload is complete\n */\n @Event({\n eventName: 'kup-datatable-didunload',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDidUnload: EventEmitter<KupEventPayload>;\n\n /**\n * When component load is complete\n */\n @Event({\n eventName: 'kup-datatable-didload',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDidLoad: EventEmitter<KupEventPayload>;\n\n /**\n * When rows selections reset\n */\n @Event({\n eventName: 'kup-datatable-resetselectedrows',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupResetSelectedRows: EventEmitter<KupEventPayload>;\n\n /**\n * When a row is selected\n */\n @Event({\n eventName: 'kup-datatable-rowselected',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupRowSelected: EventEmitter<KupDatatableRowSelectedEventPayload>;\n /**\n * Generic click event on data table.\n */\n @Event({\n eventName: 'kup-datatable-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDataTableClick: EventEmitter<KupDatatableClickEventPayload>;\n /**\n * Generic right click event on data table.\n */\n @Event({\n eventName: 'kup-datatable-contextmenu',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDataTableContextMenu: EventEmitter<KupDatatableClickEventPayload>;\n /**\n * Generic right click event on a cell in data table.\n */\n @Event({\n eventName: 'kup-datatable-cell-actions-menu',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDataTableCellActionsMenu: EventEmitter<KupDatatableClickEventPayload>;\n /**\n * Generic double click event on data table.\n */\n @Event({\n eventName: 'kup-datatable-dblclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDataTableDblClick: EventEmitter<KupDatatableClickEventPayload>;\n /**\n * Emitted by the column menu card when opened/closed or when a kup-card-event is fired.\n */\n @Event({\n eventName: 'kup-datatable-columnmenu',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDataTableColumnMenu: EventEmitter<KupDatatableColumnMenuEventPayload>;\n\n @Event({\n eventName: 'kup-datatable-loadmoreclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupLoadMoreClick: EventEmitter<KupDatatableLoadMoreClickEventPayload>;\n /**\n * Event fired when columns are moved (sorted).\n */\n @Event({\n eventName: 'kup-datatable-columnmove',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupColumnMove: EventEmitter<KupDatatableColumnMoveEventPayload>;\n /**\n * Event fired when columns are removed (set to hidden).\n */\n @Event({\n eventName: 'kup-datatable-columnremove',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupColumnRemove: EventEmitter<KupDatatableColumnRemoveEventPayload>;\n /**\n * Event fired when the delete row button is pressed.\n */\n @Event({\n eventName: 'kup-datatable-delete-row',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDeleteRow: EventEmitter<KupDatatableDeleteRowEventPayload>;\n /**\n * Event fired when the save button is pressed.\n */\n @Event({\n eventName: 'kup-datatable-save',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupSave: EventEmitter<KupDatatableInsertRowEventPayload>;\n /**\n * Event fired when the insert row confirm button is pressed.\n */\n @Event({\n eventName: 'kup-datatable-insert-row',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInsertRow: EventEmitter<KupDatatableInsertRowEventPayload>;\n\n /**\n * Event fired when the history confirm button is pressed.\n */\n @Event({\n eventName: 'kup-datatable-history',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupHistory: EventEmitter<KupDatatableHistoryEventPayload>;\n\n /**\n * Event fired when the history confirm button is pressed.\n */\n @Event({\n eventName: 'kup-datatable-rowaction-item-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupRowActionItemClick: EventEmitter<KupDatatableRowActionItemClickEventPayload>;\n\n /**\n * Event fired when the cell action icon is pressed\n */\n @Event({\n eventName: 'kup-datatable-cell-action-icon-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupCellActionIconClick: EventEmitter<KupDatatableClickEventPayload>;\n\n /**\n * Event fired when the user click on update button or on one\n * of the command buttons.\n * Update button and commands are visible when the props updatableData is true\n */\n @Event({\n eventName: 'kup-datatable-update',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupUpdate: EventEmitter<KupDatatableUpdatePayload>;\n\n /**\n * Closes any opened column menu.\n */\n @Method()\n async closeColumnMenu(): Promise<void> {\n this.columnMenuAnchor = null;\n if (this.#columnMenuCard) {\n this.#columnMenuCard.data = null;\n }\n this.#columnMenuInstance.close(this.#columnMenuCard);\n this.kupDataTableColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.#columnMenuCard,\n event: null,\n open: false,\n });\n }\n\n /**\n * Collapses all groups.\n */\n @Method()\n async collapseAll(): Promise<void> {\n this.expandGroups = false;\n }\n /**\n * This method will delete rows by id from the data table dataset.\n * @param {string[]} ids - Array of row ids to delete.\n * @returns {Promise<Array<KupDataTableRow>>} Deleted rows.\n */\n @Method()\n async deleteRows(ids: string[] = []): Promise<Array<KupDataTableRow>> {\n const deletedRows: KupDataTableRow[] = [];\n const newRows: KupDataTableRow[] = [];\n const currentRows = this.getRows();\n for (let index = 0; index < currentRows.length; index++) {\n const row = currentRows[index];\n if (ids.includes(row.id)) {\n const r = row.clonedFrom ? row.clonedFrom : row;\n deletedRows.push(r);\n if (this.selectedRows.includes(row)) {\n this.selectedRows.splice(this.selectedRows.indexOf(row), 1);\n }\n } else {\n newRows.push(row);\n }\n }\n if (deletedRows.length > 0) {\n this.data.rows = newRows;\n await this.refresh(true);\n }\n return deletedRows;\n }\n\n /**\n * Closes the insert new record card (called by backend, on success)\n */\n @Method()\n async closeInsertCard() {\n if (this.#insertCard) {\n this.#insertCard.remove();\n this.#insertCard = null;\n }\n }\n /**\n * Closes the delete confirm card (called by backend, on success)\n */\n @Method()\n async closeConfirmDeleteCard() {\n if (this.#confirmDeleteDialog) {\n this.#confirmDeleteDialog.close();\n this.#confirmDeleteCard = null;\n this.#confirmDeleteDialog = null;\n }\n }\n\n /**\n * Returns cards and sub components\n */\n @Method()\n async getCards(): Promise<any> {\n const obj = {};\n\n if (this.#insertCard) {\n obj['insertCard'] = {\n el: this.#insertCard,\n messageWrapper: this.#insertCard.querySelector(\n '#' + this.#MESSAGE_WRAPPER_ID\n ),\n message: this.#insertCard.querySelector('#' + this.#MESSAGE_ID),\n submitButton: this.#insertCard.querySelector(\n '#' + this.#BUTTON_SUBMIT_ID\n ),\n cancelButton: this.#insertCard.querySelector(\n '#' + this.#BUTTON_CANCEL_ID\n ),\n form: this.#insertCard.querySelector(\n '#' + this.#FIELDS_FORM_ID\n ),\n };\n }\n if (this.#confirmDeleteCard) {\n obj['confirmDeleteCard'] = {\n el: this.#confirmDeleteCard,\n messageWrapper: this.#insertCard.querySelector(\n '#' + this.#MESSAGE_WRAPPER_ID\n ),\n message: this.#confirmDeleteCard.querySelector(\n '#' + this.#MESSAGE_ID\n ),\n submitButton: this.#confirmDeleteCard.querySelector(\n '#' + this.#BUTTON_SUBMIT_ID\n ),\n cancelButton: this.#confirmDeleteCard.querySelector(\n '#' + this.#BUTTON_CANCEL_ID\n ),\n };\n }\n /*\n #detailCard: HTMLKupCardElement = null;\n #columnMenuCard: HTMLKupCardElement = null;\n #columnDropCard: HTMLKupCardElement = null;\n */\n return obj;\n }\n\n /**\n * Adds a new row to the list data\n * @param row new row\n */\n @Method()\n async insertNewRow(row: KupDataTableRow, unshift: boolean = false) {\n if (row) {\n if (unshift) {\n this.data.rows.unshift(row);\n } else {\n this.data.rows.push(row);\n }\n await this.refresh(true);\n }\n }\n\n /**\n * Expands all groups.\n */\n @Method()\n async expandAll(): Promise<void> {\n this.expandGroups = true;\n }\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupDataTableProps, descriptions);\n }\n /**\n * This method will get the selected rows of the component.\n */\n @Method()\n async getSelectedRows(): Promise<Array<KupDataTableRow>> {\n const selRows: KupDataTableRow[] = [];\n this.selectedRows.forEach((row) => {\n if (row.clonedFrom) {\n selRows.push(row.clonedFrom);\n } else {\n selRows.push(row);\n }\n });\n return selRows;\n }\n /**\n * Hides the given column.\n * @param {KupDataColumn} column - Column to hide.\n */\n @Method()\n async hideColumn(column: KupDataColumn): Promise<void> {\n this.#kupManager.data.column.hide(this.data, [column.name]);\n this.kupColumnRemove.emit({\n comp: this,\n id: this.rootElement.id,\n column: column,\n });\n this.refresh();\n }\n /**\n * Adds/subtracts the input number from the first group's depth level.\n */\n\n @Method()\n async setGroupExpansionByDepth(modifier: number) {\n const toStream = () => {\n const streamlined: KupDataTableRow[] = [];\n for (let index = 0; index < this.#paginatedRows.length; index++) {\n const row = this.#paginatedRows[index];\n const group = row.group;\n if (group) {\n recursive(row);\n }\n\n function recursive(row: KupDataTableRow) {\n const group = row.group;\n streamlined.push(row);\n for (\n let index = 0;\n group?.children && index < group.children.length;\n index++\n ) {\n recursive(group.children[index]);\n }\n }\n }\n return streamlined;\n };\n const handleChildren = (\n row: KupDataTableRow,\n expand: boolean,\n maxDepth?: number,\n depth?: number\n ) => {\n const group = row.group;\n\n if (row.hasOwnProperty('group')) {\n const shouldExpand = depth < maxDepth;\n\n group.expanded = shouldExpand;\n this.groupState[group.id] = { expanded: shouldExpand };\n const paginated = paginatedStream?.find(\n (r) => r.group?.id === group.id\n )?.group;\n if (paginated) {\n paginated.expanded = shouldExpand;\n }\n if (group.children) {\n for (\n let index = 0;\n index < group.children.length;\n index++\n ) {\n const child = group.children[index];\n handleChildren(child, expand, maxDepth, depth + 1);\n }\n }\n }\n };\n const getGroupDepth = (): number => {\n const firstGroup = this.#rows[0];\n let maxDepth = 0;\n\n const traverseGroup = (\n row: KupDataTableRow,\n currentDepth: number\n ): void => {\n const group = row.group;\n if (row.hasOwnProperty('group')) {\n if (group.expanded) {\n maxDepth = Math.max(maxDepth, currentDepth);\n maxDepth += 1;\n }\n traverseGroup(group.children[0], currentDepth + 1);\n }\n };\n\n if (firstGroup) {\n traverseGroup(firstGroup, 0);\n }\n\n return maxDepth;\n };\n const paginatedStream = toStream();\n\n let maxDepth = getGroupDepth() + modifier;\n\n for (let index = 0; index < this.#rows.length; index++) {\n const row = this.#rows[index];\n const group = row.group;\n if (group) {\n handleChildren(row, false, maxDepth, 0);\n }\n }\n\n this.#adjustGroupState();\n this.refresh();\n }\n\n /**\n * Invokes the KupData API for column creation, then refreshes the component in case no errors were catched.\n * @param {KupDataNewColumnTypes} type - Type of the column creation.\n * @param {KupDataNewColumnOptions} options - Options of the creation.\n * @returns {string|KupDataColumn} Returns the new column created or a string containing the error message if something went wrong.\n */\n @Method()\n async newColumn(\n type: KupDataNewColumnTypes,\n options: KupDataNewColumnOptions\n ): Promise<string | KupDataColumn> {\n const result = this.#kupManager.data.column.new(\n this.data,\n type,\n options\n );\n this.refresh();\n\n return result;\n }\n /**\n * Opens the column menu of the given column.\n * @param {string} column - Name of the column.\n */\n @Method()\n async openColumnMenu(column: string): Promise<void> {\n this.columnMenuAnchor = column;\n if (!this.#columnMenuCard) {\n this.#columnMenuCard = document.createElement('kup-card');\n this.#columnMenuCard.isMenu = true;\n this.#columnMenuCard.layoutNumber = 12;\n this.#columnMenuCard.sizeX = 'auto';\n this.#columnMenuCard.sizeY = 'auto';\n this.#columnMenuCard.addEventListener(\n 'kup-card-click',\n (e: CustomEvent<KupEventPayload>) => {\n this.kupDataTableColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.#columnMenuCard,\n event: e,\n open: this.#columnMenuCard.menuVisible,\n });\n }\n );\n this.#columnMenuCard.addEventListener(\n 'kup-card-event',\n (e: CustomEvent<KupCardEventPayload>) => {\n this.#columnMenuInstance.eventHandlers(e, this);\n this.kupDataTableColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.#columnMenuCard,\n event: e,\n open: this.#columnMenuCard.menuVisible,\n });\n }\n );\n }\n this.#columnMenuCard.setAttribute('data-column', column);\n this.#columnMenuCard.data = this.#columnMenuInstance.prepData(\n this,\n getColumnByName(this.getVisibleColumns(), column)\n );\n this.#columnMenuInstance.open(this, column);\n this.#columnMenuInstance.reposition(this, this.#columnMenuCard);\n this.kupDataTableColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.#columnMenuCard,\n event: null,\n open: true,\n });\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(recalcRows?: boolean): Promise<void> {\n if (recalcRows) {\n this.#initRows();\n }\n forceUpdate(this);\n }\n /**\n * This method is invoked by KupManager whenever the component changes size.\n */\n @Method()\n async resizeCallback(): Promise<void> {\n if (\n this.lazyLoadCells &&\n this.rootElement.clientWidth !== this.#oldWidth\n ) {\n window.clearTimeout(this.#resizeTimeout);\n this.#resizeTimeout = window.setTimeout(() => this.refresh(), 300);\n }\n }\n\n /**\n * Sets the cell value in a table cell.\n * @param {string} columnName - Name of the column.\n * @param {string} rowId - Id of the row.\n * @param {string} value - Value to set.\n */\n @Method()\n async setCellValue(\n columnName: string,\n rowId: string,\n value: string\n ): Promise<void> {\n const column = getColumnByName(this.data.columns, columnName);\n if (!column) {\n return;\n }\n const row = this.#getRow(rowId);\n if (!row) {\n return;\n }\n const cell = row.cells[columnName];\n if (!cell) {\n return;\n }\n cell.value = value;\n cell.displayedValue = null;\n if (cell.data) {\n cell.data.key = new Date().getTime() + column.name;\n cell.data.initialValue = value;\n }\n\n this.refresh();\n }\n\n /**\n * Sets the focus on an editable table cell.\n * @param {string} column - Name of the column.\n * @param {string} rowId - Id of the row.\n */\n @Method()\n async setFocus(column: string, rowId: string): Promise<void> {\n const cells = this.rootElement.shadowRoot.querySelectorAll(\n 'td[data-column=\"' + column + '\"]'\n );\n for (let index = 0; cells && index < cells.length; index++) {\n const cell = cells[index];\n if (cell['data-row'] && cell['data-row'].id == rowId) {\n const input = cell.querySelector('input');\n if (input) {\n input.focus();\n } else {\n const kupInput = cell.querySelector('.hydrated');\n if (kupInput) {\n try {\n (kupInput as any).setFocus();\n } catch (error) {}\n }\n }\n }\n }\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupDataTableProps, props);\n }\n\n /**\n * This method will set the selected rows of the component.\n * @param {string|number[]} rowsIdentifiers - Array of ids (dataset) or indexes (rendered rows).\n * @param {boolean} emitEvent - The event will always be emitted unless emitEvent is set to false.\n */\n @Method()\n async setSelectedRows(\n rowsIdentifiers: string[] | number[],\n emitEvent?: boolean\n ): Promise<void> {\n this.selectedRows = [];\n for (let index = 0; index < rowsIdentifiers.length; index++) {\n const id = rowsIdentifiers[index];\n const row = this.#getRow(id);\n if (row) {\n this.selectedRows.push(row);\n }\n }\n\n if (emitEvent !== false) {\n this.kupRowSelected.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n clickedColumn: null,\n clickedRow: null,\n });\n }\n }\n\n #closeDropCard() {\n this.#kupManager.dynamicPosition.stop(\n this.#columnDropCard as KupDynamicPositionElement\n );\n this.#kupManager.removeClickCallback(this.#clickCbDropCard);\n this.#columnDropCard.remove();\n this.#columnDropCard = null;\n }\n\n #createDropCard(starter: KupDataColumn, receiving: KupDataColumn) {\n if (this.#columnDropCard) {\n this.#closeDropCard();\n }\n this.#columnDropCard = document.createElement('kup-card');\n this.#columnDropCard.data = {\n options: {\n data: this.data,\n enableFormula: this.enableColumnsFormula,\n enableMerge: this.enableMergeColumns,\n enableMove: this.enableSortableColumns,\n receivingColumn: receiving,\n starterColumn: starter,\n formulaCb: () => {\n this.#closeDropCard();\n this.refresh();\n },\n mergeCb: () => {\n this.newColumn(KupDataNewColumnTypes.CONCATENATE, {\n columns: [receiving.name, starter.name],\n });\n this.#closeDropCard();\n },\n moveCb: () => {\n this.#handleColumnSort(receiving, starter);\n this.#closeDropCard();\n },\n } as KupCardColumnDropMenuOptions,\n };\n this.#columnDropCard.layoutFamily = KupCardFamily.BUILT_IN;\n this.#columnDropCard.layoutNumber = 3;\n this.#columnDropCard.isMenu = true;\n this.#columnDropCard.sizeX = '280px';\n this.#columnDropCard.sizeY = 'auto';\n this.#kupManager.dynamicPosition.register(\n this.#columnDropCard,\n this.#columnDropCardAnchor as KupDynamicPositionAnchor,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n this.#kupManager.dynamicPosition.start(\n this.#columnDropCard as unknown as KupDynamicPositionElement\n );\n this.#clickCbDropCard = {\n cb: () => {\n this.#closeDropCard();\n },\n el: this.#columnDropCard,\n };\n this.#kupManager.addClickCallback(this.#clickCbDropCard, true);\n this.#columnDropCard.menuVisible = true;\n }\n\n #calculateData() {\n if (!this.transpose) {\n // restore\n if (this.#originalData) {\n this.data = { ...this.#originalData };\n }\n } else {\n // transpose\n this.#setTransposedData();\n }\n }\n\n #getRow(id: string | number): KupDataRow {\n if (this.#isGrouping() && typeof id === 'string') {\n return this.#_getRow(id, this.#paginatedRows);\n } else {\n return this.#_getRow(id, this.#rows);\n }\n }\n\n #_getRow(id: string | number, rows: KupDataTableRow[]): KupDataTableRow {\n if (!rows || rows.length == 0) {\n return null;\n }\n if (typeof id === 'number') {\n return rows[id];\n } else {\n for (let i = 0; i < rows.length; i++) {\n let r = rows[i];\n if (r.id === id) {\n return r;\n }\n if (r.group) {\n r = this.#_getRow(id, r.group.children);\n if (r) {\n return r;\n }\n }\n }\n }\n return null;\n }\n\n #getTransposedData(column?: string): KupDataDataset {\n if (column) {\n this.filters = {};\n }\n return this.#kupManager.data.transpose(this.data, column);\n }\n\n #setTransposedData(): void {\n // transpose\n this.#originalData = { ...this.data };\n if (this.data.columns.length > 0) {\n this.data = this.#getTransposedData(this.data.columns[0].name);\n }\n }\n\n #switchToTotalsMatrix(): void {\n if (this.#rows.length === 0 || !this.#rows[0].group) return;\n // calc totals matrix data\n const totalsMatrixData: KupDataDataset = {};\n // calc columns id\n // note that the sorting of the columns depends on the totals selection\n // the first column is the one that is selected first in the totals, and so on...\n const ids: Array<string> = [];\n ids.push(this.#rows[0].group.column);\n Object.keys(this.#rows[0].group.totals).forEach((columnKey) => {\n if (this.#rows[0].group.column !== columnKey) ids.push(columnKey);\n });\n // calc columns\n const totalsMatrixColumns: Array<KupDataColumn> = [];\n ids.forEach((id) => {\n this.data.columns.forEach((column) => {\n if (column.name === id) {\n const currentColumn = { ...column };\n const totalMode = this.totals[currentColumn.name];\n if (totalMode) {\n if (totalMode.startsWith(TotalMode.MATH)) {\n currentColumn.title =\n TotalLabel[TotalMode.MATH] +\n ' ' +\n currentColumn.title;\n } else {\n const totalModeKey = Object.keys(TotalMode).find(\n (key) => TotalMode[key] === totalMode\n );\n if (totalModeKey) {\n currentColumn.title =\n TotalLabel[totalModeKey] +\n ' ' +\n currentColumn.title;\n } else {\n currentColumn.title =\n totalMode + ' ' + currentColumn.title;\n }\n }\n this.#setObjForTotalsMatrix(currentColumn, this.totals);\n }\n totalsMatrixColumns.push(currentColumn);\n }\n });\n });\n // set columns\n totalsMatrixData.columns = totalsMatrixColumns;\n // calc rows\n const totalsMatrixRows: Array<KupDataTableRow> = [];\n let index = 0;\n this.#rows.forEach((row) => {\n const cells: KupDataTableRowCells = {};\n ids.forEach((id) => {\n let totalValue = row.group.totals[id];\n if (!totalValue) {\n totalValue = row.group.id;\n }\n if (this.#kupManager.dates.isIsoDate(totalValue)) {\n totalValue = this.#kupManager.dates.format(totalValue);\n }\n cells[id] = {\n value: String(totalValue),\n };\n });\n totalsMatrixRows.push({\n id: String(index),\n cells,\n });\n index++;\n });\n // set rows\n totalsMatrixData.rows = totalsMatrixRows;\n // reset groups\n this.groups = [];\n // update data\n this.data = { ...totalsMatrixData };\n // calc totals\n // distinct becomes count\n // count becomes sum\n const updatedTotals: TotalsMap = {};\n Object.keys(this.totals).forEach((key) => {\n switch (this.totals[key]) {\n case TotalMode.DISTINCT:\n updatedTotals[key] = TotalMode.COUNT;\n break;\n case TotalMode.COUNT:\n updatedTotals[key] = TotalMode.SUM;\n break;\n default:\n updatedTotals[key] = this.totals[key];\n break;\n }\n });\n // update totals\n this.totals = { ...updatedTotals };\n }\n\n // TODO\n // this is momentary\n #setObjForTotalsMatrix(column: KupDataColumn, totals: TotalsMap): void {\n const obj = column.obj;\n const totalMode = totals[column.name];\n if (this.#kupManager.objects.isDate(obj)) {\n // check if min or max totals mode\n if (totalMode === TotalMode.MAX || totalMode === TotalMode.MIN) {\n return;\n }\n } else if (this.#kupManager.objects.isNumber(obj)) {\n // check if percentage\n if (obj.p && obj.p.toUpperCase() === 'P') {\n if (\n totalMode !== TotalMode.COUNT &&\n totalMode !== TotalMode.DISTINCT\n ) {\n return;\n }\n }\n }\n // force obj number\n column.obj = {\n t: 'NR',\n p: '',\n k: '',\n };\n if (column.icon) {\n delete column.icon;\n }\n }\n\n #stickyHeaderPosition = () => {\n if (this.#tableRef) {\n if (this.#tableIntersecting) {\n if (!this.#theadIntersecting) {\n this.#updateStickyHeaderSize();\n this.#stickyTheadRef.classList.add('activated');\n } else {\n this.#stickyTheadRef.classList.remove('activated');\n }\n } else {\n this.#stickyTheadRef.classList.remove('activated');\n }\n }\n };\n\n #updateStickyHeaderSize() {\n const navBar = document.querySelector('.header') as HTMLElement;\n const topBar = document.querySelector('.topbar') as HTMLElement;\n if (navBar) {\n this.#navBarHeight = navBar.clientHeight;\n } else {\n this.#navBarHeight = 0;\n }\n if (topBar) {\n this.#navBarHeight += topBar.clientHeight;\n }\n if (this.#stickyTheadRef) {\n this.#stickyTheadRef.style.top = this.#navBarHeight + 'px';\n const widthTable = this.#tableAreaRef.offsetWidth;\n this.#stickyTheadRef.style.maxWidth = widthTable + 'px';\n const thCollection: NodeListOf<HTMLElement> =\n this.#theadRef.querySelectorAll('th');\n const thStickyCollection: NodeListOf<HTMLElement> =\n this.#stickyTheadRef.querySelectorAll('th-sticky');\n for (let i = 0; i < thCollection.length; i++) {\n const widthTH = thCollection[i].offsetWidth;\n thStickyCollection[i].style.width = widthTH + 'px';\n }\n }\n }\n\n #setObserver() {\n const callback: IntersectionObserverCallback = (\n entries: IntersectionObserverEntry[]\n ) => {\n entries.forEach((entry) => {\n if (entry.target.tagName === 'TR') {\n if (entry.isIntersecting) {\n this.#kupManager.debug.logMessage(\n this,\n 'Last row entering the viewport, loading more elements.'\n );\n const delta =\n this.#rows.length - this.currentRowsPerPage;\n if (delta < this.loadMoreStep) {\n this.currentRowsPerPage += delta;\n } else {\n this.currentRowsPerPage += this.loadMoreStep;\n }\n entry.target.classList.remove('last-row');\n }\n }\n if (entry.target.tagName === 'THEAD') {\n if (entry.isIntersecting) {\n this.#theadIntersecting = true;\n } else if (\n entry.boundingClientRect.bottom > this.#navBarHeight\n ) {\n //If the thead is not intersecting but it still is inside the viewport, is to be considered intersected\n this.#theadIntersecting = true;\n } else {\n this.#theadIntersecting = false;\n }\n }\n if (entry.target.tagName === 'TABLE') {\n if (entry.isIntersecting) {\n this.#tableIntersecting = true;\n } else {\n this.#tableIntersecting = false;\n }\n }\n if (\n this.tableHeight === undefined &&\n this.tableWidth === undefined &&\n this.headerIsPersistent\n ) {\n this.#stickyHeaderPosition();\n }\n });\n };\n const options: IntersectionObserverInit = {\n threshold: 0,\n rootMargin: '-' + this.#navBarHeight + 'px 0px 0px 0px',\n };\n this.#intObserver = new IntersectionObserver(callback, options);\n }\n\n #didLoadInteractables() {\n this.#interactableTouch.push(this.#tableRef);\n const tapCb = (e: PointerEvent) => {\n if (this.#hold) {\n this.#hold = false;\n return;\n }\n switch (e.button) {\n // left click\n case 0:\n // Note: event must be cloned\n // otherwise inside setTimeout will be exiting the Shadow DOM scope(causing loss of information, including target).\n const clone: GenericObject = {};\n for (const key in e) {\n clone[key] = e[key];\n }\n\n // in case an icon is clicked\n if (\n (e.target as HTMLElement).classList.contains(\n 'f-image__icon'\n )\n ) {\n const details = this.#getEventDetails(\n this.#kupManager.getEventPath(\n e.target,\n this.rootElement\n ),\n e\n );\n\n // in case a cell action icon is clicked\n if (\n details?.cell?.obj?.t !== 'J4' &&\n details?.cell?.obj?.p !== 'ICO'\n ) {\n break;\n }\n }\n\n this.#clickTimeout.push(\n setTimeout(() => {\n this.kupDataTableClick.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.#clickHandler(\n clone as PointerEvent\n ),\n });\n }, 300)\n );\n break;\n // right click\n case 2:\n this.kupDataTableContextMenu.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.#contextMenuHandler(e),\n });\n break;\n }\n };\n const doubletapCb = (e: PointerEvent) => {\n switch (e.button) {\n // left click\n case 0:\n for (\n let index = 0;\n index < this.#clickTimeout.length;\n index++\n ) {\n clearTimeout(this.#clickTimeout[index]);\n this.#kupManager.debug.logMessage(\n this,\n 'Cleared clickHandler timeout(' +\n this.#clickTimeout[index] +\n ').'\n );\n }\n this.#clickTimeout = [];\n this.kupDataTableDblClick.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.#dblClickHandler(e),\n });\n break;\n }\n };\n const holdCb = (e: PointerEvent) => {\n if (e.pointerType === 'pen' || e.pointerType === 'touch') {\n this.#hold = true;\n this.kupDataTableContextMenu.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.#contextMenuHandler(e),\n });\n }\n };\n this.#kupManager.interact.on(\n this.#tableRef,\n KupPointerEventTypes.TAP,\n tapCb\n );\n this.#kupManager.interact.on(\n this.#tableRef,\n KupPointerEventTypes.DOUBLETAP,\n doubletapCb\n );\n this.#kupManager.interact.on(\n this.#tableRef,\n KupPointerEventTypes.HOLD,\n holdCb\n );\n }\n\n #didRenderInteractables() {\n if (this.showGroups) {\n if (!this.#interactableDrop.includes(this.#groupsDropareaRef)) {\n this.#interactableDrop.push(this.#groupsDropareaRef);\n this.#kupManager.interact.dropzone(\n this.#groupsDropareaRef,\n {\n accept: `[${kupDraggableColumnAttr}]`,\n },\n null,\n {\n drop: (e: DropEvent) => {\n const draggedTh = e.relatedTarget as HTMLElement;\n const grouped = getColumnByName(\n this.getColumns(),\n draggedTh.dataset.column\n );\n this.#handleColumnGroup(grouped);\n this.#tableRef.removeAttribute(kupDragActiveAttr);\n },\n }\n );\n }\n }\n if (this.removableColumns) {\n if (!this.#interactableDrop.includes(this.#removeDropareaRef)) {\n this.#interactableDrop.push(this.#removeDropareaRef);\n this.#kupManager.interact.dropzone(\n this.#removeDropareaRef,\n {\n accept: `[${kupDraggableColumnAttr}]`,\n },\n null,\n {\n drop: (e: DropEvent) => {\n const draggedTh = e.relatedTarget as HTMLElement;\n const deleted = getColumnByName(\n this.getColumns(),\n draggedTh.dataset.column\n );\n this.hideColumn(deleted);\n this.#tableRef.removeAttribute(kupDragActiveAttr);\n },\n }\n );\n }\n }\n if (\n this.enableSortableColumns ||\n this.enableMergeColumns ||\n this.enableColumnsFormula\n ) {\n const dataCb: KupDragDataTransferCallback = (e) => {\n const draggable = e.target as KupDraggableElement;\n return {\n cell: null,\n column: getColumnByName(\n this.getVisibleColumns(),\n draggable.dataset.column\n ),\n id: this.rootElement.id,\n multiple: !!(\n this.selection === SelectionMode.MULTIPLE ||\n this.selection === SelectionMode.MULTIPLE_CHECKBOX\n ),\n row: null,\n selectedRows: this.selectedRows,\n };\n };\n const dropCb = (e: DropEvent) => {\n const onlyMerge = !!(\n !this.enableSortableColumns &&\n !this.enableColumnsFormula &&\n this.enableMergeColumns\n );\n const onlySort = !!(\n this.enableSortableColumns &&\n !this.enableColumnsFormula &&\n !this.enableMergeColumns\n );\n const draggable = e.relatedTarget as KupDraggableElement;\n const isSameComponent = !!(\n this.rootElement.id === draggable.kupDragDrop.id\n );\n const starter = draggable.kupDragDrop.column;\n const receiving = getColumnByName(\n this.getColumns(),\n e.target.dataset.column\n );\n this.#columnDropCardAnchor = e.target as HTMLElement;\n if (isSameComponent && receiving && starter) {\n if (onlySort) {\n this.#handleColumnSort(receiving, starter);\n } else if (onlyMerge) {\n this.newColumn(KupDataNewColumnTypes.CONCATENATE, {\n columns: [receiving.name, starter.name],\n });\n } else {\n this.#createDropCard(starter, receiving);\n }\n }\n this.#tableRef.removeAttribute(kupDragActiveAttr);\n };\n const startCb = (e: InteractEvent) => {\n const draggable = e.target as KupDraggableElement;\n this.#hideShowColumnDropArea(true, draggable);\n };\n const endCb = () => {\n this.#hideShowColumnDropArea(false);\n };\n const dropCallbacks: KupDropCallbacks = {\n drop: dropCb,\n };\n const dragCallbacks: KupDragCallbacks = {\n start: startCb,\n end: endCb,\n };\n for (let index = 0; index < this.#thRefs.length; index++) {\n const th = this.#thRefs[index];\n if (th && !this.#interactableDrag.includes(th)) {\n this.#interactableDrag.push(th);\n this.#kupManager.interact.dropzone(\n th,\n {\n accept: `[${kupDraggableColumnAttr}]`,\n },\n null,\n dropCallbacks\n );\n this.#kupManager.interact.draggable(\n th,\n {\n cursorChecker() {\n return null;\n },\n ignoreFrom: '.header-cell__drag-handler',\n },\n {\n callback: dataCb,\n },\n KupDragEffect.CLONE,\n dragCallbacks\n );\n }\n }\n }\n if (this.resizableColumns) {\n const moveCb = (e: ResizeEvent) => {\n const column = getColumnByName(\n this.getVisibleColumns(),\n (e.target as HTMLElement).dataset.column\n );\n column.size = e.rect.width + 'px';\n this.refresh();\n };\n const callbacks: KupResizeCallbacks = {\n move: moveCb,\n };\n for (let index = 0; index < this.#thRefs.length; index++) {\n const th = this.#thRefs[index];\n if (th && !this.#interactableResize.includes(th)) {\n this.#interactableResize.push(th);\n this.#kupManager.interact.resizable(\n th,\n {\n allowFrom: '.header-cell__drag-handler',\n edges: {\n left: false,\n right: true,\n bottom: false,\n top: false,\n },\n ignoreFrom: '.header-cell__content',\n },\n callbacks\n );\n }\n }\n }\n if (this.dragEnabled) {\n for (let index = 0; index < this.#rowsRefs.length; index++) {\n const row = this.#rowsRefs[index];\n const dataCb: KupDragDataTransferCallback = () => {\n const cell = this.#lastPointerDetails?.cell;\n const column = this.#lastPointerDetails?.column;\n const row = this.#lastPointerDetails?.row;\n if (!cell) {\n this.#kupManager.debug.logMessage(\n this,\n \"Couldn't find cell to retrieve drag informations!\",\n KupDebugCategory.WARNING\n );\n return;\n }\n return {\n cell,\n column,\n id: this.rootElement.id,\n multiple: !!(\n this.selection === SelectionMode.MULTIPLE ||\n this.selection === SelectionMode.MULTIPLE_CHECKBOX\n ),\n row,\n selectedRows: this.selectedRows,\n };\n };\n if (row && !this.#interactableDrag.includes(row)) {\n this.#interactableDrag.push(row);\n this.#kupManager.interact.draggable(\n row,\n {\n allowFrom: 'td',\n cursorChecker() {\n return null;\n },\n },\n {\n callback: dataCb,\n },\n KupDragEffect.BADGE\n );\n }\n }\n }\n if (this.dropEnabled) {\n const dataCb: KupDropDataTransferCallback = () => {\n const cell = this.#lastPointerDetails?.cell;\n const column = this.#lastPointerDetails?.column;\n const row = this.#lastPointerDetails?.row;\n if (!cell) {\n this.#kupManager.debug.logMessage(\n this,\n \"Couldn't find cell to retrieve dropzone informations!\",\n KupDebugCategory.WARNING\n );\n return;\n }\n return {\n cell,\n column,\n id: this.rootElement.id,\n row,\n };\n };\n for (let index = 0; index < this.#rowsRefs.length; index++) {\n const row = this.#rowsRefs[index];\n if (row && !this.#interactableDrop.includes(row)) {\n this.#interactableDrop.push(row);\n this.#kupManager.interact.dropzone(\n row,\n {\n accept: `[${kupDraggableCellAttr}]`,\n },\n {\n callback: dataCb,\n dispatcher: this.rootElement,\n type: KupDropEventTypes.DATATABLE,\n }\n );\n }\n }\n }\n }\n\n #didLoadObservers() {\n if (\n this.headerIsPersistent &&\n this.tableHeight === undefined &&\n this.tableWidth === undefined\n ) {\n this.#intObserver.observe(this.#tableRef);\n this.#intObserver.observe(this.#theadRef);\n }\n }\n\n #didRenderObservers() {\n if (this.#paginatedRowsLength < this.#rowsLength && this.lazyLoadRows) {\n this.#intObserver.observe(\n this.#rowsRefs[this.#paginatedRowsLength - 1]\n );\n }\n }\n\n #didLoadEventHandling() {\n this.#tableAreaRef.addEventListener('scroll', () =>\n this.#scrollStickyHeader()\n );\n }\n\n #scrollStickyHeader() {\n if (!this.#stickyTheadRef) {\n return;\n }\n this.#stickyTheadRef.scrollLeft = this.#tableAreaRef.scrollLeft;\n }\n\n #checkScrollOnHover() {\n if (!this.#kupManager.scrollOnHover.isRegistered(this.#tableAreaRef)) {\n if (\n this.scrollOnHover &&\n this.tableHeight === undefined &&\n this.tableWidth === undefined\n ) {\n this.#kupManager.scrollOnHover.register(this.#tableAreaRef);\n }\n } else {\n if (\n !this.scrollOnHover &&\n (this.tableHeight !== undefined ||\n this.tableWidth !== undefined)\n ) {\n this.#kupManager.scrollOnHover.unregister(this.#tableAreaRef);\n }\n }\n }\n\n #customizePanelPosition() {\n if (\n this.#customizeTopButtonRef &&\n !this.#kupManager.dynamicPosition.isRegistered(\n this.#customizeTopPanelRef\n )\n ) {\n this.#kupManager.dynamicPosition.register(\n this.#customizeTopPanelRef,\n this.#customizeTopButtonRef,\n 0,\n KupDynamicPositionPlacement.BOTTOM,\n true\n );\n }\n }\n\n #rowsPointLength(): number {\n return this.#_rowsLength(this.#rows);\n }\n\n #paginatedRowsPointLength(): number {\n return this.#_rowsLength(this.#paginatedRows);\n }\n\n #_rowsLength(r: Array<KupDataTableRow>): number {\n if (r == null) {\n return 0;\n }\n let count = 0;\n for (let i: number = 0; i < r.length; i++) {\n const row = r[i];\n if (row == null) {\n continue;\n }\n count += 1;\n if (row.group != null) {\n count += this.#_rowsLength(row.group.children);\n }\n }\n return count;\n }\n\n //---- Lifecycle hooks ----\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.language.register(this);\n this.#kupManager.theme.register(this);\n this.#kupManager.toolbar.register(this.rootElement);\n if (!this.emptyDataLabel) {\n this.emptyDataLabel = this.#kupManager.language.translate(\n KupLanguageGeneric.EMPTY_DATA\n );\n }\n this.#columnMenuInstance = new KupColumnMenu();\n this.#filtersColumnMenuInstance = new FiltersColumnMenu();\n this.#filtersRowsInstance = new FiltersRows();\n\n this.#isRestoringState = true;\n // *** Store\n this.initWithPersistedState();\n // ***\n if (this.pageSelected > 0) {\n this.currentPage = this.pageSelected;\n }\n this.currentRowsPerPage = this.rowsPerPage;\n this.#isRestoringState = false;\n\n //this.identifyAndInitRows();\n identify(this.getRows());\n this.expandGroupsHandler();\n\n if (document.querySelector('.header')) {\n this.#navBarHeight = document.querySelector('.header').clientHeight;\n } else {\n this.#navBarHeight = 0;\n }\n if (document.querySelector('.topbar')) {\n this.#navBarHeight +=\n document.querySelector('.topbar').clientHeight;\n }\n this.#setObserver();\n\n //this.recalculateRows();\n\n // Detects is the browser is Safari. If needed, this function can be moved into an external file and then imported into components\n this.#isSafariBrowser =\n CSS.supports('position', '-webkit-sticky') ||\n !!(window && (window as Window & { safari?: object }).safari);\n\n this.#calculateData();\n this.#initialized = true;\n\n this.decorateAndInitForUpdTable();\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const fs: NodeListOf<HTMLElement> =\n root.querySelectorAll('.f-text-field');\n for (let index = 0; index < fs.length; index++) {\n FTextFieldMDC(fs[index]);\n }\n }\n if (this.showCustomization) {\n this.#customizePanelPosition();\n }\n this.#totalMenuPosition();\n this.#checkScrollOnHover();\n this.#didRenderObservers();\n this.#didRenderInteractables();\n this.#hideShowColumnDropArea(false);\n\n if (\n this.headerIsPersistent &&\n this.tableHeight === undefined &&\n this.tableWidth === undefined\n ) {\n this.#updateStickyHeaderSize();\n }\n\n setTimeout(() => this.#updateFixedRowsAndColumnsCssVariables(), 50);\n // *** Store\n if (this.lazyLoadCells) {\n this.persistState();\n }\n // ***\n this.#oldWidth = this.rootElement.clientWidth;\n this.#kupManager.debug.logRender(this, true);\n }\n\n componentDidLoad() {\n this.#didLoadObservers();\n this.#didLoadEventHandling();\n this.#didLoadInteractables();\n this.lazyLoadCells = true;\n this.kupDidLoad.emit({ comp: this, id: this.rootElement.id });\n this.#kupManager.resize.observe(this.rootElement);\n this.#kupManager.debug.logLoad(this, true);\n }\n\n //======== Utility methods ========\n\n #resetSelectedRows() {\n if (this.getRows().length === 0) return;\n this.selectedRows = [];\n this.kupResetSelectedRows.emit({ comp: this, id: this.rootElement.id });\n }\n\n resetCurrentPage() {\n this.currentPage = 1;\n this.#resetSelectedRows();\n }\n\n getColumns(): Array<KupDataColumn> {\n return this.data && this.data.columns\n ? this.data.columns\n : [{ title: '', name: '' }];\n }\n\n #getSizedColumns() {\n const columns = this.getColumns();\n const sizedColumns = [];\n for (let j = 0; j < columns.length; j++) {\n if (\n columns[j].size !== null &&\n columns[j].size !== undefined &&\n columns[j].size !== ''\n ) {\n sizedColumns.push(columns[j]);\n }\n }\n if (sizedColumns.length > 0) {\n return sizedColumns;\n } else {\n return undefined;\n }\n }\n /**\n * Opens a card containing the detail of the given row.\n * @param {KupDataTableRow} row - Row for which the detail was requested.\n * @param {number} x - Initial x coordinates of the card.\n * @param {number} y - Initial y coordinates of the card.\n * @private\n * @memberof KupDataTable\n */\n #rowDetail(row: KupDataTableRow, x: number, y: number): void {\n const transposedData: KupDataDataset = this.#getTransposedData();\n const cardData: KupCardData = {\n button: [\n {\n disabled: parseInt(row.id) === 0 ? true : false,\n icon: 'chevron_left',\n },\n {\n disabled:\n parseInt(row.id) === this.getRows().length - 1\n ? true\n : false,\n icon: 'chevron_right',\n },\n ],\n datatable: [\n {\n customStyle:\n '#kup-component .below-wrapper{overflow: visible} #kup-component td[data-column=\"' +\n iconColumn.toUpperCase() +\n `\"]{background-color: rgba(var(${KupThemeColorValues.TEXT}-rgb), 0.15); width: 10px;}`,\n data: transposedData,\n density: 'medium',\n editableData: true,\n headerIsPersistent: false,\n id: this.rootElement.id ? this.rootElement.id : '',\n rowsPerPage: 1000,\n showGrid: ShowGrid.NONE,\n showHeader: false,\n },\n ],\n text: [this.#kupManager.language.translate(KupLanguageRow.DETAIL)],\n };\n const columns: KupDataColumn[] = cardData.datatable[0].data.columns;\n const rows: KupDataTableRow[] = cardData.datatable[0].data.rows;\n // Placing the key and icon columns before any other column\n columns.unshift(\n {\n name: iconColumn.toUpperCase(),\n title: iconColumn,\n },\n {\n name: keyColumn.toUpperCase(),\n title: keyColumn,\n }\n );\n // Setting all columns to not visible\n for (let index = 0; index < columns.length; index++) {\n columns[index].visible = false;\n }\n // Setting Field column and current record column to visible\n columns.find((x) => x.name === fieldColumn.toUpperCase()).visible =\n true;\n const currentColumn = columns.find((x) => x.name === row.id);\n if (currentColumn) {\n currentColumn.visible = true;\n } else {\n this.#kupManager.debug.logMessage(\n this,\n 'Invalid column name on row ID (' +\n row.id +\n \"), couldn't set current record!\",\n KupDebugCategory.WARNING\n );\n }\n // Setting up icons\n let keyCell: KupDataTableCell = null;\n for (let index = 0; index < rows.length; index++) {\n const column: KupDataColumn = this.data.columns.find(\n (x) => x.name === rows[index].transposedColumnName\n );\n if (!column) {\n this.#kupManager.debug.logMessage(\n this,\n 'Column not found on row name (' + column + ')!',\n KupDebugCategory.WARNING\n );\n return;\n }\n const editable: boolean = rows[index].cells[row.id].isEditable\n ? true\n : false;\n let iconCell: KupDataTableCell = null;\n if (column.isKey || editable) {\n columns.find(\n (x) => x.name === iconColumn.toUpperCase()\n ).visible = true;\n }\n if (column.isKey) {\n // Key should always be the first row\n keyCell = row.cells[column.name];\n iconCell = {\n obj: {\n t: 'J4',\n p: 'ICO',\n k: 'OG_OG_KF',\n },\n data: {\n color: `var(${KupThemeColorValues.TEXT})`,\n resource: editable ? 'edit-key' : 'key-variant',\n },\n title: editable\n ? this.#kupManager.language.translate(\n KupLanguageRow.EDITABLE_KEY\n )\n : this.#kupManager.language.translate(\n KupLanguageRow.KEY\n ),\n value: editable ? 'edit-key' : 'key-variant',\n };\n } else if (editable) {\n iconCell = {\n obj: {\n t: 'VO',\n p: 'COD_VER',\n k: '000051',\n },\n data: {\n color: `var(${KupThemeColorValues.TEXT})`,\n resource: 'pencil',\n },\n title: this.#kupManager.language.translate(\n KupLanguageGeneric.EDITABLE_FIELD\n ),\n value: 'pencil',\n };\n } else {\n iconCell = {\n obj: {\n t: '',\n p: '',\n k: '',\n },\n value: '',\n };\n }\n if (keyCell) {\n rows[index].cells[keyColumn.toUpperCase()] = keyCell;\n } else {\n rows[index].cells[keyColumn.toUpperCase()] = { value: null };\n }\n rows[index].cells[iconColumn.toUpperCase()] = iconCell;\n }\n if (!this.#detailCard) {\n this.#detailCard = document.createElement('kup-card');\n this.#detailCard.layoutFamily = KupCardFamily.DIALOG;\n this.#detailCard.layoutNumber = 4;\n this.#detailCard.sizeX = 'auto';\n this.#detailCard.sizeY = 'auto';\n } else {\n const children: HTMLCollection = Array.prototype.slice.call(\n this.#detailCard.children,\n 0\n );\n for (let index = 0; index < children.length; index++) {\n children[index].remove();\n }\n }\n this.#detailCard.data = cardData;\n this.#detailCard.style.position = 'fixed';\n this.#detailCard.style.left = '0';\n this.#detailCard.style.top = '0';\n this.#detailCard.setAttribute('data-x', x.toString());\n this.#detailCard.setAttribute('data-y', y.toString());\n this.#detailCard.style.transform = 'translate(' + x + 'px,' + y + 'px)';\n this.rootElement.shadowRoot.append(this.#detailCard);\n }\n /**\n * Opens a card containing the actions of the given row.\n * @param {KupDataRowAction[]} dropDownActions - Actions for the row.\n * @private\n * @memberof KupDataTable\n */\n #dropDownActions(\n dropDownActions: KupDataRowAction[],\n row: KupDataTableRow\n ) {\n this.#createDropDownActionsCard(dropDownActions, row);\n }\n\n #createDropDownActionsCard(\n dropDownActions: KupDataRowAction[],\n row: KupDataTableRow\n ) {\n if (this.#actionsCard) {\n this.#closeRowActionsCard();\n }\n this.#actionsCard = document.createElement('kup-card');\n this.#actionsCard.layoutFamily = KupCardFamily.STANDARD;\n this.#actionsCard.layoutNumber = 17;\n this.#actionsCard.menuVisible = true;\n this.#actionsCard.sizeX = 'auto';\n this.#actionsCard.sizeY = 'auto';\n this.#actionsCard.data =\n this.#prepareDataForActionsCard(dropDownActions);\n this.#clickCbDropCard = {\n cb: () => {\n this.#closeRowActionsCard();\n },\n el: this.#actionsCard,\n };\n this.#kupManager.addClickCallback(this.#clickCbDropCard, true);\n this.#actionsCard.style.position = 'absolute';\n this.#actionsCard.style.left = '0';\n this.#actionsCard.style.top = '0';\n this.#actionsCard.isMenu = true;\n this.rootElement.shadowRoot.append(this.#actionsCard);\n this.#kupManager.dynamicPosition.register(\n this.#actionsCard,\n this.#dropDownActionCardAnchor as KupDynamicPositionAnchor,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n this.#kupManager.dynamicPosition.start(\n this.#actionsCard as unknown as KupDynamicPositionElement\n );\n this.#actionsCard.addEventListener(\n 'kup-card-event',\n (e: CustomEvent<KupCardEventPayload>) => {\n switch (e.detail.event.type) {\n case 'kup-textfield-input':\n const input = e.detail.event.detail.value;\n\n this.#filterRowActionsCard(\n this.#actionsCard,\n dropDownActions,\n input\n );\n break;\n case 'kup-textfield-cleariconclick':\n this.#clearSearchActionsCard(\n this.#actionsCard,\n dropDownActions\n );\n break;\n case 'kup-list-click':\n const selectedObjectIndex = e.detail.event.detail.index;\n const selectedObject =\n dropDownActions[selectedObjectIndex];\n\n this.kupRowActionItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n row: row,\n obj: selectedObject.obj,\n cell: selectedObject.cell,\n type: selectedObject.type,\n index: selectedObject.index,\n column: selectedObject.column,\n });\n setTimeout(() => {\n this.#closeRowActionsCard();\n }, 0);\n }\n }\n );\n }\n\n #clearSearchActionsCard(\n card: HTMLKupCardElement,\n dropDownActions: KupDataRowAction[]\n ) {\n const rowActionsList: Pick<KupList, 'showIcons' | 'data'> = {\n showIcons: true,\n data: dropDownActions.map((r) => ({\n value: r.text,\n ...r,\n })),\n };\n card.data.list[0].data = rowActionsList.data;\n card.refresh();\n }\n\n #filterRowActionsCard(\n card: HTMLKupCardElement,\n dropDownActions: KupDataRowAction[],\n input: string\n ) {\n const rowActionsList: Pick<KupList, 'showIcons' | 'data'> = {\n showIcons: true,\n data: dropDownActions.map((r) => ({\n value: r.text,\n ...r,\n })),\n };\n const filteredList: KupListNode[] = rowActionsList.data.filter(\n (action: KupListNode) =>\n action.value.toLowerCase().includes(input.toLowerCase())\n );\n card.data.list[0].data = filteredList;\n card.refresh();\n }\n\n #closeRowActionsCard() {\n this.#kupManager.dynamicPosition.stop(\n this.#actionsCard as KupDynamicPositionElement\n );\n this.#kupManager.removeClickCallback(this.#clickCbDropCard);\n this.#actionsCard.remove();\n this.#actionsCard = null;\n }\n\n #prepareDataForActionsCard(\n dropDownActions: KupDataRowAction[]\n ): KupCardData {\n const hasAlmostTenElements = dropDownActions.length >= 10;\n\n const textfield = hasAlmostTenElements\n ? [\n {\n fullWidth: true,\n icon: 'magnify',\n isClearable: true,\n label: 'Search...',\n key: KupColumnMenuIds.TEXTFIELD_FILTER,\n id: KupColumnMenuIds.TEXTFIELD_FILTER,\n },\n ]\n : [];\n\n const data: KupCardData = {\n list: [\n {\n showIcons: true,\n data: dropDownActions.map((r) => ({\n value: r.text,\n ...r,\n })),\n },\n ],\n textfield,\n };\n\n return data;\n }\n #rowInsertForm() {\n const CARD_WIDTH = 400;\n const CARD_HEIGHT = 400;\n this.#insertCard = document.createElement('kup-card');\n this.#insertCard.layoutFamily = KupCardFamily.FREE;\n this.#insertCard.layoutNumber = 1;\n this.#insertCard.sizeX = CARD_WIDTH + 'px';\n this.#insertCard.sizeY = CARD_HEIGHT + 'px';\n\n const style = document.createElement('style');\n style.innerText =\n 'kup-form { max-height: 40vh; overflow: auto; } .page-wrapper { display: grid; } ' +\n '.button-wrapper { padding-top: 20px; display: flex; justify-content: space-around; z-index: var(--kup-card-zindex); } ' +\n '.message-wrapper { display: none; justify-content: start; padding-top: 5px; padding-bottom: 5px; } ' +\n '.errorIcon { --kup-icon-color: var(--kup-danger-color-60); } ' +\n '.message { background-color: var(--kup-danger-color-60); color: white; padding: 3px; } ';\n this.#insertCard.append(style);\n\n const pageWrapper = document.createElement('div');\n pageWrapper.className = 'page-wrapper';\n\n const buttonWrapper = document.createElement('div');\n buttonWrapper.className = 'button-wrapper';\n const cancel = document.createElement('kup-button');\n const confirm = document.createElement('kup-button');\n cancel.id = this.#BUTTON_CANCEL_ID;\n cancel.icon = 'clear';\n cancel.label = this.#kupManager.language.translate(\n KupLanguageGeneric.ABORT\n );\n cancel.styling = FButtonStyling.FLAT;\n cancel.addEventListener('kup-button-click', () => {\n this.#insertCard.remove();\n this.#insertCard = null;\n });\n confirm.id = this.#BUTTON_SUBMIT_ID;\n confirm.icon = 'check';\n confirm.label = this.#kupManager.language.translate(\n KupLanguageGeneric.CONFIRM\n );\n let innerComp = document.createElement('kup-spinner');\n innerComp.slot = 'spinner';\n innerComp.dimensions = '0.6em';\n innerComp.active = true;\n confirm.appendChild(innerComp);\n confirm.addEventListener('kup-button-click', () => {\n messageWrapper.style.display = 'none';\n confirm.showSpinner = true;\n cancel.disabled = true;\n this.kupInsertRow.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: [row],\n });\n });\n buttonWrapper.append(cancel);\n buttonWrapper.append(confirm);\n\n const form = document.createElement('kup-form');\n form.id = this.#FIELDS_FORM_ID;\n const row: KupFormRow = {\n cells: {},\n id: '0',\n };\n this.data.columns.forEach((column) => {\n if (column.isEditable || column.isKey) {\n row.cells[column.name] = {\n isEditable: column.isEditable,\n shape: column.shape,\n value: '',\n };\n }\n });\n form.data = {\n columns: this.data.columns,\n rows: [row],\n };\n\n const messageWrapper = document.createElement('div');\n messageWrapper.className = 'message-wrapper';\n messageWrapper.id = this.#MESSAGE_WRAPPER_ID;\n const icon = document.createElement('kup-image');\n icon.className = 'errorIcon';\n icon.resource = 'cancel';\n icon.sizeX = '20px';\n icon.sizeY = '20px';\n messageWrapper.append(icon);\n\n const message = document.createElement('span');\n message.className = 'message';\n message.id = this.#MESSAGE_ID;\n let msg = '';\n message.innerText = msg;\n messageWrapper.append(message);\n\n pageWrapper.append(messageWrapper);\n pageWrapper.append(form);\n pageWrapper.append(buttonWrapper);\n\n this.#insertCard.append(pageWrapper);\n this.#insertCard.data = {};\n this.rootElement.shadowRoot.append(this.#insertCard);\n }\n\n #rowsDelete() {\n const createDeleteCard = () => {\n this.#confirmDeleteDialog = document.createElement('kup-dialog');\n this.#confirmDeleteCard = document.createElement('kup-card');\n this.#confirmDeleteCard.layoutFamily = KupCardFamily.FREE;\n this.#confirmDeleteCard.layoutNumber = 1;\n this.#confirmDeleteCard.sizeX = 'auto';\n this.#confirmDeleteCard.sizeY = 'auto';\n const style = document.createElement('style');\n style.innerText =\n '.button-wrapper, .message-wrapper { display: flex; justify-content: space-around; z-index: var(--kup-card-zindex); } .message-wrapper { padding-bottom: 20px; }';\n const messageWrapper = document.createElement('div');\n messageWrapper.className = 'message-wrapper';\n messageWrapper.id = this.#MESSAGE_WRAPPER_ID;\n const message = document.createElement('span');\n message.className = 'message';\n message.id = this.#MESSAGE_ID;\n let msg = this.#kupManager.language.translate(\n KupLanguageGeneric.CONFIRM_DELETE_X_ROWS\n );\n msg = msg.replace('{0}', this.selectedRows.length + '');\n message.innerText = msg;\n messageWrapper.append(message);\n const buttonWrapper = document.createElement('div');\n buttonWrapper.className = 'button-wrapper';\n const confirm = document.createElement('kup-button');\n confirm.id = this.#BUTTON_SUBMIT_ID;\n confirm.icon = 'check';\n confirm.label = this.#kupManager.language.translate(\n KupLanguageGeneric.CONFIRM\n );\n let innerComp = document.createElement('kup-spinner');\n innerComp.slot = 'spinner';\n innerComp.dimensions = '0.6em';\n innerComp.active = true;\n confirm.appendChild(innerComp);\n confirm.addEventListener('kup-button-click', () => {\n confirm.showSpinner = true;\n this.kupDeleteRow.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n });\n });\n buttonWrapper.append(confirm);\n this.#confirmDeleteCard.append(style);\n this.#confirmDeleteCard.append(messageWrapper);\n this.#confirmDeleteCard.append(buttonWrapper);\n this.#confirmDeleteCard.data = {};\n this.#confirmDeleteDialog.append(this.#confirmDeleteCard);\n document.querySelector('body').append(this.#confirmDeleteDialog);\n };\n\n const insertRowsIds: string[] = [];\n const startingRows: KupDataTableRow[] = [];\n this.selectedRows.forEach((row) => {\n if (row.id.indexOf(this.#INSERT_PREFIX) > -1) {\n insertRowsIds.push(row.id);\n } else {\n startingRows.push(row);\n }\n });\n this.deleteRows(insertRowsIds).then(() => {\n if (startingRows.length > 0) {\n this.selectedRows = startingRows;\n createDeleteCard();\n }\n });\n }\n\n #getEventDetails(\n path: HTMLElement[],\n e?: PointerEvent\n ): KupDatatableEventHandlerDetails {\n let isHeader: boolean,\n isBody: boolean,\n isFooter: boolean,\n td: HTMLElement,\n textfield: HTMLElement,\n th: HTMLElement,\n tr: HTMLElement,\n filterRemove: HTMLSpanElement;\n if (path) {\n for (let i = path.length - 1; i >= 0; i--) {\n let p = path[i];\n if (!p.tagName) {\n continue;\n }\n switch (p.tagName.toUpperCase()) {\n case 'THEAD': {\n isHeader = true;\n break;\n }\n case 'TBODY': {\n isBody = true;\n break;\n }\n case 'TFOOT': {\n isFooter = true;\n break;\n }\n case 'TD': {\n td = p;\n break;\n }\n case 'TH': {\n th = p;\n break;\n }\n case 'TR': {\n tr = p;\n break;\n }\n default: {\n if (p.classList.contains('f-text-field')) {\n textfield = p;\n } else if (\n p.classList.contains(\n KupThemeIconValues.FILTER_REMOVE.replace(\n '--',\n ''\n )\n )\n ) {\n filterRemove = p;\n }\n break;\n }\n }\n }\n }\n\n let cell: KupDataTableCell = null,\n column: KupDataColumn = null,\n isGroupRow: boolean = false,\n row: KupDataTableRow = null;\n if (isBody) {\n if (tr) {\n if (tr.classList.contains('group')) {\n isGroupRow = true;\n }\n row = tr['data-row'];\n }\n }\n if (isHeader || isBody) {\n if (td) {\n cell = td['data-cell'];\n }\n if (th) {\n cell = th['data-cell'];\n }\n }\n if (isHeader || isBody || isFooter) {\n const columnName = td\n ? td.dataset.column\n : th\n ? th.dataset.column\n : null;\n if (columnName) {\n column = getColumnByName(this.getColumns(), columnName);\n }\n }\n\n return {\n area: isHeader\n ? 'header'\n : isBody\n ? 'body'\n : isFooter\n ? 'footer'\n : null,\n cell: cell ? cell : null,\n column: column ? column : null,\n filterRemove: filterRemove ? filterRemove : null,\n isGroupRow: isGroupRow,\n originalEvent: e,\n row: row ? row : null,\n td: td ? td : null,\n textfield: textfield ? textfield : null,\n th: th ? th : null,\n tr: tr ? tr : null,\n };\n }\n\n #clickHandler(e: PointerEvent): KupDatatableEventHandlerDetails {\n const details: KupDatatableEventHandlerDetails = this.#getEventDetails(\n this.#kupManager.getEventPath(e.target, this.rootElement),\n e\n );\n if (details.area === 'header') {\n if (details.th && details.column) {\n if (details.filterRemove) {\n this.#onRemoveFilter(details.column);\n return details;\n } else if (this.sortEnabled) {\n this.#onColumnSort(e, details.column.name);\n return details;\n }\n }\n } else if (details.area === 'body') {\n if (\n (this.isFocusable || e.ctrlKey || e.metaKey) &&\n details.tr &&\n !details.isGroupRow\n ) {\n const focusEl: HTMLElement =\n this.rootElement.shadowRoot.querySelector('tr.focus');\n if (focusEl) {\n focusEl.classList.remove('focus');\n }\n details.tr.classList.add('focus');\n if (e.ctrlKey || e.metaKey) {\n this.#rowDetail({ ...details.row }, e.clientX, e.clientY);\n return details;\n }\n }\n if (details.tr && details.row && details.isGroupRow) {\n this.#onRowExpand(details.row);\n return details;\n }\n if (details.td && details.row && !details.textfield) {\n this.#onRowClick(details.row, details.td, true);\n return details;\n }\n }\n return details;\n }\n\n #cellActionsMenuHandler(e: PointerEvent): KupDatatableEventHandlerDetails {\n e.stopPropagation();\n const details: KupDatatableEventHandlerDetails = this.#getEventDetails(\n this.#kupManager.getEventPath(e.target, this.rootElement),\n e\n );\n if (details.cell) {\n const cellActions = this.#kupManager.data.cell.buildCellActions(\n details.row,\n details.column,\n this.commands ?? []\n );\n this.#onRowActionExpanderClick(e, details.row, cellActions);\n }\n return details;\n }\n\n #contextMenuHandler(e: PointerEvent): KupDatatableEventHandlerDetails {\n const details: KupDatatableEventHandlerDetails = this.#getEventDetails(\n this.#kupManager.getEventPath(e.target, this.rootElement),\n e\n );\n if (details.area === DataTableAreasEnum.HEADER) {\n if (details.th && details.column) {\n this.openColumnMenu(details.column.name);\n return details;\n }\n } else if (details.area === DataTableAreasEnum.FOOTER) {\n if (details.td && details.column) {\n this.#totalMenuCoords = { x: e.clientX, y: e.clientY };\n this.#onTotalMenuOpen(details.column);\n return details;\n }\n }\n return details;\n }\n\n #dblClickHandler(e: PointerEvent): KupDatatableEventHandlerDetails {\n const details: KupDatatableEventHandlerDetails = this.#getEventDetails(\n this.#kupManager.getEventPath(e.target, this.rootElement),\n e\n );\n if (details.area === 'body') {\n if (this.selection == SelectionMode.MULTIPLE) {\n this.#resetSelectedRows();\n }\n if (\n this.selection == SelectionMode.SINGLE ||\n this.selection == SelectionMode.MULTIPLE\n ) {\n this.#onRowClick(details.row, details.td, false);\n }\n }\n return details;\n }\n\n getVisibleColumns(): Array<KupDataColumn> {\n const visibleColumns = this.getColumns().filter(\n (col) =>\n !this.#kupManager.data.column.isCodVer(col) &&\n (!('visible' in col) || col.visible)\n );\n\n // check grouping\n if (this.#isGrouping()) {\n // filtering column based on group visibility\n return visibleColumns.filter((column) => {\n // check if in group\n let group = null;\n for (let currentGroup of this.groups) {\n if (currentGroup.column === column.name) {\n group = currentGroup;\n break;\n }\n }\n\n if (group) {\n // return true if\n // 1) group obj has not the 'visible' property or\n // 2) group has 'visible' property and it is true\n return !group.hasOwnProperty('visible') || group.visible;\n }\n\n // not in group -> visible\n return true;\n });\n }\n return visibleColumns;\n }\n\n getGroupByName(column: string): GroupObject {\n if (!this.#isGrouping()) {\n return null;\n }\n\n for (let group of this.groups) {\n if (group.column === column) {\n return group;\n }\n }\n\n return null;\n }\n\n getColumnValues(column: KupDataColumn): ValueDisplayedValue[] {\n return this.#filtersRowsInstance.getColumnValues(\n this,\n column,\n this.globalFilterValue,\n this.#filtersColumnMenuInstance\n );\n }\n\n getRows(): Array<KupDataTableRow> {\n return this.data && this.data.rows ? this.data.rows : [];\n }\n\n #initRows(): void {\n this.#filterRows();\n\n this.#footer = calcTotals(\n normalizeRows(this.getColumns(), this.#rows),\n this.totals\n );\n\n this.#groupRows();\n this.#sortRows();\n this.#adjustPaginator();\n\n this.#paginatedRows = paginateRows(\n this.#rows,\n this.currentPage,\n this.currentRowsPerPage,\n this.#isGrouping()\n );\n this.#paginatedRowsLength = this.#paginatedRowsPointLength();\n }\n\n #filterRows(): void {\n this.#rows = filterRows(\n this.getRows(),\n this.filters,\n this.globalFilterValue,\n this.getColumns()\n );\n this.#rowsLength = this.#rowsPointLength();\n }\n\n #isGrouping() {\n return this.groups && this.groups.length > 0;\n }\n\n #hasRowActions() {\n return this.rowActions !== undefined;\n }\n\n #removeGroup(index: number) {\n if (index >= 0) {\n // removing group from prop\n this.groups.splice(index, 1);\n this.groups = [...this.groups];\n }\n }\n\n #hasTotals() {\n return this.totals && Object.keys(this.totals).length > 0;\n }\n\n /**\n * Returns if the current data table must have the with set to auto to make table as large as the sum\n * of the table columns fixed width.\n * Table margin gets set to auto to center it.\n */\n #tableHasAutoWidth(): boolean {\n if (!this.#sizedColumns) {\n return;\n }\n const visibleCols = this.getVisibleColumns();\n // Before checking each column, controls that visible columns are as many as items with custom sizes.\n // If there are more visible columns, it means that the width of the table will be set to auto.\n if (visibleCols.length <= this.#sizedColumns.length) {\n let found = false;\n\n // Each visible column must have its own width for the table to have a auto width\n for (let i = 0; i < visibleCols.length; i++) {\n found = false;\n for (let j = 0; j < this.#sizedColumns.length; j++) {\n if (visibleCols[i].name === this.#sizedColumns[j].name) {\n found = true;\n break;\n }\n }\n if (!found) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n #forceGroupExpansion() {\n this.#rows.forEach((row) => this.#forceRowGroupExpansion(row));\n this.#paginatedRows.forEach((row) => this.#forceRowGroupExpansion(row));\n }\n\n #forceRowGroupExpansion(row: KupDataTableRow) {\n // check if row is group\n if (!row.group) {\n return;\n }\n\n // forcing row expanded\n row.group.expanded = this.expandGroups;\n\n // updating group state\n // check if already present\n let groupState = this.groupState[row.group.id];\n if (!groupState) {\n groupState = {\n expanded: this.expandGroups,\n };\n } else {\n groupState.expanded = this.expandGroups;\n }\n\n this.groupState[row.group.id] = groupState;\n\n if (row.group.children) {\n row.group.children.forEach((childRow) =>\n this.#forceRowGroupExpansion(childRow)\n );\n }\n }\n\n #adjustPaginator() {\n const numberOfRows = this.#rowsLength;\n // check if current page is valid\n const numberOfPages = Math.ceil(numberOfRows / this.currentRowsPerPage);\n if (this.currentPage > numberOfPages) {\n // reset page\n this.currentPage = 1;\n this.resetCurrentPage();\n }\n }\n\n //==== Fixed columns and rows methods ====\n #composeFixedCellStyleAndClass(\n columnCssIndex: number,\n columnCssIndexR: number,\n rowCssIndex: number,\n extraCellsCount: number = 0\n ):\n | undefined\n | {\n fixedCellClasses: GenericObject;\n fixedCellStyle: GenericObject;\n } {\n if (this.#isGrouping()) {\n return undefined;\n }\n\n //-- Controls if there are fixed rows or columns --\n const validFixedColumn: boolean =\n Number.isInteger(this.fixedColumns) &&\n columnCssIndex <= this.fixedColumns + extraCellsCount;\n const validFixedColumnR: boolean =\n this.fixedColumnsR &&\n Number.isInteger(this.fixedColumnsR) &&\n columnCssIndexR >\n this.getVisibleColumns().length - this.fixedColumnsR;\n const validFixedRowIndex =\n Number.isInteger(this.fixedRows) &&\n rowCssIndex > 0 &&\n rowCssIndex <= this.fixedRows;\n\n // When the cell is not valid to be either into a fixed column or into a fixed row, returns null.\n if (!validFixedRowIndex && !validFixedColumn && !validFixedColumnR) {\n return undefined;\n }\n\n const fixedCellClasses: GenericObject = {},\n fixedCellStyle: GenericObject = {};\n\n if (validFixedColumn) {\n fixedCellClasses[FixedCellsClasses.columns] = validFixedColumn;\n fixedCellClasses['show-column-separator'] =\n ShowGrid.COMPLETE === this.showGrid ||\n ShowGrid.COL === this.showGrid;\n fixedCellStyle['left'] =\n 'var(' + FixedCellsCSSVarsBase.columns + columnCssIndex + ')';\n }\n\n if (validFixedColumnR) {\n const prog =\n columnCssIndexR - (this.getVisibleColumns().length - 1);\n const progIdx = prog - this.fixedColumnsR;\n const absIdx = Math.abs(progIdx);\n fixedCellClasses[FixedCellsClasses.columnsR] = validFixedColumnR;\n fixedCellClasses['show-column-separator'] =\n ShowGrid.COMPLETE === this.showGrid ||\n ShowGrid.COL === this.showGrid;\n fixedCellStyle['right'] =\n 'var(' + (FixedCellsCSSVarsBase.columnsR + absIdx) + ')'; // right value assignment must be reversed\n }\n\n if (validFixedRowIndex) {\n fixedCellClasses[FixedCellsClasses.rows] = !!validFixedRowIndex;\n fixedCellClasses['show-row-separator'] =\n ShowGrid.COMPLETE === this.showGrid ||\n ShowGrid.ROW === this.showGrid;\n fixedCellStyle['top'] =\n 'var(' + FixedCellsCSSVarsBase.rows + rowCssIndex + ')';\n }\n\n return {\n fixedCellClasses,\n fixedCellStyle,\n };\n }\n\n #updateFixedRowsAndColumnsCssVariables(): boolean {\n // [ffbf] - Using getBoundingClientRect is mandatory since Firefox return a wrong value for ele.offsetHeight and witdh values\n\n // When grouping, the fixed rows and columns are not sticky\n if (this.#isGrouping() || !this.#tableRef) return false;\n let toRet: boolean = false;\n\n if (this.fixedRows >= 1) {\n let currentRow: HTMLTableRowElement = this.#tableRef.querySelector(\n 'tbody > tr:first-of-type'\n );\n // The height must start from the height of the header. BUT not on Safari.\n // Safari handles the sticky position on the tables in a different way, making it start from the tbody element\n // and not on the table with a specified position of sticky. There fore in that case we must set initial height to 0.\n let previousHeight: number = !this.#isSafariBrowser\n ? (\n this.#tableRef.querySelector(\n 'thead > tr:first-of-type > th:first-of-type'\n ) as HTMLTableCellElement\n ).getBoundingClientRect().height // [ffbf]\n : 0;\n\n // [CSSCount] - I must start from 1 since we are referencing html elements e not array (with CSS selectors starting from 1)\n for (let i = 1; i <= this.fixedRows && currentRow; i++) {\n this.#tableAreaRef.style.setProperty(\n FixedCellsCSSVarsBase.rows + i,\n previousHeight + 'px'\n );\n previousHeight += (\n currentRow.children[0] as HTMLTableCellElement\n ).getBoundingClientRect().height; // [ffbf]\n currentRow =\n currentRow.nextElementSibling as HTMLTableRowElement;\n }\n toRet = true;\n }\n\n if (this.fixedColumns >= 1) {\n let currentCell: HTMLTableCellElement =\n this.#tableRef.querySelector(\n 'tbody > tr:first-of-type > td:first-of-type'\n );\n let previousWidth: number = 0;\n const totalFixedColumns =\n this.fixedColumns +\n (this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(\n this.commands\n )\n ? 1\n : 0) +\n (this.selection === SelectionMode.MULTIPLE_CHECKBOX ? 1 : 0);\n\n // @See [CSSCount]\n for (let i = 1; i <= totalFixedColumns && currentCell; i++) {\n this.#tableAreaRef.style.setProperty(\n FixedCellsCSSVarsBase.columns + i,\n previousWidth + 'px'\n );\n previousWidth += currentCell.getBoundingClientRect().width; // [ffbf]\n currentCell =\n currentCell.nextElementSibling as HTMLTableCellElement;\n }\n toRet = true;\n }\n\n if (this.fixedColumnsR >= 1) {\n let currentCell: HTMLTableCellElement =\n this.#tableRef.querySelector(\n 'tbody > tr:first-of-type > td:last-of-type'\n );\n let previousWidth = 0;\n\n for (let i = 1; i <= this.fixedColumnsR && currentCell; i++) {\n this.#tableAreaRef.style.setProperty(\n FixedCellsCSSVarsBase.columnsR + i,\n previousWidth + 'px'\n );\n previousWidth += currentCell.getBoundingClientRect().width;\n currentCell =\n currentCell.previousElementSibling as HTMLTableCellElement;\n }\n toRet = true;\n }\n\n return toRet;\n }\n\n //======== Event Listeners ========\n #onColumnSort({ ctrlKey }: PointerEvent, columnName: string) {\n // check if columnName is already in sort array\n let i = 0;\n for (; i < this.sort.length; i++) {\n const sortObj = this.sort[i];\n if (sortObj.column === columnName) {\n break;\n }\n }\n\n if (i < this.sort.length) {\n // already in array... switching sort\n const sortObj = this.sort[i];\n\n const newSortObj: SortObject = {\n ...sortObj,\n sortMode:\n sortObj.sortMode === SortMode.A ? SortMode.D : SortMode.A,\n };\n\n if (ctrlKey) {\n const newSort = [...this.sort];\n newSort[i] = newSortObj;\n this.sort = newSort;\n } else {\n this.sort = [newSortObj];\n }\n } else {\n const sortObj: SortObject = {\n column: columnName,\n sortMode: SortMode.A,\n };\n\n // if CTRL is pressed, push to array\n // else, replace current array\n if (ctrlKey) {\n this.sort = [...this.sort, sortObj];\n } else {\n this.sort = [sortObj];\n }\n }\n }\n\n #onRemoveFilter(column: KupDataColumn) {\n // resetting current page\n this.resetCurrentPage();\n const newFilters: GenericFilter = { ...this.filters };\n this.#filtersColumnMenuInstance.removeFilter(newFilters, column.name);\n this.filters = newFilters;\n }\n\n #getFilterValueForTooltip(column: KupDataColumn): string {\n return this.#filtersColumnMenuInstance.getFilterValueForTooltip(\n this.filters,\n column\n );\n }\n\n #onGlobalFilterChange(inputEl: EventTarget) {\n this.resetCurrentPage();\n if (inputEl) {\n const el = inputEl as HTMLInputElement;\n this.globalFilterValue = el.value;\n } else {\n this.globalFilterValue = '';\n }\n }\n\n #handlePageChange(pageNumber: number) {\n const newPage = pageChange(\n pageNumber,\n this.#rowsLength,\n this.currentRowsPerPage\n );\n if (newPage) {\n this.currentPage = newPage;\n }\n }\n\n #handleRowsPerPageChange(rowsNumber: number) {\n const newRows = rowsPerPageChange(rowsNumber, this.#rowsLength);\n if (newRows) {\n this.currentRowsPerPage = newRows;\n this.#adjustPaginator();\n }\n }\n\n #onRowClick(row: KupDataTableRow, td: HTMLElement, emitEvent?: boolean) {\n // selecting row\n if (!row.unselectable) {\n switch (this.selection) {\n case SelectionMode.MULTIPLE:\n if (this.selectedRows.includes(row)) {\n const selectedRowsCopy = [...this.selectedRows];\n var index = selectedRowsCopy.indexOf(row);\n if (index !== -1) {\n selectedRowsCopy.splice(index, 1);\n }\n this.selectedRows = [...selectedRowsCopy];\n } else {\n this.selectedRows = [...this.selectedRows, row];\n }\n break;\n case SelectionMode.SINGLE:\n this.selectedRows = [row];\n break;\n default:\n break;\n }\n }\n\n // find clicked column\n const clickedColumn: string = td.dataset.column;\n\n // selecting clicked column\n if (\n !row.unselectable &&\n this.selection !== SelectionMode.NONE &&\n clickedColumn\n ) {\n this.#deselectColumn(this.selectedColumn);\n this.selectedColumn = clickedColumn;\n this.#selectColumn(this.selectedColumn);\n\n if (emitEvent !== false) {\n // emit event\n this.kupRowSelected.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n clickedRow: row,\n clickedColumn,\n });\n }\n }\n }\n\n #selectColumn(selectedColumn: string) {\n const columnCells = this.rootElement.shadowRoot.querySelectorAll(\n 'td[data-column=\"' + selectedColumn + '\"]'\n );\n for (let i = 0; i < columnCells.length; i++) {\n columnCells[i].classList.add('selected');\n }\n const column = this.rootElement.shadowRoot.querySelector(\n 'th[data-column=\"' + selectedColumn + '\"]'\n );\n if (column) {\n column.classList.add('selected');\n }\n }\n\n #deselectColumn(selectedColumn: string) {\n const columnCells = this.rootElement.shadowRoot.querySelectorAll(\n 'td[data-column=\"' + selectedColumn + '\"]'\n );\n for (let i = 0; i < columnCells.length; i++) {\n columnCells[i].classList.remove('selected');\n }\n const column = this.rootElement.shadowRoot.querySelector(\n 'th[data-column=\"' + selectedColumn + '\"]'\n );\n if (column) {\n column.classList.remove('selected');\n }\n }\n\n #onRowActionExpanderClick(\n e: MouseEvent | PointerEvent,\n row: KupDataTableRow,\n dropDownActions: KupDataRowAction[]\n ) {\n e.stopPropagation();\n this.#dropDownActionCardAnchor = e.target as HTMLElement;\n this.#dropDownActions(dropDownActions, row);\n }\n\n #handleRowSelect(row: KupDataTableRow) {\n const index = this.selectedRows.indexOf(row);\n\n if (index < 0) {\n // adding\n this.selectedRows = [...this.selectedRows, row];\n } else {\n // removing\n this.selectedRows.splice(index, 1);\n this.selectedRows = [...this.selectedRows];\n }\n\n this.kupRowSelected.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n clickedRow: null,\n clickedColumn: null,\n });\n }\n\n #onRowExpand(row: KupDataTableRow) {\n // row should be a 'group' row\n row.group.expanded = !row.group.expanded;\n\n // updating group map\n this.groupState[row.group.id].expanded = row.group.expanded;\n\n // changing group state to trigger rendering\n this.groupState = { ...this.groupState };\n }\n\n #onSelectAll({ target }) {\n if (target.checked) {\n // select all rows\n this.selectedRows = this.#renderedRows;\n // triggering event\n this.kupRowSelected.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n clickedColumn: null,\n clickedRow: null,\n });\n } else {\n // deselect all rows\n this.#resetSelectedRows();\n }\n }\n\n #openTotalMenu(column: KupDataColumn) {\n this.openedTotalMenu = column.name;\n }\n\n #closeTotalMenu() {\n this.openedTotalMenu = null;\n this.#kupManager.removeClickCallback(this.#clickCb);\n }\n\n #isOpenedTotalMenuForColumn(column: string): boolean {\n return this.openedTotalMenu === column;\n }\n\n // utility methods\n #groupRows(): void {\n if (!this.#isGrouping()) {\n return;\n }\n\n this.#rows = groupRows(\n this.getColumns(),\n this.#rows,\n this.groups,\n this.totals\n );\n\n this.#adjustGroupState();\n }\n\n @Method()\n async getInternalState() {\n // TODO - Just for test\n return {\n groups: this.groups,\n filters: this.filters,\n data: this.data,\n };\n }\n\n // Handler for loadMore button is clicked.\n #onLoadMoreClick() {\n let loadItems: number = 0;\n\n switch (this.loadMoreMode) {\n case LoadMoreMode.CONSTANT:\n loadItems = this.loadMoreStep;\n break;\n case LoadMoreMode.CONSTANT_INCREMENT:\n loadItems =\n this.loadMoreStep * (this.#loadMoreEventCounter + 1);\n break;\n case LoadMoreMode.PROGRESSIVE_THRESHOLD:\n loadItems =\n Math.max(\n this.#loadMoreEventPreviousQuantity,\n this.loadMoreStep\n ) * Math.min(this.#loadMoreEventCounter + 1, 2);\n break;\n }\n\n if (loadItems > this.loadMoreLimit) {\n loadItems = this.loadMoreLimit;\n }\n\n this.kupLoadMoreClick.emit({\n comp: this,\n id: this.rootElement.id,\n loadItems: loadItems,\n });\n\n this.#loadMoreEventPreviousQuantity = loadItems;\n this.#loadMoreEventCounter++;\n }\n\n #adjustGroupState(): void {\n if (\n !this.#rows ||\n this.#rowsLength === 0 ||\n !this.#rows[0].hasOwnProperty('group')\n ) {\n // no grouping\n return;\n }\n this.#rows.forEach((r) => this.#adjustGroupStateFromRow(r));\n }\n\n #adjustGroupStateFromRow(row: KupDataTableRow): void {\n if (!row || !row.hasOwnProperty('group')) {\n // not a groping row, nothing to do\n return;\n }\n\n const group = row.group;\n\n // check if already in group state\n const groupFromState = this.groupState[group.id];\n\n if (!groupFromState) {\n // add to state\n this.groupState[group.id] = group;\n } else {\n // update expanded\n group.expanded = groupFromState.expanded;\n }\n\n group.children.forEach((child) => this.#adjustGroupStateFromRow(child));\n }\n\n #sortRows(): void {\n this.#rows = sortRows(this.#rows, this.sort);\n }\n\n #getSortIcon(columnName: string): string {\n // check if column in sort array\n for (let sortObj of this.sort) {\n if (sortObj.column === columnName) {\n return 'A' === sortObj.sortMode\n ? `kup-icon ${KupThemeIconValues.DESCENDING.replace(\n '--',\n ''\n )}`\n : `kup-icon ${KupThemeIconValues.ASCENDING.replace(\n '--',\n ''\n )}`;\n }\n }\n\n // default\n return '';\n }\n\n #getSortDecode(columnName: string): string {\n // check if column in sort array\n for (let sortObj of this.sort) {\n if (sortObj.column === columnName) {\n return 'A' === sortObj.sortMode ? 'Ascending' : 'Descending';\n }\n }\n\n // default\n return 'Sort column';\n }\n\n #calculateColspan() {\n let colSpan = this.getVisibleColumns().length;\n\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n colSpan += 1;\n }\n\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(this.commands)\n ) {\n colSpan += 1;\n }\n\n return colSpan;\n }\n\n #isGroupExpanded({ group }: KupDataTableRow): boolean {\n if (!group) {\n return false;\n }\n\n // check if in group state\n if (this.groupState[group.id]) {\n return this.groupState[group.id].expanded;\n } else {\n return false;\n }\n }\n\n //==== Column sort order methods ====\n #handleColumnSort(\n receivingColumn: KupDataColumn,\n sortedColumn: KupDataColumn\n ) {\n // Get receiving column position\n const receivingColIndex = this.data.columns.findIndex(\n (col) =>\n col.name === receivingColumn.name &&\n col.title === receivingColumn.title\n );\n // Get sorted column current position\n const sortedColIndex = this.data.columns.findIndex(\n (col) =>\n col.name === sortedColumn.name &&\n col.title === sortedColumn.title\n );\n\n // Moves the sortedColumn into the correct position\n if (this.sortableColumnsMutateData) {\n this.kupColumnMove.emit({\n comp: this,\n id: this.rootElement.id,\n sourceColumn: this.data.columns[sortedColIndex],\n targetColumn: this.data.columns[receivingColIndex],\n });\n this.#moveSortedColumns(\n this.data.columns,\n receivingColIndex,\n sortedColIndex\n );\n }\n }\n\n /**\n * After a drop of a column header, if the table can update its own data, does so and triggers rerender.\n * @param columns - The columns to sort\n * @param receivingColumnIndex - The index where the column will be inserted\n * @param sortedColumnIndex - The index where the column will be removed\n */\n #moveSortedColumns(\n columns: KupDataColumn[],\n receivingColumnIndex: number,\n sortedColumnIndex: number\n ) {\n const remove = columns.splice(sortedColumnIndex, 1);\n columns.splice(receivingColumnIndex, 0, remove[0]);\n this.refresh();\n }\n\n #handleUpdateClick = (command?: KupDataCell) => {\n this.kupUpdate.emit({\n comp: this,\n id: this.rootElement.id,\n originalData: this.#originalDataLoaded,\n updatedData: getDiffData(this.#originalDataLoaded, this.data, true),\n command: command,\n });\n };\n\n @Method() async defaultSortingFunction(\n columns: KupDataColumn[],\n receivingColumnIndex: number,\n sortedColumnIndex: number,\n useNewObject: boolean = false\n ) {\n const toSort = !useNewObject ? columns : [...columns];\n\n this.#moveSortedColumns(\n toSort,\n receivingColumnIndex,\n sortedColumnIndex\n );\n\n return toSort;\n }\n\n #applyLineBreaks(content: string) {\n // We add a break line before every chunk\n return content\n .split(this.lineBreakCharacter)\n .map((chunk, index) => (index !== 0 ? [<br />, chunk] : chunk));\n }\n\n //======== render methods ========\n /**\n * Given the parameters return the classes and style for each table header cell\n * @param columnName - The name of the columns currently being examinated\n * @param columnIndex - The index of the current column\n * @param extraCells - the extra cells rendered into the table\n */\n #composeHeaderCellClassAndStyle(\n columnIndex: number,\n extraCells: number = 0,\n column: KupDataColumn\n ): {\n columnClass: GenericObject;\n thStyle: GenericObject;\n } {\n let columnClass: GenericObject = { ['header-cell']: true },\n thStyle: GenericObject = column.style ? { ...column.style } : {};\n\n if (\n this.#kupManager.objects.isBar(column.obj) ||\n this.#kupManager.objects.isButton(column.obj) ||\n this.#kupManager.objects.isChart(column.obj) ||\n this.#kupManager.objects.isCheckbox(column.obj) ||\n this.#kupManager.objects.isImage(column.obj) ||\n this.#kupManager.objects.isIcon(column.obj) ||\n this.#kupManager.objects.isProgressBar(column.obj) ||\n this.#kupManager.objects.isRadio(column.obj) ||\n this.#kupManager.objects.isVoCodver(column.obj)\n ) {\n columnClass['header-cell--centered'] = true;\n }\n\n if (this.#kupManager.objects.isNumber(column.obj)) {\n columnClass['header-cell--is-number'] = true;\n }\n\n if (this.#kupManager.objects.isIcon(column.obj)) {\n columnClass['header-cell--is-icon'] = true;\n }\n // For fixed cells styles and classes\n const fixedCellStyle = this.#composeFixedCellStyleAndClass(\n columnIndex + 1 + extraCells,\n columnIndex + 1,\n 0,\n extraCells\n );\n if (fixedCellStyle) {\n columnClass = {\n ...columnClass,\n ...fixedCellStyle.fixedCellClasses,\n };\n thStyle = {\n ...thStyle,\n ...fixedCellStyle.fixedCellStyle,\n };\n }\n\n return {\n columnClass,\n thStyle,\n };\n }\n\n #renderHeader() {\n let specialExtraCellsCount: number = 0;\n\n // Renders multiple selection column\n let multiSelectColumn = null;\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n specialExtraCellsCount++;\n const selectionStyleAndClass = this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n 0,\n 0,\n specialExtraCellsCount - 1\n );\n\n const style = {\n width: '30px',\n margin: '0 auto',\n ...(selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : {}),\n };\n\n multiSelectColumn = (\n <th\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : {}\n }\n style={style}\n >\n <kup-checkbox\n onkup-checkbox-change={(e) => this.#onSelectAll(e)}\n title={\n this.#kupManager.language.translate(\n KupLanguageRow.SELECTED\n ) +\n `: ${this.selectedRows.length},` +\n this.#kupManager.language.translate(\n KupLanguageRow.RENDERED\n ) +\n `: ${this.#renderedRows.length}`\n }\n checked={\n this.selectedRows.length > 0 &&\n this.selectedRows.length ===\n this.#renderedRows.length\n }\n />\n </th>\n );\n }\n\n // Renders action column\n let actionsColumn = null;\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(this.commands)\n ) {\n specialExtraCellsCount++;\n const selectionStyleAndClass = this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n 0,\n 0,\n specialExtraCellsCount - 1\n );\n\n actionsColumn = (\n <th\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : {}\n }\n style={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : {}\n }\n />\n );\n }\n\n // Renders normal cells\n const dataColumns = this.getVisibleColumns().map(\n (column, columnIndex) => {\n const { columnClass, thStyle } =\n this.#composeHeaderCellClassAndStyle(\n columnIndex,\n specialExtraCellsCount,\n column\n );\n\n let filter = null;\n\n if (\n this.#filtersColumnMenuInstance.hasFiltersForColumn(\n this.filters,\n column\n )\n ) {\n const svgLabel =\n this.#kupManager.language.translate(\n KupLanguageGeneric.REMOVE_FILTERS\n ) + `: '${this.#getFilterValueForTooltip(column)}'`;\n filter = (\n <span\n title={svgLabel}\n class={`kup-icon ${KupThemeIconValues.FILTER_REMOVE.replace(\n '--',\n ''\n )}`}\n ></span>\n );\n }\n\n let sortIcon = null;\n\n let iconClass = this.#getSortIcon(column.name);\n if (iconClass !== '') {\n sortIcon = (\n <span\n class={iconClass}\n title={this.#getSortDecode(column.name)}\n ></span>\n );\n }\n columnClass['header-cell--sortable'] = true;\n\n let keyIcon: HTMLSpanElement = null;\n if (column.isKey) {\n keyIcon = (\n <span\n class={`kup-icon ${KupThemeIconValues.KEY.replace(\n '--',\n ''\n )}`}\n title={this.#kupManager.language.translate(\n KupLanguageRow.KEY\n )}\n ></span>\n );\n }\n\n // Sets custom columns width\n if (this.#sizedColumns) {\n for (let i = 0; i < this.#sizedColumns.length; i++) {\n const currentCol = this.#sizedColumns[i];\n\n if (currentCol.name === column.name) {\n const width = currentCol.size + '';\n if (width.indexOf('ch') < 1) {\n thStyle.width = width;\n thStyle.minWidth = width;\n thStyle.maxWidth = width;\n }\n thStyle.overflow = 'hidden';\n break;\n }\n }\n }\n\n return (\n <th\n ref={(el: HTMLElement) => this.#thRefs.push(el)}\n data-cell={column}\n data-column={column.name}\n class={columnClass}\n style={thStyle}\n title={column.name}\n >\n <div class=\"header-cell__content\">\n <span class=\"header-cell__title\">\n {this.#applyLineBreaks(column.title)}\n </span>\n <span class=\"header-cell__icons\">\n {keyIcon}\n {sortIcon}\n {filter}\n </span>\n </div>\n {this.resizableColumns ? (\n <span class=\"header-cell__drag-handler\"></span>\n ) : null}\n </th>\n );\n }\n );\n\n return [multiSelectColumn, actionsColumn, ...dataColumns];\n // return [multiSelectColumn, groupColumn, actionsColumn, ...dataColumns];\n }\n\n #renderStickyHeader() {\n let specialExtraCellsCount: number = 0;\n\n let multiSelectColumn = null;\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n specialExtraCellsCount++;\n const selectionStyleAndClass = this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n 0,\n 0,\n specialExtraCellsCount - 1\n );\n\n const style = {\n width: '30px',\n margin: '0 auto',\n ...(selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : {}),\n };\n multiSelectColumn = (\n <th-sticky\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : null\n }\n style={style}\n >\n <kup-checkbox\n onkup-checkbox-change={(e) => this.#onSelectAll(e)}\n title={\n this.#kupManager.language.translate(\n KupLanguageRow.SELECTED\n ) +\n `: ${this.selectedRows.length},` +\n this.#kupManager.language.translate(\n KupLanguageRow.RENDERED\n ) +\n `: ${this.#renderedRows.length}`\n }\n checked={\n this.selectedRows.length > 0 &&\n this.selectedRows.length ===\n this.#renderedRows.length\n }\n />\n </th-sticky>\n );\n }\n\n // Empty cell for the actions\n let actionsColumn = null;\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(this.commands)\n ) {\n specialExtraCellsCount++;\n const selectionStyleAndClass = this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n 0,\n 0,\n specialExtraCellsCount - 1\n );\n\n actionsColumn = (\n <th-sticky\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : null\n }\n style={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : null\n }\n />\n );\n }\n\n // Composes normal header cells\n const dataColumns = this.getVisibleColumns().map(\n (column, columnIndex) => {\n const { columnClass, thStyle } =\n this.#composeHeaderCellClassAndStyle(\n columnIndex,\n specialExtraCellsCount,\n column\n );\n\n return (\n <th-sticky class={columnClass} style={thStyle}>\n <div class=\"header-cell__content\">\n <span class=\"header-cell__title\">\n {this.#applyLineBreaks(column.title)}\n </span>\n </div>\n </th-sticky>\n );\n }\n );\n\n return [multiSelectColumn, actionsColumn, ...dataColumns];\n }\n\n areTotalsSelected(column: KupDataColumn): boolean {\n return this.totals && this.totals[column.name] ? true : false;\n }\n\n onTotalsChange(event, column) {\n // close menu\n this.#closeTotalMenu();\n if (column) {\n // must do this\n // otherwise does not fire the watcher\n const totalsCopy = { ...this.totals };\n const value = event.detail.selected.id;\n if (value === TotalLabel.CANC) {\n if (this.totals && this.totals[column.name]) {\n delete totalsCopy[column.name];\n }\n } else {\n totalsCopy[column.name] = value;\n }\n this.totals = totalsCopy;\n }\n }\n\n #totalMenuPosition() {\n if (this.rootElement.shadowRoot) {\n const menu: HTMLKupListElement =\n this.rootElement.shadowRoot.querySelector('#totals-menu');\n if (menu) {\n this.#kupManager.dynamicPosition.register(\n menu as unknown as KupDynamicPositionElement,\n this.#totalMenuCoords,\n 0,\n undefined,\n true\n );\n this.#clickCb = {\n cb: () => {\n this.#closeTotalMenu();\n },\n el: menu,\n };\n this.#kupManager.addClickCallback(this.#clickCb, true);\n this.#kupManager.dynamicPosition.start(\n menu as unknown as KupDynamicPositionElement\n );\n menu.menuVisible = true;\n }\n }\n }\n\n #onTotalMenuOpen(column: KupDataColumn) {\n this.#closeTotalMenu();\n this.#openTotalMenu(column);\n }\n\n renderFooter() {\n let extraCells = 0;\n\n // Composes initial cells if necessary\n let selectRowCell = null;\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n extraCells++;\n const fixedCellStyle = this.#composeFixedCellStyleAndClass(\n extraCells,\n 0,\n 0,\n extraCells\n );\n\n selectRowCell = (\n <td\n class={\n fixedCellStyle ? fixedCellStyle.fixedCellClasses : null\n }\n style={\n fixedCellStyle ? fixedCellStyle.fixedCellStyle : null\n }\n />\n );\n }\n\n // Action cell\n let actionsCell = null;\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(this.commands)\n ) {\n extraCells++;\n const selectionStyleAndClass = this.#composeFixedCellStyleAndClass(\n extraCells,\n 0,\n 0,\n extraCells\n );\n actionsCell = (\n <td\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : {}\n }\n style={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : {}\n }\n />\n );\n }\n\n const footerCells = this.getVisibleColumns().map(\n (column: KupDataColumn, columnIndex) => {\n const fixedCellStyle = this.#composeFixedCellStyleAndClass(\n columnIndex + 1 + extraCells,\n columnIndex + 1,\n 0,\n extraCells\n );\n\n let totalMenu = undefined;\n let menuLabel = TotalLabel.CALC;\n const translation = {\n [TotalLabel.AVERAGE]: this.#kupManager.language.translate(\n KupLanguageTotals.AVERAGE\n ),\n [TotalLabel.CALC]: this.#kupManager.language.translate(\n KupLanguageTotals.CALCULATE\n ),\n [TotalLabel.CANC]: this.#kupManager.language.translate(\n KupLanguageTotals.CANCEL\n ),\n [TotalLabel.COUNT]: this.#kupManager.language.translate(\n KupLanguageTotals.COUNT\n ),\n [TotalLabel.DISTINCT]: this.#kupManager.language.translate(\n KupLanguageTotals.DISTINCT\n ),\n [TotalLabel.MATH]: this.#kupManager.language.translate(\n KupLanguageTotals.FORMULA\n ),\n [TotalLabel.MAX]: this.#kupManager.language.translate(\n KupLanguageTotals.MAXIMUM\n ),\n [TotalLabel.MIN]: this.#kupManager.language.translate(\n KupLanguageTotals.MINIMUM\n ),\n [TotalLabel.SUM]: this.#kupManager.language.translate(\n KupLanguageTotals.SUM\n ),\n };\n if (this.totals) {\n const totalValue = this.totals[column.name];\n if (totalValue) {\n if (totalValue.startsWith(TotalMode.MATH)) {\n menuLabel = TotalLabel.MATH;\n } else {\n switch (totalValue) {\n case TotalMode.COUNT:\n menuLabel = TotalLabel.COUNT;\n break;\n case TotalMode.DISTINCT:\n menuLabel = TotalLabel.DISTINCT;\n break;\n case TotalMode.SUM:\n menuLabel = TotalLabel.SUM;\n break;\n case TotalMode.AVERAGE:\n menuLabel = TotalLabel.AVERAGE;\n break;\n case TotalMode.MIN:\n menuLabel = TotalLabel.MIN;\n break;\n case TotalMode.MAX:\n menuLabel = TotalLabel.MAX;\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (this.#isOpenedTotalMenuForColumn(column.name)) {\n const listData: KupListNode[] = [\n {\n id: TotalMode.COUNT,\n value: translation[TotalLabel.COUNT],\n },\n {\n id: TotalMode.DISTINCT,\n value: translation[TotalLabel.DISTINCT],\n },\n ];\n if (this.#kupManager.objects.isNumber(column.obj)) {\n // TODO Move these objects in declarations\n listData.push(\n {\n id: TotalMode.SUM,\n separator: true,\n value: translation[TotalLabel.SUM],\n },\n {\n id: TotalMode.AVERAGE,\n value: translation[TotalLabel.AVERAGE],\n },\n {\n id: TotalMode.MIN,\n value: translation[TotalLabel.MIN],\n },\n {\n id: TotalMode.MAX,\n value: translation[TotalLabel.MAX],\n }\n );\n } else if (this.#kupManager.objects.isDate(column.obj)) {\n listData.push(\n {\n id: TotalMode.MIN,\n separator: true,\n value: translation[TotalLabel.MIN],\n },\n {\n id: TotalMode.MAX,\n value: translation[TotalLabel.MAX],\n }\n );\n }\n if (this.totals) {\n const selectedItem: KupListNode = listData.find(\n (item) => item.id === this.totals[column.name]\n );\n if (selectedItem) {\n selectedItem.selected = true;\n listData.push({\n id: TotalLabel.CANC,\n separator: true,\n value: translation[TotalLabel.CANC],\n });\n }\n }\n\n totalMenu = (\n <kup-list\n class={`total-menu`}\n data={listData}\n id=\"totals-menu\"\n is-menu\n keyboardNavigation={true}\n menu-visible\n onkup-list-click={(event) =>\n this.onTotalsChange(event, column)\n }\n tabindex={0}\n ></kup-list>\n );\n }\n\n // TODO please use getValueForDisplay\n let value;\n const footerValue = this.#footer[column.name];\n if (\n menuLabel === TotalLabel.COUNT ||\n menuLabel === TotalLabel.DISTINCT\n ) {\n value = footerValue;\n } else if (\n (menuLabel === TotalLabel.MAX ||\n menuLabel === TotalLabel.MIN) &&\n this.#kupManager.objects.isDate(column.obj)\n ) {\n if (footerValue) {\n value = footerValue;\n }\n } else {\n value = this.#kupManager.math.numberToFormattedString(\n footerValue,\n column.decimals,\n column.obj ? column.obj.p : ''\n );\n }\n\n return (\n <td\n data-column={column.name}\n class={\n fixedCellStyle && fixedCellStyle.fixedCellClasses\n ? fixedCellStyle.fixedCellClasses\n : ''\n }\n style={\n fixedCellStyle\n ? fixedCellStyle.fixedCellStyle\n : null\n }\n >\n {totalMenu}\n <span\n class=\"totals-value\"\n title={translation[menuLabel]}\n >\n {value}\n </span>\n </td>\n );\n }\n );\n\n const footer = (\n <tfoot>\n <tr>\n {selectRowCell}\n {actionsCell}\n {footerCells}\n </tr>\n </tfoot>\n );\n\n return footer;\n }\n\n #renderRow(\n row: KupDataTableRow,\n level = 0,\n rowCssIndex: number = 0,\n previousRow?: KupDataTableRow\n ) {\n const visibleColumns = this.getVisibleColumns();\n let rowActionsCount: number = 0;\n\n if (row.group) {\n // Composes the label the group must display\n let composedGroupLabel: string;\n switch (this.groupLabelDisplay) {\n case GroupLabelDisplayMode.LABEL:\n composedGroupLabel = row.group.columnLabel;\n break;\n case GroupLabelDisplayMode.VALUE:\n composedGroupLabel = row.group.label;\n break;\n case GroupLabelDisplayMode.BOTH:\n default:\n composedGroupLabel =\n row.group.columnLabel + ' = ' + row.group.label;\n break;\n }\n\n if (row.group.children.length === 0) {\n // empty group\n return null;\n }\n\n const iconClass = row.group.expanded\n ? `kup-icon ${KupThemeIconValues.EXPANDED.replace('--', '')}`\n : `kup-icon ${KupThemeIconValues.COLLAPSED.replace('--', '')}`;\n\n const jsxRows = [];\n\n const indent = [];\n for (let i = 0; i < level; i++) {\n indent.push(<span class=\"indent\" />);\n }\n\n if (this.#hasTotals()) {\n //const colSpan = this.multiSelection ? 2 : 1;\n const cells = [];\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(\n this.commands\n )\n ) {\n cells.push(<td></td>);\n }\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n cells.push(<td></td>);\n }\n // adding 'grouping' cell\n const grouplabelcell = (\n <td colSpan={this.#calculateColspan()}>\n <span class=\"group-cell-content\">\n {indent}\n <span class={iconClass}></span>\n <span class=\"text\">{composedGroupLabel}</span>\n </span>\n </td>\n );\n\n // adding 'totals grouping' cells\n for (let column of visibleColumns) {\n let totalClass = 'total';\n if (row.group.totals[column.name] < 0) {\n totalClass += ' negative-number';\n }\n // TODO please use getValueForDisplay\n let value;\n const totalValue = row.group.totals[column.name];\n if (\n this.totals[column.name] === TotalMode.COUNT ||\n this.totals[column.name] === TotalMode.DISTINCT\n ) {\n value = totalValue;\n } else {\n if (this.#kupManager.objects.isDate(column.obj)) {\n if (totalValue) {\n if (\n this.#kupManager.dates.isIsoDate(totalValue)\n ) {\n value =\n this.#kupManager.dates.format(\n totalValue\n );\n } else {\n console.warn(`invalid date: ${totalValue}`);\n }\n }\n } else {\n value =\n this.#kupManager.math.numberToFormattedString(\n totalValue,\n column.decimals,\n column.obj ? column.obj.p : ''\n );\n }\n }\n cells.push(<td class={totalClass}>{value}</td>);\n }\n\n jsxRows.push(\n <tr\n ref={(el: HTMLElement) => this.#rowsRefs.push(el)}\n data-row={row}\n class=\"group group-label\"\n >\n {grouplabelcell}\n </tr>\n );\n\n // if group is expanded, add children\n\n if (this.#isGroupExpanded(row)) {\n row.group.children\n // We must pass the previous element of the array to check if we must hide or display the value of the cell\n // When the column has specified the parameter hideValuesRepetitions\n .map((row, groupRowIndex, currentArray) =>\n this.#renderRow(\n row,\n level + 1,\n groupRowIndex,\n groupRowIndex > 0\n ? currentArray[groupRowIndex - 1]\n : undefined\n )\n )\n .forEach((jsxRow) => {\n if (Array.isArray(jsxRow)) {\n jsxRow.forEach((jr) => jsxRows.push(jr));\n } else {\n jsxRows.push(jsxRow);\n }\n });\n }\n\n jsxRows.push(\n <tr\n ref={(el: HTMLElement) => this.#rowsRefs.push(el)}\n data-row={row}\n class=\"group group-total\"\n >\n {cells}\n </tr>\n );\n } else {\n jsxRows.push(\n <tr\n ref={(el: HTMLElement) => this.#rowsRefs.push(el)}\n data-row={row}\n class=\"group\"\n >\n <td colSpan={this.#calculateColspan()}>\n <span class=\"group-cell-content\">\n {indent}\n <span class={iconClass}></span>\n <span class=\"text\">{composedGroupLabel}</span>\n </span>\n </td>\n </tr>\n );\n if (this.#isGroupExpanded(row)) {\n row.group.children\n // We must pass the previous element of the array to check if we must hide or display the value of the cell\n // When the column has specified the parameter hideValuesRepetitions\n .map((row, groupRowIndex, currentArray) =>\n this.#renderRow(\n row,\n level + 1,\n groupRowIndex,\n groupRowIndex > 0\n ? currentArray[groupRowIndex - 1]\n : undefined\n )\n )\n .forEach((jsxRow) => {\n if (Array.isArray(jsxRow)) {\n jsxRow.forEach((jr) => jsxRows.push(jr));\n } else {\n jsxRows.push(jsxRow);\n }\n });\n }\n }\n\n // grouping row\n return jsxRows;\n } else {\n //-- The row is normal --\n /**\n * How many control cells there are before the effective cells\n */\n let specialExtraCellsCount: number = 0;\n\n // Renders selection cell\n // IF active, this must be the first cell\n // This is a special cell\n let selectRowCell = null;\n if (this.selection === SelectionMode.MULTIPLE_CHECKBOX) {\n specialExtraCellsCount++;\n const selectionStyleAndClass =\n this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n rowCssIndex,\n specialExtraCellsCount - 1\n );\n const props: FCheckboxProps = {\n checked: this.selectedRows.includes(row),\n onChange: () => {\n this.#handleRowSelect(row);\n },\n };\n\n selectRowCell = (\n <td\n row-select-cell\n class={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellClasses\n : null\n }\n style={\n selectionStyleAndClass\n ? selectionStyleAndClass.fixedCellStyle\n : null\n }\n >\n <FCheckbox {...props} />\n </td>\n );\n }\n\n // Renders action cell\n // If active, this can be either the first or second cell\n let rowActionsCell = null;\n if (\n this.#hasRowActions() ||\n this.#kupManager.data.column.hasCodVer(this.data.columns) ||\n this.#kupManager.data.action.hasCommandsWithBlankObj(\n this.commands\n )\n ) {\n // Increments\n specialExtraCellsCount++;\n const actionsStyleAndClass =\n this.#composeFixedCellStyleAndClass(\n specialExtraCellsCount,\n rowCssIndex,\n specialExtraCellsCount - 1\n );\n\n rowActionsCount += this.rowActions?.length || 0;\n\n const actionsOnRow: FImageProps[] = [];\n if (row.actions) {\n rowActionsCount += row.actions.length;\n } else {\n const rowActions =\n this.#kupManager.data.row.buildRowActions(\n row,\n this.data.columns,\n this.rowActions,\n this.commands ?? []\n );\n\n if (\n this.#kupManager.data.action.checkEveryActionHasOnlyIcon(\n rowActions\n ) ||\n (rowActions.length === 1 && rowActions[0].icon)\n ) {\n rowActions.forEach((action, index) => {\n const imageProp: FImageProps =\n this.#kupManager.data.action.buildImageProp(\n action.icon,\n action.text || action.column?.title || '',\n 'action',\n () => {\n this.kupRowActionItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n row: row,\n obj: action.obj,\n cell: action.cell,\n type: action.type,\n index: index,\n column: action.column,\n });\n }\n );\n actionsOnRow.push(imageProp);\n });\n } else {\n const textPopulatedRowActions =\n this.#kupManager.data.action.createActionsWithText(\n rowActions\n );\n\n const imageProp: FImageProps =\n this.#kupManager.data.action.buildImageProp(\n 'chevron-down',\n this.#kupManager.language.translate(\n KupLanguageGeneric.EXPAND\n ),\n 'expander',\n (e) => {\n this.#onRowActionExpanderClick(\n e,\n row,\n textPopulatedRowActions\n );\n }\n );\n\n actionsOnRow.push(imageProp);\n }\n rowActionsCount++;\n }\n\n rowActionsCell = (\n <td\n row-action-cell\n class={\n actionsStyleAndClass\n ? actionsStyleAndClass.fixedCellClasses\n : null\n }\n style={\n actionsStyleAndClass\n ? actionsStyleAndClass.fixedCellStyle\n : null\n }\n >\n {actionsOnRow.map((action) => (\n <FImage\n {...action}\n color=\"var(--kup-text-secondary)\"\n ></FImage>\n ))}\n </td>\n );\n }\n\n // Renders plain rows cells\n const cells = visibleColumns.map((currentColumn, cellIndex) => {\n const { name, hideValuesRepetitions } = currentColumn;\n const indend = [];\n if (cellIndex === 0) {\n for (let i = 0; i < level; i++) {\n indend.push(<span class=\"indent\" />);\n }\n }\n\n const cell = row.cells[name] ? row.cells[name] : null;\n if (!cell) {\n if (this.autoFillMissingCells) {\n return <td data-column={name} data-row={row}></td>;\n } else {\n return null;\n }\n }\n const fcell = {\n ...this.#kupManager.data.cell.buildFCell(\n cell,\n currentColumn,\n row\n ),\n component: this,\n density: this.density,\n editable: this.editableData || this.updatableData,\n indents: indend,\n previousValue:\n hideValuesRepetitions && previousRow\n ? previousRow.cells[name].value\n : undefined,\n renderKup: this.lazyLoadCells,\n cellActionIcon: this.#kupManager.data.cell.hasActionCell(\n cell,\n this.commands ?? []\n )\n ? {\n onClick: (e: PointerEvent) => {\n this.kupCellActionIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.#cellActionsMenuHandler(e),\n });\n },\n }\n : null,\n };\n\n const jsxCell = <FCell {...fcell}></FCell>;\n\n // Classes which will be set onto the single data-table cell;\n\n let cellClass: GenericObject = null;\n let cellStyle: GenericObject = { ...cell.style };\n\n //-- For fixed cells --\n const fixedStyles = this.#composeFixedCellStyleAndClass(\n cellIndex + 1 + specialExtraCellsCount,\n cellIndex + 1,\n rowCssIndex,\n specialExtraCellsCount\n );\n if (fixedStyles) {\n cellStyle = Object.assign(\n cellStyle ? cellStyle : {},\n fixedStyles.fixedCellStyle\n );\n cellClass = {\n ...cellClass,\n ...fixedStyles.fixedCellClasses,\n };\n }\n\n // Controls if there are columns with a specified width\n if (this.#sizedColumns) {\n let colWidth: string = '';\n\n // Search if this column has a specified width\n for (let j = 0; j < this.#sizedColumns.length; j++) {\n if (name === this.#sizedColumns[j].name) {\n colWidth = this.#sizedColumns[j].size;\n break;\n }\n }\n\n // Specific width has been found\n if (colWidth) {\n if (!cellStyle) {\n cellStyle = {};\n }\n\n // Sets the width.\n // Search for \"auto-width\" class inside the scss file of this component for more details about this\n cellStyle['max-width'] = colWidth;\n cellStyle['min-width'] = colWidth;\n cellStyle['width'] = colWidth;\n }\n }\n let eventHandlers = undefined;\n let title: string = undefined;\n\n cellClass = {\n ...cellClass,\n };\n\n return (\n <td\n title={title}\n colSpan={\n cell.span && cell.span.col ? cell.span.col : null\n }\n rowSpan={\n cell.span && cell.span.row ? cell.span.row : null\n }\n data-cell={cell}\n data-column={name}\n data-row={row}\n style={cellStyle}\n class={cellClass}\n {...eventHandlers}\n >\n {jsxCell}\n </td>\n );\n });\n // adding row to rendered rows\n this.#renderedRows.push(row);\n\n const rowClass = {\n selected: this.selectedRows.includes(row),\n };\n\n if (row.cssClass) {\n rowClass[row.cssClass] = true;\n }\n\n return (\n <tr\n ref={(el: HTMLElement) => this.#rowsRefs.push(el)}\n data-row={row}\n class={rowClass}\n >\n {selectRowCell}\n {rowActionsCell}\n {cells}\n </tr>\n );\n }\n }\n\n #onCustomSettingsClick() {\n if (!this.openedCustomSettings) {\n this.#openCustomSettings();\n } else {\n this.#closeCustomSettings();\n }\n }\n\n #openCustomSettings() {\n this.#customizeTopPanelRef.menuVisible = true;\n this.#customizeTopButtonRef.classList.add('toggled');\n this.#kupManager.dynamicPosition.start(\n this.#customizeTopPanelRef as KupDynamicPositionElement\n );\n this.openedCustomSettings = true;\n if (!this.#clickCbCustomPanel) {\n this.#clickCbCustomPanel = {\n cb: () => {\n this.#closeCustomSettings();\n },\n el: this.#customizeTopPanelRef,\n };\n }\n this.#kupManager.addClickCallback(this.#clickCbCustomPanel, true);\n }\n\n #closeCustomSettings() {\n this.#customizeTopButtonRef.classList.remove('toggled');\n if (this.#customizeTopPanelRef == null) {\n return;\n }\n this.#customizeTopPanelRef.menuVisible = false;\n this.openedCustomSettings = false;\n this.#kupManager.removeClickCallback(this.#clickCbCustomPanel);\n }\n\n #renderPaginator(top: boolean) {\n return (\n <div class=\"paginator-wrapper\">\n <div class=\"paginator-tabs\">\n {this.showLoadMore ||\n (!this.lazyLoadRows &&\n this.#rowsLength > this.rowsPerPage) ? (\n <FPaginator\n id={top ? 'top-paginator' : 'bottom-paginator'}\n currentPage={this.currentPage}\n max={this.#rowsLength}\n perPage={\n this.currentRowsPerPage\n ? this.currentRowsPerPage\n : this.rowsPerPage\n }\n onLoadMore={\n this.showLoadMore\n ? () => {\n this.#onLoadMoreClick();\n }\n : null\n }\n onNextPage={() =>\n this.#handlePageChange(this.currentPage + 1)\n }\n onPrevPage={() =>\n this.#handlePageChange(this.currentPage - 1)\n }\n onPageChange={(\n e: CustomEvent<KupComboboxEventPayload>\n ) => this.#handlePageChange(e.detail.value)}\n onRowsChange={(\n e: CustomEvent<KupComboboxEventPayload>\n ) => this.#handleRowsPerPageChange(e.detail.value)}\n />\n ) : null}\n </div>\n </div>\n );\n }\n\n renderCustomizePanel() {\n let density: HTMLElement = undefined;\n let fontsize: HTMLElement = undefined;\n let grid: HTMLElement = undefined;\n let transpose: HTMLElement = undefined;\n let totalsMatrix: HTMLElement = undefined;\n if (this.openedCustomSettings) {\n density = this.#renderDensityPanel();\n fontsize = this.#renderFontSizePanel();\n grid = this.#renderGridPanel();\n transpose = this.#renderTransposeSwitch();\n if (this.totals && this.groups.length > 0) {\n totalsMatrix = this.#renderTotalsMatrix();\n }\n }\n\n return (\n <kup-card\n customStyle=\"::slotted(kup-switch) { width: max-content !important; } ::slotted(*) { margin: auto !important; } ::slotted(.customize-element) { margin: auto !important; padding: 0 1em 1em 1em !important; width: max-content !important; } ::slotted(.customize-element):nth-child(1) { padding-top: 1em !important; }\"\n isMenu={true}\n layoutFamily={KupCardFamily.FREE}\n ref={(el) => {\n this.#customizeTopPanelRef = el;\n }}\n sizeX=\"360px\"\n sizeY=\"300px\"\n >\n {density}\n {grid}\n {fontsize}\n {transpose}\n <kup-switch\n class=\"customize-element\"\n checked={this.dragEnabled}\n label={this.#kupManager.language.translate(\n KupLanguageGeneric.DRAG_AND_DROP\n )}\n leadingLabel={true}\n onkup-switch-change={() =>\n (this.dragEnabled = !this.dragEnabled)\n }\n ></kup-switch>\n <kup-switch\n class=\"customize-element\"\n checked={this.editableData}\n label={this.#kupManager.language.translate(\n KupLanguageGeneric.EDITABLE\n )}\n leadingLabel={true}\n onkup-switch-change={() =>\n (this.editableData = !this.editableData)\n }\n ></kup-switch>\n <div\n style={{\n display: 'grid',\n 'grid-template-columns': 'repeat(2, auto)',\n width: 'max-content',\n }}\n >\n <kup-button\n title={\n this.#kupManager.language.translate(\n KupLanguageGeneric.TOGGLE\n ) +\n ' Magic Box ' +\n '(' +\n this.#kupManager.language.translate(\n KupLanguageGeneric.EXPERIMENTAL_FEAT\n ) +\n ')'\n }\n icon=\"auto-fix\"\n onkup-button-click={() =>\n this.#kupManager.toggleMagicBox()\n }\n />\n {this.#kupManager.enableExperimentalFeatures &&\n this.#kupManager.openAI &&\n this.#kupManager.openAI.url ? (\n <kup-button\n title={\n this.#kupManager.language.translate(\n KupLanguageGeneric.TOGGLE\n ) +\n ' ' +\n this.#kupManager.language.translate(\n KupLanguageGeneric.AI_ASSISTANT\n ) +\n ' (' +\n this.#kupManager.language.translate(\n KupLanguageGeneric.EXPERIMENTAL_FEAT\n ) +\n ')'\n }\n icon=\"smeup-ai\"\n onkup-button-click={() => {\n this.#kupManager.openAI.show({\n context: this.rootElement.tagName,\n dataset: this.data,\n });\n this.#closeCustomSettings();\n }}\n />\n ) : null}\n </div>\n {totalsMatrix}\n </kup-card>\n );\n }\n\n #columnRemoveArea(): HTMLDivElement {\n return (\n <div\n class=\"droparea__remove\"\n ref={(el) => (this.#removeDropareaRef = el)}\n >\n <FImage\n resource=\"delete\"\n color={`var(${KupThemeColorValues.DANGER})`}\n sizeX=\"30px\"\n sizeY=\"50px\"\n />\n <FImage\n resource=\"delete-empty\"\n color={`var(${KupThemeColorValues.DANGER})`}\n sizeX=\"30px\"\n sizeY=\"50px\"\n />\n </div>\n );\n }\n\n #columnGroupArea(): HTMLDivElement {\n return (\n <div\n class=\"droparea__groups\"\n ref={(el) => (this.#groupsDropareaRef = el)}\n >\n <FImage\n resource=\"bookmark\"\n color={`var(${KupThemeColorValues.TEXT})`}\n sizeX=\"30px\"\n sizeY=\"50px\"\n />\n <FImage\n resource=\"book\"\n color={`var(${KupThemeColorValues.TEXT})`}\n sizeX=\"30px\"\n sizeY=\"50px\"\n />\n </div>\n );\n }\n\n #hideShowColumnDropArea(show: boolean, th?: HTMLElement) {\n if (show && th && (this.removableColumns || this.showGroups)) {\n this.#dropareaRef.classList.add('droparea--visible');\n this.#kupManager.dynamicPosition.register(\n this.#dropareaRef as KupDynamicPositionElement,\n th,\n 10,\n KupDynamicPositionPlacement.TOP\n );\n this.#kupManager.dynamicPosition.start(\n this.#dropareaRef as KupDynamicPositionElement\n );\n this.#dropareaRef.style.marginLeft =\n th.clientWidth / 2 - this.#dropareaRef.clientWidth / 2 + 'px';\n } else {\n this.#dropareaRef.classList.remove('droparea--visible');\n +this.#kupManager.dynamicPosition.stop(\n this.#dropareaRef as KupDynamicPositionElement\n );\n }\n }\n\n #handleColumnGroup(column2group: KupDataColumn) {\n // Get sorted column current position\n this.getVisibleColumns();\n const columnX = this.getVisibleColumns().find(\n (col) =>\n col.name === column2group.name &&\n col.title === column2group.title\n );\n if (columnX) {\n let found: boolean = false;\n for (let i = 0; i < this.groups.length; i++) {\n if (this.groups[i].column == columnX.name) {\n found = true;\n break;\n }\n }\n if (!found) {\n this.groups.push({ column: columnX.name, visible: true });\n this.groups = [...this.groups];\n this.refresh();\n }\n }\n }\n\n #transcodeItem(\n item: string | ShowGrid,\n searchIn: Array<string>,\n returnFrom: Array<string>\n ): string {\n for (let i = 0; i < searchIn.length; i++) {\n const tmpCode = searchIn[i];\n if (tmpCode == item && i < returnFrom.length) {\n return returnFrom[i];\n }\n }\n return item;\n }\n\n #createListData(\n codes: Array<string>,\n icons: Array<string>,\n selectedCode: string\n ): KupListNode[] {\n const listItems: KupListNode[] = [];\n for (let i = 0; i < codes.length; i++) {\n let value: KupLanguageKey = null;\n switch (codes[i]) {\n //This whole customization panel thingy must be purged, for now -- it's ugly\n case 'big':\n value = KupLanguageFontsize.BIG;\n break;\n case 'Col':\n value = KupLanguageGrid.COLUMN;\n break;\n case 'Complete':\n value = KupLanguageGrid.COMPLETE;\n break;\n case 'dense':\n value = KupLanguageDensity.DENSE;\n break;\n case 'medium':\n value = KupLanguageDensity.MEDIUM;\n break;\n case 'None':\n value = KupLanguageGrid.NONE;\n break;\n case 'small':\n value = KupLanguageFontsize.SMALL;\n break;\n case 'Row':\n value = KupLanguageGrid.ROW;\n break;\n case 'wide':\n value = KupLanguageDensity.WIDE;\n break;\n }\n if (value) {\n listItems[i] = {\n icon: icons[i],\n id: codes[i],\n selected: selectedCode == codes[i],\n value: this.#kupManager.language.translate(value),\n };\n }\n }\n return listItems;\n }\n\n #FONTSIZE_CODES: Array<string> = ['small', 'medium', 'big'];\n #FONTSIZE_DECODES: Array<string> = ['Small', 'Medium', 'Big'];\n #FONTSIZE_ICONS: Array<string> = [\n 'format-font-size-decrease',\n 'format-color-text',\n 'format-font-size-increase',\n ];\n\n #getFontSizeCodeFromDecode(decode: string): string {\n return this.#transcodeItem(\n decode,\n this.#FONTSIZE_DECODES,\n this.#FONTSIZE_CODES\n );\n }\n\n #renderFontSizePanel() {\n const listItems: KupListNode[] = this.#createListData(\n this.#FONTSIZE_CODES,\n this.#FONTSIZE_ICONS,\n this.fontsize\n );\n\n const listData = { data: listItems, showIcons: true };\n\n const textfieldData = {\n trailingIcon: true,\n label: this.#kupManager.language.translate(\n KupLanguageFontsize.LABEL\n ),\n icon: 'arrow_drop_down',\n };\n const data = { 'kup-text-field': textfieldData, 'kup-list': listData };\n let text: KupLanguageFontsize = null;\n switch (this.fontsize) {\n //This whole customization panel thingy must be purged, for now -- it's ugly\n case 'big':\n text = KupLanguageFontsize.BIG;\n break;\n case 'medium':\n text = KupLanguageFontsize.MEDIUM;\n break;\n case 'small':\n text = KupLanguageFontsize.SMALL;\n break;\n }\n return (\n <div class=\"customize-element fontsize-panel\">\n <kup-combobox\n isSelect={true}\n data={data}\n initialValue={this.#kupManager.language.translate(text)}\n onkup-combobox-itemclick={(\n e: CustomEvent<KupComboboxEventPayload>\n ) => {\n e.stopPropagation();\n this.fontsize = this.#getFontSizeCodeFromDecode(\n e.detail.node.id\n );\n }}\n />\n </div>\n );\n }\n\n #DENSITY_DECODES: Array<string> = ['Dense', 'Medium', 'Wide'];\n #DENSITY_ICONS: Array<string> = [\n 'format-align-justify',\n 'reorder-horizontal',\n 'view-sequential',\n ];\n\n #getDensityCodeFromDecode(decode: string): string {\n return this.#transcodeItem(decode, this.#DENSITY_DECODES, [\n 'dense',\n 'medium',\n 'wide',\n ]);\n }\n\n #renderDensityPanel() {\n const listItems: KupListNode[] = this.#createListData(\n ['dense', 'medium', 'wide'],\n this.#DENSITY_ICONS,\n this.density\n );\n\n const listData = { data: listItems, showIcons: true };\n\n const textfieldData = {\n trailingIcon: true,\n label: this.#kupManager.language.translate(\n KupLanguageDensity.LABEL\n ),\n icon: 'arrow_drop_down',\n };\n const data = { 'kup-text-field': textfieldData, 'kup-list': listData };\n let text: KupLanguageDensity = null;\n switch (this.density) {\n //This whole customization panel thingy must be purged, for now -- it's ugly\n case 'dense':\n text = KupLanguageDensity.DENSE;\n break;\n case 'medium':\n text = KupLanguageDensity.MEDIUM;\n break;\n case 'wide':\n text = KupLanguageDensity.WIDE;\n break;\n }\n return (\n <div class=\"customize-element density-panel\">\n <kup-combobox\n isSelect={true}\n initialValue={this.#kupManager.language.translate(text)}\n selectMode={ItemsDisplayMode.DESCRIPTION}\n data={data}\n onkup-combobox-itemclick={(\n e: CustomEvent<KupComboboxEventPayload>\n ) => {\n e.stopPropagation();\n this.density = this.#getDensityCodeFromDecode(\n e.detail.node.id\n ) as FCellPadding;\n }}\n />\n </div>\n );\n }\n\n #GRID_CODES: Array<string> = ['Complete', 'Col', 'Row', 'None'];\n #GRID_DECODES: Array<string> = ['Complete', 'Columns', 'Rows', 'None'];\n #GRID_ICONS: Array<string> = [\n 'grid_on',\n 'view_column',\n 'view_headline',\n 'grid_off',\n ];\n\n #getGridCodeFromDecode(decode: string): string {\n return this.#transcodeItem(\n decode,\n this.#GRID_DECODES,\n this.#GRID_CODES\n );\n }\n\n #renderTransposeSwitch() {\n return (\n <div class=\"customize-element grid-panel\">\n <kup-switch\n checked={this.transpose}\n label={this.#kupManager.language.translate(\n KupLanguageGeneric.TRANSPOSE_DATA\n )}\n leadingLabel={true}\n onkup-switch-change={(e: CustomEvent) => {\n e.stopPropagation();\n if (e.detail.value === 'on') {\n this.transpose = true;\n } else {\n this.transpose = false;\n }\n }}\n />\n </div>\n );\n }\n\n #renderTotalsMatrix() {\n return (\n <div class=\"customize-element grid-panel\">\n <kup-button\n title={\n this.#kupManager.language.translate(\n KupLanguageGeneric.TOTALS_TABLE\n ) +\n ' (' +\n this.#kupManager.language.translate(\n KupLanguageGeneric.EXPERIMENTAL_FEAT\n ) +\n ')'\n }\n label={this.#kupManager.language.translate(\n KupLanguageGeneric.TOTALS_TABLE\n )}\n icon=\"exposure\"\n onkup-button-click={() => this.#switchToTotalsMatrix()}\n />\n </div>\n );\n }\n\n #renderGridPanel() {\n const listItems: KupListNode[] = this.#createListData(\n this.#GRID_CODES,\n this.#GRID_ICONS,\n this.showGrid\n );\n\n const listData = { data: listItems, showIcons: true };\n\n const textfieldData = {\n trailingIcon: true,\n label: this.#kupManager.language.translate(KupLanguageGrid.LABEL),\n icon: 'arrow_drop_down',\n };\n const data = { 'kup-text-field': textfieldData, 'kup-list': listData };\n let text: KupLanguageGrid = null;\n switch (this.showGrid) {\n //This whole customization panel thingy must be purged, for now -- it's ugly\n case ShowGrid.COL:\n text = KupLanguageGrid.COLUMN;\n break;\n case ShowGrid.COMPLETE:\n text = KupLanguageGrid.COMPLETE;\n break;\n case ShowGrid.NONE:\n text = KupLanguageGrid.NONE;\n break;\n case ShowGrid.ROW:\n text = KupLanguageGrid.ROW;\n break;\n }\n return (\n <div class=\"customize-element grid-panel\">\n <kup-combobox\n isSelect={true}\n initialValue={this.#kupManager.language.translate(text)}\n data={data}\n onkup-combobox-itemclick={(e: CustomEvent) => {\n e.stopPropagation();\n const grid: any = this.#getGridCodeFromDecode(\n e.detail.value\n );\n this.showGrid = grid;\n }}\n />\n </div>\n );\n }\n\n #renderCommandButton(commandObj: KupDataCommand, styling: FButtonStyling) {\n return (\n <kup-button\n styling={styling}\n onKup-button-click={() => this.#handleUpdateClick(commandObj)}\n keyShortcut={commandObj.data?.keyShortcut}\n icon={commandObj.icon}\n label={commandObj.value}\n />\n );\n }\n\n #renderCommandDropDownButton(\n commandObj: KupDataCommand,\n styling: FButtonStyling\n ) {\n const data = {\n 'kup-list': {\n showIcons: true,\n data: commandObj.children.map((c) => {\n return {\n ...c,\n data: {\n label: c.value,\n ...c.data,\n },\n id: c.obj.k,\n };\n }),\n },\n };\n return (\n <kup-dropdown-button\n {...commandObj.data}\n styling={styling}\n sizing={KupComponentSizing.MEDIUM}\n label={commandObj.value}\n data={data}\n onkup-dropdownbutton-itemclick={(\n e: CustomEvent<KupDropdownButtonEventPayload>\n ) => {\n this.#handleUpdateClick(e.detail.node);\n }}\n ></kup-dropdown-button>\n );\n }\n\n #renderUpdateButtons() {\n const styling: FButtonStyling = FButtonStyling.FLAT;\n\n const createRowWithInputFields = (): KupDataRow => {\n let row: KupDataRow = { cells: {} };\n this.#originalDataLoaded?.columns.forEach((c) => {\n (row.cells[c.name] as Omit<KupDataCell, 'value'>) = {\n shape: FCellShapes.INPUT_FIELD,\n obj: { ...c.obj },\n isEditable: true,\n };\n });\n return row;\n };\n\n const addRowHandler = async () => {\n let newRow: KupDataRow;\n const selectedRows = await this.getSelectedRows();\n if (selectedRows.length > 0) {\n newRow = JSON.parse(JSON.stringify(selectedRows[0]));\n } else if (this.#originalDataLoaded?.rows?.length > 0) {\n newRow = JSON.parse(\n JSON.stringify(this.#originalDataLoaded.rows[0])\n );\n } else {\n newRow = createRowWithInputFields();\n }\n Object.values(newRow.cells).forEach((cell) => {\n if (selectedRows.length == 0) {\n cell.value = '';\n }\n });\n newRow.id = (\n this.#originalDataLoadedMaxId + ++this.#insertCount\n ).toString();\n this.insertNewRow(newRow, true);\n };\n\n const deleteRowHandler = async () => {\n const ids: string[] = (await this.getSelectedRows()).map(\n (row) => row.id\n );\n this.deleteRows(ids);\n };\n\n const addConfirmButton = () => {\n this.#kupManager.keysBinding.register('enter', () =>\n this.#handleUpdateClick()\n );\n commandButtons.push(\n <kup-button\n styling={styling}\n icon=\"check\"\n onKup-button-click={() => {\n this.#handleUpdateClick();\n }}\n label={this.#kupManager.language.translate(\n KupLanguageGeneric.CONFIRM\n )}\n />\n );\n };\n\n const addCommands = () => {\n this.data?.setup?.commands?.forEach((commandObj) => {\n commandButtons.push(\n commandObj?.children && commandObj?.children.length > 0\n ? this.#renderCommandDropDownButton(commandObj, styling)\n : this.#renderCommandButton(commandObj, styling)\n );\n });\n };\n\n const addOperations = () => {\n const operationList = this.data?.setup?.operations;\n const operations = {\n insert: {\n enabled: operationList?.insert,\n icon: 'add',\n title: this.#kupManager.language.translate(\n KupLanguageGeneric.ROW_ADD\n ),\n onClickHandler: () => addRowHandler(),\n },\n delete: {\n enabled: operationList?.delete,\n icon: 'minus',\n title: this.#kupManager.language.translate(\n KupLanguageGeneric.ROW_DELETE\n ),\n onClickHandler: () => deleteRowHandler(),\n },\n };\n\n Object.values(operations)\n .filter((op) => op.enabled)\n .forEach((op) => {\n commandButtons.push(\n <kup-button\n styling={styling}\n icon={op.icon}\n title={op.title}\n onKup-button-click={op.onClickHandler}\n />\n );\n });\n };\n\n let commandButtons = [];\n\n addConfirmButton();\n addCommands();\n addOperations();\n\n return <div class=\"commands\">{commandButtons}</div>;\n }\n\n render() {\n this.#thRefs = [];\n this.#rowsRefs = [];\n this.#renderedRows = [];\n let elStyle = undefined;\n let actionWrapperWidth = undefined;\n this.#sizedColumns = this.#getSizedColumns();\n\n this.#kupManager.keysBinding.unregister('enter');\n\n let rows = null;\n if (this.#paginatedRowsLength === 0) {\n rows = (\n <tr ref={(el: HTMLElement) => this.#rowsRefs.push(el)}>\n <td colSpan={this.#calculateColspan()}>\n {this.emptyDataLabel}\n </td>\n </tr>\n );\n } else {\n rows = [];\n this.#paginatedRows\n // We must pass the previous element of the array to check if we must hide or display the value of the cell\n // When the column has specified the parameter hideValuesRepetitions\n .map((row, rowIndex, currentArray) =>\n this.#renderRow(\n row,\n 0,\n rowIndex + 1,\n rowIndex > 0 ? currentArray[rowIndex - 1] : null\n )\n )\n .forEach((jsxRow) => {\n if (Array.isArray(jsxRow)) {\n jsxRow.forEach((jr) => rows.push(jr));\n } else {\n rows.push(jsxRow);\n }\n });\n }\n\n // header\n // for multi selection purposes, this should be called before this.renderedRows has been evaluated\n const header = this.#renderHeader();\n const stickyHeader = this.#renderStickyHeader();\n\n let paginatorTop = undefined;\n let paginatorBottom = undefined;\n if (\n (!this.lazyLoadRows && this.#rowsLength > this.rowsPerPage) ||\n this.showCustomization ||\n this.showLoadMore\n ) {\n if (\n PaginatorPos.TOP === this.paginatorPos ||\n PaginatorPos.BOTH === this.paginatorPos\n ) {\n paginatorTop = this.#renderPaginator(true);\n }\n\n if (\n PaginatorPos.BOTTOM === this.paginatorPos ||\n PaginatorPos.BOTH === this.paginatorPos\n ) {\n paginatorBottom = this.#renderPaginator(false);\n }\n }\n\n let groupChips = null;\n if (this.#isGrouping()) {\n const chipsData = [];\n for (let index = 0; index < this.groups.length; index++) {\n const group = this.groups[index];\n const column = getColumnByName(this.getColumns(), group.column);\n if (column) {\n chipsData.push({\n value: column.title,\n id: column.name,\n checked: true,\n });\n } else {\n this.#kupManager.debug.logMessage(\n this,\n 'Grouped for a non-existent column! (' +\n group.column +\n ')',\n KupDebugCategory.WARNING\n );\n }\n }\n if (chipsData.length > 0) {\n const props: FChipsProps = {\n data: chipsData,\n id: 'group-chips',\n type: FChipType.INPUT,\n onIconClick: [],\n };\n for (let i = 0; i < chipsData.length; i++) {\n props.onIconClick.push(() => this.#removeGroup(i));\n }\n groupChips = <FChip {...props}></FChip>;\n }\n }\n\n const tableClass = {\n // Class to specify whether the table should have width: auto or not.\n // Mandatory to check with custom column size.\n 'auto-width': this.#tableHasAutoWidth(),\n 'column-separation':\n ShowGrid.COMPLETE === this.showGrid ||\n ShowGrid.COL === this.showGrid,\n // When there are columns with a specified width, we must add table-layout: fixed to force the table to respect them\n 'row-separation':\n ShowGrid.COMPLETE === this.showGrid ||\n ShowGrid.ROW === this.showGrid,\n\n 'persistent-header':\n this.headerIsPersistent &&\n this.tableHeight === undefined &&\n this.tableWidth === undefined,\n\n 'custom-size': !!this.tableHeight || !!this.tableWidth,\n\n 'border-top': !this.showHeader,\n };\n\n const wrapClass = tableClass['auto-width'] ? 'auto-width' : '';\n\n tableClass[`density-${this.density}`] = true;\n tableClass[`fontsize-${this.fontsize}`] = true;\n\n if (this.tableHeight && this.tableHeight !== '100%') {\n elStyle = {\n ...elStyle,\n height: this.tableHeight,\n overflow: 'auto',\n };\n }\n\n if (this.tableWidth && this.tableHeight !== '100%') {\n elStyle = {\n ...elStyle,\n width: this.tableWidth,\n overflow: 'auto',\n };\n actionWrapperWidth = {\n ...actionWrapperWidth,\n width: this.tableWidth,\n overflow: 'auto',\n };\n }\n\n let stickyEl = undefined;\n if (\n this.headerIsPersistent &&\n this.tableHeight === undefined &&\n this.tableWidth === undefined\n ) {\n stickyEl = (\n <sticky-header\n class=\"hover-scrolling-child\"\n hidden={!this.showHeader}\n ref={(el: HTMLTableSectionElement) =>\n (this.#stickyTheadRef = el as any)\n }\n >\n <thead-sticky>\n <tr-sticky>{stickyHeader}</tr-sticky>\n </thead-sticky>\n </sticky-header>\n );\n }\n\n let belowClass = 'below-wrapper';\n if (!!this.tableHeight || !!this.tableWidth) {\n belowClass += ' custom-size';\n }\n\n const autoselectOnAction = (e: CustomEvent<FCellEventPayload>) => {\n if (!this.updatableData) {\n if (e && e.detail && e.detail.row) {\n const row = e.detail.row;\n if (!this.selectedRows.includes(row)) {\n if (\n this.selection ===\n SelectionMode.MULTIPLE_CHECKBOX ||\n this.selection === SelectionMode.MULTIPLE\n ) {\n this.selectedRows.push(row);\n } else {\n this.selectedRows = [row];\n }\n }\n if (e.type === 'kup-cell-input') {\n this.refresh();\n }\n }\n }\n };\n\n const compCreated = (\n <Host\n onKup-cell-input={autoselectOnAction}\n onKup-cell-update={autoselectOnAction}\n >\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n {this.updatableData ? this.#renderUpdateButtons() : null}\n <div id={componentWrapperId} class={wrapClass}>\n <div class=\"group-wrapper\">{groupChips}</div>\n <div class=\"actions-wrapper\" style={actionWrapperWidth}>\n {this.globalFilter ? (\n <div id=\"global-filter\">\n <FTextField\n fullWidth={true}\n icon={KupThemeIconValues.SEARCH}\n label={this.#kupManager.language.translate(\n KupLanguageSearch.SEARCH\n )}\n value={this.globalFilterValue}\n onInput={(event) => {\n const t: EventTarget = event.target;\n window.clearTimeout(\n this.#globalFilterTimeout\n );\n this.#globalFilterTimeout =\n window.setTimeout(\n () =>\n this.#onGlobalFilterChange(\n t\n ),\n 600,\n t\n );\n }}\n />\n </div>\n ) : null}\n <div class=\"above-wrapper paginator-top\">\n {paginatorTop}\n </div>\n {this.insertMode !== '' &&\n this.selectedRows.length > 0 ? (\n <FButton\n icon=\"save\"\n onClick={() => {\n this.kupSave.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n });\n }}\n styling={FButtonStyling.FLAT}\n sizing={KupComponentSizing.MEDIUM}\n title=\"Save\"\n wrapperClass=\"save-button\"\n ></FButton>\n ) : null}\n {this.showDeleteButton &&\n this.selectedRows.length > 0 ? (\n <FButton\n icon=\"delete\"\n onClick={() => {\n this.#rowsDelete();\n }}\n styling={FButtonStyling.FLAT}\n sizing={KupComponentSizing.MEDIUM}\n title=\"Delete selected rows\"\n wrapperClass=\"delete-button\"\n ></FButton>\n ) : null}\n {this.showHistoryButton ? (\n <FButton\n icon=\"history\"\n onClick={() => {\n this.kupHistory.emit({\n comp: this,\n id: this.rootElement.id,\n selectedRows: this.selectedRows,\n });\n }}\n styling={FButtonStyling.FLAT}\n sizing={KupComponentSizing.MEDIUM}\n title=\"History\"\n wrapperClass=\"history-button\"\n ></FButton>\n ) : null}\n {this.insertMode !== '' ? (\n <FButton\n label=\"Crea nuovo\"\n // icon=\"plus\"\n onClick={async () => {\n if (this.insertMode === 'form') {\n this.#rowInsertForm();\n } else {\n this.#insertCount++;\n const cells: KupDataRowCells = {};\n for (\n let index = 0;\n index < this.data.columns.length;\n index++\n ) {\n const column =\n this.data.columns[index];\n cells[column.name] = {\n data: column.cellData\n ? JSON.parse(\n JSON.stringify(\n column.cellData\n )\n )\n : undefined,\n slotData: column.cellSlotData\n ? JSON.parse(\n JSON.stringify(\n column.cellSlotData\n )\n )\n : undefined,\n isEditable:\n column.isKey ||\n column.isEditable,\n obj: { ...column.obj },\n shape: column.shape,\n value: '',\n };\n }\n const row = {\n cells,\n id:\n this.#INSERT_PREFIX +\n this.#insertCount,\n };\n this.data.rows.unshift(row);\n await this.refresh(true);\n }\n }}\n sizing={KupComponentSizing.MEDIUM}\n styling={FButtonStyling.RAISED}\n title=\"Insert row\"\n wrapperClass=\"insert-button\"\n ></FButton>\n ) : null}\n </div>\n <div\n class=\"droparea\"\n ref={(el) => (this.#dropareaRef = el)}\n >\n {this.showGroups ? this.#columnGroupArea() : null}\n {this.removableColumns\n ? this.#columnRemoveArea()\n : null}\n </div>\n <div\n style={elStyle}\n class={belowClass}\n ref={(el: HTMLElement) =>\n (this.#tableAreaRef = el as KupScrollOnHoverElement)\n }\n >\n {this.showCustomization\n ? [\n <div\n class=\"settings-trigger\"\n onClick={() => {\n this.#onCustomSettingsClick();\n }}\n ref={(el) => {\n this.#customizeTopButtonRef =\n el as any;\n }}\n >\n <FImage\n color={`var(${KupThemeColorValues.TITLE})`}\n resource=\"settings\"\n sizeX=\"10px\"\n />\n </div>,\n this.renderCustomizePanel(),\n ]\n : null}\n <table\n class={tableClass}\n ref={(el: HTMLTableElement) =>\n (this.#tableRef = el)\n }\n onMouseLeave={(ev) => {\n ev.stopPropagation();\n }}\n onPointerDown={(e) => {\n this.#lastPointerDetails =\n this.#getEventDetails(\n this.#kupManager.getEventPath(\n e.target,\n this.rootElement\n ),\n e as unknown as Interact.PointerEvent\n );\n }}\n onPointerUp={(e) => {\n this.#lastPointerDetails =\n this.#getEventDetails(\n this.#kupManager.getEventPath(\n e.target,\n this.rootElement\n ),\n e as unknown as Interact.PointerEvent\n );\n }}\n onContextMenu={(e: MouseEvent) => {\n e.preventDefault();\n }}\n >\n <thead\n hidden={!this.showHeader}\n ref={(el) => (this.#theadRef = el as any)}\n >\n <tr>{header}</tr>\n </thead>\n <tbody>{rows}</tbody>\n {this.showFooter || this.#hasTotals()\n ? this.renderFooter()\n : null}\n </table>\n {stickyEl}\n </div>\n {paginatorBottom}\n </div>\n </Host>\n );\n return compCreated;\n }\n\n disconnectedCallback() {\n this.#kupManager.interact.unregister(\n this.#interactableDrag.concat(\n this.#interactableDrop,\n this.#interactableResize,\n this.#interactableTouch\n )\n );\n this.#kupManager.language.unregister(this);\n this.#kupManager.theme.unregister(this);\n const dynamicPositionElements: NodeListOf<KupDynamicPositionElement> =\n this.rootElement.shadowRoot.querySelectorAll(\n '[' + kupDynamicPositionAttribute + ']'\n );\n if (dynamicPositionElements.length > 0) {\n this.#kupManager.dynamicPosition.unregister(\n Array.prototype.slice.call(dynamicPositionElements)\n );\n }\n if (this.#customizeTopPanelRef) {\n this.#customizeTopPanelRef.remove();\n }\n if (this.#columnMenuCard) {\n this.#columnMenuCard.remove();\n }\n if (this.scrollOnHover) {\n this.#kupManager.scrollOnHover.unregister(this.#tableAreaRef);\n }\n this.#kupManager.resize.unobserve(this.rootElement);\n this.kupDidUnload.emit({ comp: this, id: this.rootElement.id });\n }\n}\n","@import 'styles/kup-date-picker-main.scss';\n@import 'styles/kup-date-picker-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n VNode,\n Watch,\n} from '@stencil/core';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n KupDatePickerEventPayload,\n KupDatePickerProps,\n} from './kup-date-picker-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupDatesFormats } from '../../managers/kup-dates/kup-dates-declarations';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport {\n KupCardClickPayload,\n KupCardData,\n KupCardFamily,\n} from '../kup-card/kup-card-declarations';\nimport { getProps } from '../../utils/utils';\n\n@Component({\n tag: 'kup-date-picker',\n styleUrl: 'kup-date-picker.scss',\n shadow: true,\n})\nexport class KupDatePicker {\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() stateSwitcher: boolean = false;\n @State() ISOvalue: string = '';\n @State() notISOvalue: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components.\n * @default null\n */\n @Prop({ mutable: true }) data: Object = null;\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * First day number (0 - sunday, 1 - monday, ...)\n * TODO: manage with kupDates.locale, remove prop\n * @default 1\n */\n @Prop() firstDayIndex: number = 1;\n /**\n * Sets the initial value of the component\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * When set to true, the component will be rendered as an outlined field.\n * @default false\n */\n @Prop() outlined: boolean = false;\n /**\n * Sets the sizing of the textfield of the datepicker\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * Sets the sizing of the textfield of the datepicker\n * @default true\n */\n @Prop() showIcon: boolean = true;\n /**\n * Sets show previous/next month days in calendar\n * @default true\n */\n @Prop() showPreviousNextMonthDays: boolean = true;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n private textfieldEl: HTMLInputElement = null;\n private pickerContainerEl: HTMLKupCardElement = null;\n private pickerEl: { value: string; date: Date } = {\n value: new Date().toISOString(),\n date: new Date(),\n };\n private clickCb: KupManagerClickCb = null;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-datepicker-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-input',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInput: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-textfieldsubmit',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTextFieldSubmit: EventEmitter<KupDatePickerEventPayload>;\n\n @Event({\n eventName: 'kup-datepicker-cleariconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClearIconClick: EventEmitter<KupEventPayload>;\n\n async onKupDatePickerItemClick(value: string) {\n this.setPickerValueSelected(value);\n\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n\n this.setFocus();\n }\n\n async onKupClearIconClick() {\n this.setPickerValueSelected('');\n\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n\n this.kupClearIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n async onKupBlur() {\n this.kupBlur.emit({\n id: this.rootElement.id,\n value: await this.getValue(),\n comp: this,\n });\n }\n\n onKupChange(e: InputEvent) {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupChange\n );\n }\n\n async onKupClick() {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n }\n\n async onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n }\n\n onKupInput(e: InputEvent) {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupInput,\n true\n );\n }\n\n onKupTextFieldSubmit(e: KeyboardEvent) {\n if (e.key === 'Enter') {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupTextFieldSubmit\n );\n }\n }\n\n async onKupIconClick() {\n if (this.isPickerOpened()) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: await this.getValue(),\n });\n }\n\n /*-------------------------------------------------*/\n /* L i s t e n e r s */\n /*-------------------------------------------------*/\n\n @Listen('keyup')\n listenKeyup(e: KeyboardEvent) {\n if (this.isPickerOpened()) {\n if (e.key === 'Escape') {\n this.closePicker();\n }\n if (e.key === 'Enter') {\n this.setPickerValueSelected();\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('firstDayIndex')\n watchFirstDayIndex() {\n if (this.firstDayIndex > 6 || this.firstDayIndex < 0) {\n this.kupManager.debug.logMessage(\n this,\n 'property first-day-index=[' +\n this.firstDayIndex +\n '] not allowed: it must be >= 0 and <= 6',\n KupDebugCategory.WARNING\n );\n this.firstDayIndex = 1;\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Retrieves the component's value.\n * @returns {string} Value of the component.\n */\n @Method()\n async getValue(): Promise<string> {\n if (this.ISOvalue) {\n return this.ISOvalue;\n }\n return this.notISOvalue;\n }\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupDatePickerProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the focus to the component.\n */\n @Method()\n async setFocus() {\n if (this.textfieldEl != null) {\n this.textfieldEl.focus();\n }\n }\n /**\n * Sets the component's value.\n * @param {string} value - Value to be set.\n */\n @Method()\n async setValue(value: string) {\n this.refreshPickerValue(value, undefined);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n refreshPickerValue(\n eventDetailValue: string,\n eventToRaise: EventEmitter,\n isOnInputEvent?: boolean\n ) {\n let newValue = eventDetailValue;\n this.ISOvalue = '';\n this.notISOvalue = newValue;\n // check if input contains special codes\n if (!eventDetailValue) {\n /** donothing */\n } else if (this.kupManager.dates.isIsoDate(eventDetailValue)) {\n if (isOnInputEvent != true) {\n this.ISOvalue = eventDetailValue;\n this.notISOvalue = '';\n }\n } else if (this.isAlphanumeric(eventDetailValue)) {\n /** donothing */\n } else if (\n this.kupManager.dates.isValidFormattedStringDate(eventDetailValue)\n ) {\n newValue = this.kupManager.dates.format(\n this.kupManager.dates.normalize(eventDetailValue),\n KupDatesFormats.ISO_DATE\n );\n this.refreshPickerComponentValue(newValue);\n if (isOnInputEvent != true) {\n this.ISOvalue = newValue;\n this.notISOvalue = '';\n }\n } else {\n /** donothing */\n }\n\n if (newValue != null && eventToRaise) {\n eventToRaise.emit({\n id: this.rootElement.id,\n value: newValue,\n });\n }\n }\n\n refreshPickerComponentValue(value: string) {\n if (!this.isPickerOpened()) {\n return;\n }\n let d: Date;\n if (this.kupManager.dates.isIsoDate(value)) {\n d = new Date(value);\n } else {\n d = new Date();\n }\n this.pickerEl.value = d.toISOString();\n this.pickerEl.date = d;\n this.refresh();\n }\n\n setPickerValueSelected(newValue?: string) {\n if (this.disabled == true) {\n return;\n }\n if (newValue == null) {\n newValue = this.getPickerValueSelected();\n }\n this.closePicker();\n if (newValue == null) {\n return;\n }\n this.setValue(newValue);\n }\n\n getPickerValueSelected(): string {\n return this.pickerEl.value;\n }\n\n getValueForPickerComponent() {\n return this.ISOvalue;\n }\n\n openPicker() {\n const textfieldEl = this.textfieldEl;\n this.pickerContainerEl.menuVisible = true;\n const elStyle = this.pickerContainerEl.style;\n elStyle.height = 'auto';\n elStyle.minWidth = this.textfieldEl.parentElement.clientWidth + 'px';\n this.refreshPickerComponentValue(this.getValueForPickerComponent());\n if (textfieldEl != null) {\n textfieldEl.classList.add('toggled');\n }\n if (\n this.kupManager.dynamicPosition.isRegistered(this.pickerContainerEl)\n ) {\n this.kupManager.dynamicPosition.changeAnchor(\n this.pickerContainerEl,\n this.textfieldEl.parentElement\n );\n } else {\n this.kupManager.dynamicPosition.register(\n this.pickerContainerEl,\n this.textfieldEl.parentElement,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.kupManager.dynamicPosition.start(this.pickerContainerEl);\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.closePicker();\n },\n el: this.pickerContainerEl,\n };\n }\n this.kupManager.addClickCallback(this.clickCb, true);\n }\n\n closePicker() {\n this.kupManager.removeClickCallback(this.clickCb);\n if (!this.isPickerOpened()) {\n return;\n }\n let textfieldEl = this.textfieldEl;\n if (textfieldEl != null) {\n textfieldEl.classList.remove('toggled');\n }\n this.pickerContainerEl.menuVisible = false;\n this.kupManager.dynamicPosition.stop(this.pickerContainerEl);\n }\n\n isPickerOpened(): boolean {\n return this.pickerContainerEl?.menuVisible == true;\n }\n\n getTextFieldId(): string {\n return this.textfieldEl.id;\n }\n\n prepTextfield(initialValue: string): VNode {\n const fullHeight =\n this.rootElement.classList.contains('kup-full-height');\n const fullWidth = this.rootElement.classList.contains('kup-full-width');\n const textfieldData: FTextFieldProps = {\n ...this.data['kup-text-field'],\n sizing: this.sizing,\n outlined: this.outlined,\n showIcon: this.showIcon,\n error: this.error,\n };\n if (!textfieldData.icon && this.showIcon) {\n textfieldData.icon = 'calendar';\n }\n if (textfieldData.icon) {\n textfieldData.trailingIcon = true;\n }\n return (\n <FTextField\n {...textfieldData}\n disabled={this.disabled}\n fullHeight={fullHeight}\n fullWidth={fullWidth}\n maxLength={10}\n id={this.rootElement.id + '_text-field'}\n value={initialValue}\n onBlur={() => this.onKupBlur()}\n onChange={(e: InputEvent) => this.onKupChange(e)}\n onClearIconClick={() => this.onKupClearIconClick()}\n onClick={() => this.onKupClick()}\n onFocus={() => this.onKupFocus()}\n onIconClick={() => this.onKupIconClick()}\n onKeyDown={(e: KeyboardEvent) => this.onKupTextFieldSubmit(e)}\n onInput={(e: InputEvent) => this.onKupInput(e)}\n >\n {this.prepDatePicker()}\n </FTextField>\n );\n }\n\n getInitEndYear(curYear: number): { initYear: number; endYear: number } {\n let initYear: number = curYear - (curYear % 10);\n let endYear: number = initYear + 16 - 1;\n\n return { initYear: initYear, endYear: endYear };\n }\n\n isRelatedTargetInThisComponent(e: any): boolean {\n if (!e.relatedTarget) {\n return false;\n }\n let id = e.relatedTarget.id;\n if (id == null || id.trim() == '') {\n return false;\n }\n if (id == this.getTextFieldId()) {\n return true;\n }\n\n let idConc =\n '#prev-page#next-page#date-picker-div#change-view-button#calendar#';\n return idConc.indexOf('#' + id + '#') >= 0;\n }\n\n prepDatePicker() {\n const data: KupCardData = {\n options: {\n initialValue: this.ISOvalue,\n firstDayIndex: this.firstDayIndex,\n resetStatus: true,\n showPreviousNextMonthDays: this.showPreviousNextMonthDays,\n },\n };\n\n return (\n <kup-card\n ref={(el) => (this.pickerContainerEl = el)}\n data={data}\n layoutFamily={KupCardFamily.BUILT_IN}\n sizeX=\"300px\"\n sizeY=\"auto\"\n isMenu\n onkup-card-click={(ev: CustomEvent<KupCardClickPayload>) => {\n if (ev.detail.value != null && ev.detail.value != '')\n this.onKupDatePickerItemClick(ev.detail.value);\n }}\n ></kup-card>\n );\n }\n\n getDateForOutput(): string {\n if (this.notISOvalue) {\n return this.notISOvalue;\n }\n if (this.ISOvalue) {\n return this.kupManager.dates.format(this.ISOvalue);\n }\n return '';\n }\n\n isAlphanumeric(value: string): boolean {\n const regex = /[A-Za-z]/;\n return regex.test(value);\n }\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.dates.register(this);\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.watchFirstDayIndex();\n this.setValue(this.initialValue);\n if (!this.data) {\n this.data = {\n 'kup-text-field': {},\n };\n }\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n if (root) {\n const f: HTMLElement = root.querySelector('.f-text-field');\n if (f) {\n this.textfieldEl = f.querySelector('input');\n FTextFieldMDC(f);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n {this.prepTextfield(this.getDateForOutput())}\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.dates.unregister(this);\n this.kupManager.theme.unregister(this);\n if (this.pickerContainerEl) {\n this.pickerContainerEl.remove();\n }\n }\n}\n","/**\n * Props of the kup-dialog component.\n * Used to export every prop in an object.\n */\nexport enum KupDialogProps {\n autoCenter = 'Auto centers the dialog relatively to the viewport.',\n customStyle = 'Custom style of the component.',\n header = 'Header options.',\n modal = 'Set of options to display the dialog as a modal.',\n resizable = 'Sets whether the dialog is resizable or not.',\n sizeX = 'The width of the dialog, defaults to auto. Accepts any valid CSS format (px, %, vw, etc.).',\n sizeY = 'The height of the dialog, defaults to auto. Accepts any valid CSS format (px, %, vh, etc.).',\n}\n\nexport interface KupDialogAutoCenter {\n onReady?: boolean;\n}\n\nexport interface KupDialogHeader {\n icons?: KupDialogIcons;\n title?: string;\n}\n\nexport interface KupDialogIcons {\n close?: boolean;\n}\n\nexport interface KupDialogModal {\n closeOnBackdropClick?: boolean;\n}\n","/**\n* @prop --kup-dialog-header-height: Sets the height of the header bar.\n*/\n\n:host {\n --kup_dialogheader_text_color: var(\n --kup-dialogheader-text-color,\n var(--kup-text-secondary)\n );\n --kup_dialog_background_color: var(\n --kup-dialog-background-color,\n var(--kup-layer-0)\n );\n --kup_dialog_header_background_color: var(\n --kup-dialog-header-background-color,\n var(--kup-layer-1)\n );\n --kup_dialog_header_height: var(\n --kup-dialog-header-height,\n var(--kup-space-09)\n );\n\n box-sizing: border-box;\n display: block;\n height: var(--kup_dialog_height);\n left: var(--kup_dialog_left, -100%);\n min-height: var(--kup_dialog_height);\n min-width: var(--kup_dialog_width);\n position: absolute;\n top: var(--kup_dialog_top, -100%);\n transition: opacity 0.25s ease-in;\n width: var(--kup_dialog_width);\n -webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n -moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;\n}\n\n#kup-component {\n height: 100%;\n width: 100%;\n}\n\n:host([fade-in]) {\n opacity: 0;\n\n ::slotted {\n opacity: 0;\n }\n}\n\n.header {\n color: var(--kup_dialogheader_text_color);\n display: flex;\n flex-direction: row;\n height: var(--kup_dialog_header_height);\n position: relative;\n width: 100%;\n min-height: var(--kup-space-09);\n background-color: var(--kup_dialog_header_background_color);\n\n &__title {\n padding: var(--kup-space-05);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n @include kup-heading-compact-01;\n }\n\n &__close.f-image {\n --kup-icon-color: var(--kup_dialogheader_text_color);\n cursor: pointer;\n margin-right: 0;\n transition: opacity 0.25s;\n position: absolute;\n right: var(--kup-space-05);\n\n &:hover {\n opacity: 0.5;\n }\n }\n}\n\n.content {\n height: calc(\n 100% - var(--kup_dialog_header_height) - (var(--kup-space-05) * 2)\n );\n padding: var(--kup-space-05);\n overflow: auto;\n user-select: text;\n background-color: var(--kup_dialog_background_color);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { kupManagerInstance } from '../../managers/kup-manager/kup-manager';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport {\n KupDialogAutoCenter,\n KupDialogHeader,\n KupDialogModal,\n KupDialogProps,\n} from './kup-dialog-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\n\n@Component({\n tag: 'kup-dialog',\n styleUrl: 'kup-dialog.scss',\n shadow: true,\n})\nexport class KupDialog {\n /**\n * References the root HTML element of the component (<kup-dialog>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Auto centers the dialog relatively to the viewport.\n * @default \"{ onReady: true }\"\n */\n @Prop() autoCenter: KupDialogAutoCenter = { onReady: true };\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle = '';\n /**\n * Header options.\n * @default \"{ icons: { close: true } }\"\n */\n @Prop() header: KupDialogHeader = { icons: { close: true } };\n /**\n * Set of options to display the dialog as a modal.\n * @default \"{ closeOnBackdropClick: true }\"\n */\n @Prop() modal: KupDialogModal = { closeOnBackdropClick: true };\n /**\n * Sets whether the dialog is resizable or not.\n * @default \"true\"\n */\n @Prop() resizable = true;\n /**\n * The width of the dialog, defaults to auto. Accepts any valid CSS format (px, %, vw, etc.).\n * @default \"auto\"\n */\n @Prop() sizeX = 'auto';\n /**\n * The height of the card, defaults to auto. Accepts any valid CSS format (px, %, vh, etc.).\n * @default \"auto\"\n */\n @Prop() sizeY = 'auto';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n #header: HTMLElement = null;\n #kupManager = kupManagerInstance();\n #recalcSafeguard = 0;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-dialog-close',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClose: EventEmitter<KupEventPayload>;\n\n @Event({\n eventName: 'kup-dialog-ready',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupReady: EventEmitter<KupEventPayload>;\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Closes the dialog detaching it from the DOM.\n */\n @Method()\n async close(): Promise<void> {\n this.kupClose.emit({\n comp: this,\n id: this.rootElement.id,\n });\n this.rootElement.remove();\n }\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupDialogProps, descriptions);\n }\n /**\n * Places the dialog at the center of the screen.\n */\n @Method()\n async recalcPosition(): Promise<void> {\n const rect = this.rootElement.getBoundingClientRect();\n if (!rect.x && !rect.y && !rect.height && !rect.width) {\n this.#kupManager.debug.logMessage(\n this,\n `recalcPosition() ran before the component finished being drawn. Running again (attempt #${\n this.#recalcSafeguard\n }).`,\n KupDebugCategory.INFO\n );\n if (this.#recalcSafeguard < 50) {\n this.#recalcSafeguard++;\n setTimeout(async () => this.recalcPosition(), 50);\n return;\n } else {\n this.#kupManager.debug.logMessage(\n this,\n `Too many attempts centering the dialog.`,\n KupDebugCategory.WARNING\n );\n }\n }\n this.#recalcSafeguard = 0;\n const left = window.innerWidth / 2 - rect.width / 2;\n const top = window.innerHeight / 2 - rect.height / 2 + window.scrollY;\n this.rootElement.style.setProperty('--kup_dialog_left', left + 'px');\n this.rootElement.style.setProperty('--kup_dialog_top', top + 'px');\n this.rootElement.removeAttribute('fade-in');\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupDialogProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.#kupManager.interact.dialogify(\n this.rootElement,\n this.#header ? this.#header : null,\n !this.resizable\n );\n if (this.autoCenter?.onReady) {\n this.recalcPosition();\n } else {\n this.rootElement.removeAttribute('fade-in');\n }\n if (this.modal) {\n this.#kupManager.interact.showModalBackdrop(\n this.modal.closeOnBackdropClick\n ? () => {\n this.close();\n }\n : null\n );\n }\n this.kupReady.emit({\n comp: this,\n id: this.rootElement.id,\n });\n this.#kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n const style = {\n '--kup_dialog_height': this.sizeY ? this.sizeY : 'auto',\n '--kup_dialog_width': this.sizeX ? this.sizeX : 'auto',\n };\n\n const headerSlot = this.rootElement.querySelector('[slot=\"header\"]');\n if (headerSlot) {\n this.#header = headerSlot as HTMLElement;\n }\n\n return (\n <Host fade-in style={style}>\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n {this.header ? (\n <div class=\"header\" ref={(el) => (this.#header = el)}>\n {this.header.title ? (\n <div class=\"header__title\">\n {this.header.title}\n </div>\n ) : null}\n {this.header.icons?.close ? (\n <FImage\n onClick={() => this.close()}\n sizeX=\"1.25em\"\n sizeY=\"100%\"\n resource=\"clear\"\n wrapperClass=\"header__close\"\n ></FImage>\n ) : null}\n </div>\n ) : headerSlot ? (\n <slot name=\"header\"></slot>\n ) : null}\n <div class=\"content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n if (this.modal) {\n this.#kupManager.interact.hideModalBackdrop();\n }\n this.#kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\n\n/**\n * Props of the kup-dropdown-button component.\n * Used to export every prop in an object.\n */\nexport enum KupDropdownButtonProps {\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n displayMode = 'Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".',\n icon = 'Defaults at null. When set, the button will show this icon.',\n initialValue = 'Sets the initial value of the component.',\n label = 'Defaults at null. When set, the button will show this text.',\n placeholderIcon = 'When set, the button will show this icon, if icon/image not found.',\n selectMode = 'Sets to the return the selected item value. Suported values: \"code\", \"description\", \"both\".',\n styling = 'Defines the style of the button. Available styles are \"flat\" and \"outlined\", \"raised\" is the default.',\n trailingIcon = 'Defaults at null. When set, the icon will be shown after the text.',\n dropdownOnly = 'Default value is false. When set to true, the arrow dropdown button is the only button displayed.',\n}\n\nexport interface KupDropdownButtonEventPayload extends KupEventPayload {\n node?: KupListNode;\n value: any;\n}\n","@import 'styles/kup-dropdown-button-main.scss';\n@import 'styles/kup-dropdown-button-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n VNode,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n ItemsDisplayMode,\n KupListEventPayload,\n} from '../kup-list/kup-list-declarations';\nimport { consistencyCheck } from '../kup-list/kup-list-helper';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n} from '../../types/GenericTypes';\nimport {\n KupDropdownButtonEventPayload,\n KupDropdownButtonProps,\n} from './kup-dropdown-button-declarations';\nimport {\n FButtonProps,\n FButtonStyling,\n} from '../../f-components/f-button/f-button-declarations';\nimport { FButton } from '../../f-components/f-button/f-button';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\n\n@Component({\n tag: 'kup-dropdown-button',\n styleUrl: 'kup-dropdown-button.scss',\n shadow: true,\n})\nexport class KupDropdownButton {\n /**\n * References the root HTML element of the component (<kup-dropdown-button>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() id: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components.\n * @default null\n */\n @Prop() data: Object = null;\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Sets how to show the selected item value. Suported values: \"code\", \"description\", \"both\".\n * @default ItemsDisplayMode.DESCRIPTION\n */\n @Prop() displayMode: ItemsDisplayMode = ItemsDisplayMode.DESCRIPTION;\n /**\n * Default value is false. When set to true, the arrow dropdown button is the only button displayed.\n * @default false\n */\n @Prop() dropdownOnly: boolean = false;\n /**\n * Defaults at null. When set, the button will show this icon.\n * @default icon\n */\n @Prop() icon: string = null;\n /**\n * Sets the initial value of the component.\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * Defaults at null. When set, the button will show this text.\n * @default \"\"\n */\n @Prop() label: string = null;\n /**\n * When set, the button will show this icon, if icon/image not found.\n * @default null\n */\n @Prop() placeholderIcon: string = null;\n /**\n * Sets how to return the selected item value. Suported values: \"code\", \"description\", \"both\".\n * @default ItemsDisplayMode.CODE\n */\n @Prop() selectMode: ItemsDisplayMode = ItemsDisplayMode.CODE;\n /**\n * Defines the size of the buttons. Available styles are from \"extra-small\" to \"extra-large\". Small will be the default\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * Defines the style of the button. Styles available: \"flat\", \"outlined\" and \"raised\" which is also the default.\n * @default FButtonStyling.RAISED\n */\n @Prop() styling: FButtonStyling = FButtonStyling.RAISED;\n /**\n * Defaults at null. When set, the icon will be shown after the text.\n * @default false\n */\n @Prop() trailingIcon: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n /**\n * Primary button element.\n */\n private buttonEl: HTMLButtonElement = null;\n /**\n * Dropdown button element.\n */\n private dropdownEl: HTMLButtonElement = null;\n /**\n * List element (dropdown menu).\n */\n private listEl: HTMLKupListElement = null;\n private clickCb: KupManagerClickCb = null;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the primary button loses focus.\n */\n @Event({\n eventName: 'kup-dropdownbutton-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupDropdownButtonEventPayload>;\n /**\n * Triggered when the primary button is clicked.\n */\n @Event({\n eventName: 'kup-dropdownbutton-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupDropdownButtonEventPayload>;\n /**\n * Triggered when the primary button is focused.\n */\n @Event({\n eventName: 'kup-dropdownbutton-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupDropdownButtonEventPayload>;\n /**\n * Triggered when a list item changes.\n */\n @Event({\n eventName: 'kup-dropdownbutton-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupDropdownButtonEventPayload>;\n /**\n * Triggered when a list item is clicked.\n */\n @Event({\n eventName: 'kup-dropdownbutton-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupDropdownButtonEventPayload>;\n /**\n * Handles the navigation of the dropdown menu with the keyboard.\n */\n @Listen('keydown')\n listenKeydown(e: KeyboardEvent) {\n if (this.isListOpened()) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.listEl.focusPrevious();\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n this.listEl.select().then(() => {\n this.closeList();\n });\n this.dropdownEl.focus();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n this.closeList();\n break;\n }\n } else {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.openList();\n this.listEl.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.openList();\n this.listEl.focusPrevious();\n break;\n }\n }\n }\n\n onKupBlur() {\n this.closeList();\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.id,\n });\n }\n\n onKupClick() {\n this.closeList();\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.id,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.id,\n });\n }\n\n onDropDownClick() {\n if (this.isListOpened()) {\n this.closeList();\n } else {\n this.openList();\n }\n }\n\n onKupItemClick(e: CustomEvent<KupListEventPayload>) {\n this.consistencyCheck(e);\n this.closeList();\n\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.id,\n node: e.detail.selected,\n });\n\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.id,\n node: e.detail.selected,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupDropdownButtonProps, descriptions);\n }\n /**\n * Returns the component's internal value.\n */\n @Method()\n async getValue(): Promise<string> {\n return this.id;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupDropdownButtonProps, props);\n }\n /**\n * Sets the internal value of the component.\n */\n @Method()\n async setValue(value: string): Promise<void> {\n this.id = value;\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Checks whether the dropdown menu is opened or not.\n * @returns {boolean} True when the list is opened.\n */\n private isListOpened(): boolean {\n if (this.listEl == null) {\n return false;\n }\n return this.listEl.menuVisible == true;\n }\n /**\n * Opens the dropdown menu.\n */\n private openList(): void {\n const buttonWidth: number =\n (this.buttonEl ? this.buttonEl.clientWidth : 0) +\n this.dropdownEl.clientWidth;\n this.buttonEl?.classList.add('toggled');\n this.dropdownEl.classList.add('toggled');\n this.listEl.menuVisible = true;\n const elStyle = this.listEl.style;\n elStyle.height = 'auto';\n elStyle.minWidth = buttonWidth + 'px';\n if (this.kupManager.dynamicPosition.isRegistered(this.listEl)) {\n this.kupManager.dynamicPosition.changeAnchor(\n this.listEl,\n this.buttonEl ? this.buttonEl : this.dropdownEl\n );\n } else {\n this.kupManager.dynamicPosition.register(\n this.listEl,\n this.buttonEl ? this.buttonEl : this.dropdownEl,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.kupManager.dynamicPosition.start(this.listEl);\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.closeList();\n },\n el: this.listEl,\n };\n }\n this.kupManager.addClickCallback(this.clickCb, true);\n }\n /**\n * Closes the dropdown menu.\n */\n private closeList(): void {\n this.buttonEl?.classList.remove('toggled');\n this.dropdownEl.classList.remove('toggled');\n this.listEl.menuVisible = false;\n this.kupManager.dynamicPosition.stop(this.listEl);\n this.kupManager.removeClickCallback(this.clickCb);\n }\n /**\n * Checks the consistency of the list.\n */\n private consistencyCheck(e?: CustomEvent, idIn?: string): void {\n const ret = consistencyCheck(\n idIn,\n this.data['kup-list'],\n this.listEl,\n this.selectMode,\n this.displayMode,\n e\n );\n this.id = ret.value;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.id = this.initialValue;\n if (!this.data) {\n this.data = {\n 'kup-list': {},\n };\n }\n }\n\n componentDidLoad() {\n this.consistencyCheck(undefined, this.id);\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root && (!this.buttonEl || !this.dropdownEl)) {\n this.buttonEl = root.querySelector(\n '.dropdown-button__primary-action'\n );\n this.dropdownEl = root.querySelector(\n '.dropdown-button__dropdown-action'\n );\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n private renderButtons() {\n const buttons: VNode[] = [];\n const props: FButtonProps = {\n disabled: this.disabled ? true : false,\n large: this.rootElement.classList.contains('kup-large')\n ? true\n : false,\n pulsating: this.rootElement.classList.contains('kup-pulsating')\n ? true\n : false,\n slim: this.rootElement.classList.contains('kup-slim')\n ? true\n : false,\n sizing: this.sizing,\n styling: this.styling ? this.styling : FButtonStyling.RAISED,\n title: this.rootElement.title,\n };\n\n if (!this.dropdownOnly) {\n buttons.push(\n <FButton\n {...props}\n icon={this.icon ? this.icon : null}\n placeholderIcon={this.placeholderIcon}\n label={this.label ? this.label : null}\n trailingIcon={this.trailingIcon ? true : false}\n wrapperClass=\"dropdown-button__primary-action\"\n onClick={() => this.onKupClick()}\n onBlur={() => this.onKupBlur()}\n onFocus={() => this.onKupFocus()}\n />\n );\n }\n buttons.push(\n <FButton\n {...props}\n disabled={this.disabled ? true : false}\n icon={\n this.dropdownOnly && this.icon && this.icon !== ''\n ? this.icon\n : 'arrow_drop_down'\n }\n placeholderIcon={this.placeholderIcon}\n label=\" \"\n wrapperClass={\n 'dropdown-button__dropdown-action' +\n (this.dropdownOnly ? ' dropdown-only' : '')\n }\n onClick={() => this.onDropDownClick()}\n />\n );\n return buttons;\n }\n\n render() {\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <div class=\"dropdown-button--wrapper\">\n {this.renderButtons()}\n </div>\n <kup-list\n {...this.data['kup-list']}\n displayMode={this.displayMode}\n isMenu={true}\n onKup-list-click={(\n e: CustomEvent<KupListEventPayload>\n ) => this.onKupItemClick(e)}\n id={this.rootElement.id + '_list'}\n ref={(el) => (this.listEl = el)}\n ></kup-list>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n if (this.listEl) {\n this.kupManager.dynamicPosition.unregister([this.listEl]);\n this.listEl.remove();\n }\n this.kupManager.theme.unregister(this);\n }\n}\n","import { FCellShapes } from '../../f-components/f-cell/f-cell-declarations';\nimport {\n KupDataColumn,\n KupDataRow,\n} from '../../managers/kup-data/kup-data-declarations';\n/**\n * Props of the kup-form component.\n * Used to export every prop in an object.\n */\nexport enum KupFormProps {\n customStyle = 'Custom style of the component.',\n data = 'Actual data of the form.',\n hiddenSubmitButton = 'Creates a hidden submit button in order to submit the form with enter.',\n labelPlacement = \"Sets the label placement for 'all' fields in form\",\n layout = 'How the form will arrange its content.',\n submitCb = 'Sets the callback function on submit form',\n}\nexport interface KupFormData {\n columns?: KupDataColumn[];\n rows?: KupFormRow[];\n}\nexport interface KupFormRow extends KupDataRow {\n layout?: KupFormLayout;\n}\n\nexport interface KupFormLayout {\n horizontal?: boolean;\n sections?: KupFormSection[];\n}\n\nexport interface KupFormSection {\n columns?: number;\n content?: KupFormField[];\n dim?: string;\n horizontal?: boolean;\n id?: string;\n label?: KupFormLabel;\n sections?: KupFormSection[];\n style?: { [index: string]: string };\n title?: string;\n}\n\nexport interface KupFormField {\n column?: string;\n data?: any;\n label?: string;\n shape?: FCellShapes;\n value?: string;\n}\n\nexport interface KupFormLabel {\n alignment?: KupFormLabelAlignment;\n placement?: KupFormLabelPlacement;\n width?: string;\n}\n\nexport enum KupFormLabelAlignment {\n CENTER = 'center',\n LEFT = 'left',\n RIGHT = 'right',\n}\n\nexport enum KupFormLabelPlacement {\n BOTTOM = 'bottom',\n LEFT = 'left',\n HIDDEN = 'hidden',\n PLACEHOLDER = 'placeholder',\n WATERMARK = 'watermark',\n RIGHT = 'right',\n TOP = 'top',\n}\n","/**\n* @prop --kup-form-background-color: Sets background of the component.\n* @prop --kup-form-color: Sets text color of the component.\n* @prop --kup-form-font-family: Sets font family of the component.\n* @prop --kup-form-font-size: Sets font size of the component.\n* @prop --kup-form-label-alignment: Sets the text alignment of labels.\n* @prop --kup-form-label-width: Sets the width of labels.\n* @prop --kup-form-padding: Sets the padding of the form.\n*/\n\n:host {\n --kup_form_background_color: var(\n --kup-form-background-color,\n var(--kup-layer-0)\n );\n --kup_form_color: var(--kup-form-color, var(--kup-text-secondary));\n --kup_form_font_family: var(--kup-form-font-family, var(--kup-font-family));\n --kup_form_font_size: var(--kup-form-font-size, var(--kup-font-size));\n --kup_form_label_alignment: var(--kup-form-label-alignment);\n --kup_form_label_width: var(--kup-form-label-width);\n --kup_form_padding: var(--kup-form-padding, 1em 0);\n\n display: block;\n font-family: var(--kup_form_font_family);\n font-size: var(--kup_form_font_size);\n}\n\n.form {\n background: var(--kup_form_background_color);\n color: var(--kup_form_color);\n display: flex;\n flex-grow: 1;\n overflow: auto;\n padding: var(--kup_form_padding);\n position: relative;\n\n &--column {\n flex-direction: column;\n }\n\n &__section {\n display: flex;\n flex: 1 1 1%;\n flex-direction: row;\n flex-wrap: wrap;\n\n &--column {\n flex-direction: column;\n flex-wrap: unset;\n\n > .form__section {\n flex: 0 0 auto;\n }\n }\n\n &--grid {\n display: grid;\n }\n\n &--titled {\n border: 1px solid var(--kup-border-subtle);\n padding-top: 5px;\n position: relative;\n margin: 10px;\n\n > h3 {\n background: var(--kup-background-color);\n font-size: calc(var(--kup-font-size) * 1.15);\n position: absolute;\n margin: 0px;\n padding: 0 8px;\n top: -11px;\n left: 5px;\n transition: background-color 0.25s ease;\n }\n }\n\n &--left {\n .form__label {\n width: var(--kup_form_label_width, 0);\n }\n }\n\n &--right {\n .form__field {\n min-width: 200px;\n width: 0;\n }\n }\n }\n\n &__label {\n -webkit-font-smoothing: antialiased;\n box-sizing: border-box;\n font-size: 0.875em;\n letter-spacing: 0.0178571429em;\n white-space: nowrap;\n width: var(--kup_form_label_width);\n\n &--center {\n text-align: var(--kup_form_label_alignment, center);\n }\n\n &--left {\n text-align: var(--kup_form_label_alignment, left);\n }\n\n &--right {\n text-align: var(--kup_form_label_alignment, right);\n }\n }\n\n &__field {\n min-height: 16px;\n\n img {\n height: auto;\n }\n }\n\n &__submit {\n height: 0;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n width: 0;\n }\n\n .f-cell.c-right-aligned:not(.c-centered) .f-cell__content {\n justify-content: flex-start;\n }\n}\n","import {\n Component,\n Element,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n VNode,\n Watch,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport {\n KupFormRow,\n KupFormLayout,\n KupFormSection,\n KupFormField,\n KupFormProps,\n KupFormData,\n KupFormLabelPlacement,\n KupFormLabelAlignment,\n} from './kup-form-declarations';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, identify, setProps } from '../../utils/utils';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { KupLanguageGeneric } from '../../managers/kup-language/kup-language-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { FCell } from '../../f-components/f-cell/f-cell';\nimport {\n FCellProps,\n FCellTypes,\n} from '../../f-components/f-cell/f-cell-declarations';\nimport { KupDataColumn } from '../../managers/kup-data/kup-data-declarations';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { KupDom } from '../../managers/kup-manager/kup-manager-declarations';\nimport { FButton } from '../../f-components/f-button/f-button';\n\nconst dom: KupDom = document.documentElement as KupDom;\n@Component({\n tag: 'kup-form',\n styleUrl: 'kup-form.scss',\n shadow: true,\n})\nexport class KupForm {\n /**\n * References the root HTML element of the component (<kup-form>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Actual data of the form.\n * @default null\n */\n @Prop() data: KupFormData = null;\n /**\n * Creates a hidden submit button in order to submit the form with enter.\n * @default false\n */\n @Prop() hiddenSubmitButton: boolean = false;\n\n /**\n * Sets the label placement for 'all' fields in form\n * @default KupFormLabelPlacement.TOP\n */\n @Prop() labelPlacement: KupFormLabelPlacement = KupFormLabelPlacement.TOP;\n /**\n * How the form will arrange its content.\n * @default null\n */\n @Prop() layout: KupFormLayout = null;\n\n /**\n * Sets the callback function on submit form\n * @default null\n */\n @Prop() submitCb: (e: SubmitEvent) => unknown = null;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n private kupManager: KupManager = kupManagerInstance();\n private formLayout: KupFormLayout;\n private visibleColumns: KupDataColumn[] = [];\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('data')\n onDataChanged() {\n identify(this.getRows());\n this.initVisibleColumns();\n this.checkLayout();\n }\n\n @Watch('layout')\n onLayoutChanged() {\n this.checkLayout();\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupFormProps, descriptions);\n }\n\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the focus on an editable table cell.\n * @param {string} column - Name of the column.\n * @param {string} rowId - Id of the row.\n */\n @Method()\n async setFocus(column: string, rowId: string): Promise<void> {\n const cells = this.rootElement.shadowRoot.querySelectorAll(\n 'td[data-column=\"' + column + '\"]'\n );\n for (let index = 0; cells && index < cells.length; index++) {\n const cell = cells[index];\n if (cell['data-row'] && cell['data-row'].id == rowId) {\n const input = cell.querySelector('input');\n if (input) {\n input.focus();\n } else {\n const kupInput = cell.querySelector('.hydrated');\n if (kupInput) {\n try {\n (kupInput as any).setFocus();\n } catch (error) {}\n }\n }\n }\n }\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupFormProps, props);\n }\n\n /*-------------------------------------------------*/\n /* Events */\n /*-------------------------------------------------*/\n\n /**\n * When component load is complete\n */\n @Event({\n eventName: 'kup-form-ready',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupReady: EventEmitter<KupEventPayload>;\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n private getColumns(): Array<KupDataColumn> {\n return this.data && this.data.columns\n ? this.data.columns\n : [{ title: '', name: '', size: undefined }];\n }\n\n private initVisibleColumns(): void {\n this.visibleColumns = this.getColumns().filter((column) => {\n if (column.hasOwnProperty('visible')) {\n return column.visible;\n }\n\n return true;\n });\n }\n\n private getRows(): KupFormRow[] {\n return this.data && this.data.rows ? this.data.rows : [];\n }\n\n private checkLayout() {\n if (this.layout) {\n this.formLayout = this.layout;\n return;\n }\n\n const section: KupFormSection = {\n horizontal: false,\n sections: [],\n };\n\n const visibleColumns = this.visibleColumns;\n let size = visibleColumns.length;\n const content = [];\n\n let cnt = 0;\n\n while (size-- > 0) {\n content.push({\n column: visibleColumns[cnt++].name,\n });\n }\n\n section.content = content;\n\n this.formLayout = {\n sections: [section],\n };\n }\n\n private renderRow(row: KupFormRow) {\n const visibleColumns = [...this.visibleColumns];\n\n let formContent = null;\n\n let rowLayout = row.layout;\n if (!rowLayout) {\n rowLayout = this.formLayout;\n }\n\n let horizontal = false;\n if (rowLayout) {\n if (rowLayout.horizontal) {\n horizontal = true;\n }\n\n const sections = rowLayout.sections;\n let size = sections.length;\n\n let cnt = 0;\n if (size > 0) {\n formContent = [];\n }\n\n const parent: KupFormSection = {\n horizontal: horizontal,\n };\n\n while (size-- > 0) {\n formContent.push(\n this.renderSection(\n sections[cnt++],\n parent,\n row,\n visibleColumns\n )\n );\n }\n }\n\n const classObj = {\n form: true,\n 'form--column': !horizontal,\n };\n\n return (\n <form\n class={classObj}\n name={this.rootElement.id}\n onSubmit={this.submitCb}\n >\n {formContent}\n {this.hiddenSubmitButton ? (\n <FButton\n buttonType=\"submit\"\n label={this.kupManager.language.translate(\n KupLanguageGeneric.CONFIRM\n )}\n wrapperClass=\"form__submit\"\n ></FButton>\n ) : null}\n </form>\n );\n }\n\n private renderSection(\n section: KupFormSection,\n parent: KupFormSection,\n row: KupFormRow,\n visibleColumns: KupDataColumn[]\n ) {\n let sectionContent = null;\n\n if (section.sections && section.sections.length > 0) {\n const sections = section.sections;\n let size = sections.length;\n\n let cnt = 0;\n if (size > 0) {\n sectionContent = [];\n }\n\n while (size-- > 0) {\n sectionContent.push(\n this.renderSection(\n sections[cnt++],\n section,\n row,\n visibleColumns\n )\n );\n }\n } else if (section.content) {\n const content = section.content;\n let size = content.length;\n\n let cnt = 0;\n if (size > 0) {\n sectionContent = [];\n }\n\n while (size-- > 0) {\n const formField = this.renderFormField(\n {\n formField: content[cnt++],\n row,\n visibleColumns,\n },\n section\n );\n let field = formField;\n if (!section.horizontal) {\n field = <tr>{formField}</tr>;\n }\n sectionContent.push(field);\n }\n } else if (visibleColumns.length > 0) {\n const column = visibleColumns[0];\n sectionContent = this.renderFormField({\n formField: { column: column.name },\n row,\n visibleColumns,\n });\n }\n\n const isGrid = !!section.columns;\n const labelPlacement = section?.label?.placement || this.labelPlacement;\n\n const sectionClass: { [index: string]: boolean } = {\n form__section: true,\n 'form__section--column': !isGrid && !section.horizontal,\n 'form__section--grid': isGrid,\n 'form__section--titled': !!section.title,\n 'form__section--last':\n !section.sections || section.sections.length === 0,\n [`form__section--${labelPlacement}`]: true,\n };\n\n const sectionStyle: GenericObject = section.style || {};\n if (section.dim && parent) {\n sectionStyle.flex = `0 0 ${section.dim}`;\n\n if (parent.horizontal) {\n sectionStyle.maxWidth = section.dim;\n } else {\n sectionStyle.maxHeight = section.dim;\n }\n }\n\n if (isGrid) {\n sectionStyle[\n 'grid-template-columns'\n ] = `repeat(${section.columns}, 1fr)`;\n }\n\n return (\n <div class={sectionClass} style={sectionStyle}>\n {section.title ? <h3>{section.title}</h3> : null}\n {section.horizontal ? (\n sectionContent\n ) : (\n <table>\n <tbody>{sectionContent}</tbody>\n </table>\n )}\n </div>\n );\n }\n\n private renderFormField(\n {\n formField,\n row,\n visibleColumns,\n }: {\n formField: KupFormField;\n row: KupFormRow;\n visibleColumns: KupDataColumn[];\n },\n section?: KupFormSection\n ): VNode[] {\n const classObj: Record<string, boolean> = {\n form__field: true,\n };\n const styleObj = {};\n let column: KupDataColumn = null;\n let index = -1;\n for (let i = 0; i < visibleColumns.length; i++) {\n const c = visibleColumns[i];\n\n if (c.name === formField.column) {\n index = i;\n break;\n }\n }\n if (index >= 0) {\n column = visibleColumns[index];\n visibleColumns.splice(index, 1);\n } else if (section) {\n column = this.data.columns.find((x) => x.name === formField.column);\n }\n const cell = row.cells[formField.column];\n let title: string = undefined;\n if (cell) {\n cell.isEditable = true;\n if (!this.kupManager.objects.isEmptyKupObj(cell.obj)) {\n if (this.kupManager.debug.isDebug()) {\n title =\n cell.obj.t +\n '; ' +\n cell.obj.p +\n '; ' +\n cell.obj.k +\n ';';\n }\n }\n } else {\n return null;\n }\n const cellProps: FCellProps = {\n cell: cell,\n column: column,\n component: this,\n editable: true,\n renderKup: true,\n row: row,\n setSizes: true,\n shape: formField.shape,\n };\n const label = formField.label || column.title;\n const resetLabel = () => {\n if (this.kupManager.objects.isButton(cell.obj)) {\n return;\n }\n if (!cell.data) {\n cell.data = {};\n }\n try {\n delete cell.data.label;\n } catch {}\n try {\n delete cell.data.data['kup-text-field'].label;\n } catch {}\n };\n resetLabel();\n const labelPlacement = section?.label?.placement || this.labelPlacement;\n switch (labelPlacement) {\n case KupFormLabelPlacement.BOTTOM:\n return [<tr>{fieldCell()}</tr>, <tr>{labelCell(label)}</tr>];\n case KupFormLabelPlacement.PLACEHOLDER:\n case KupFormLabelPlacement.WATERMARK:\n setPlaceholderLabel();\n case KupFormLabelPlacement.HIDDEN: {\n if (section) {\n return [fieldCell()];\n } else {\n return [<tr>{fieldCell()}</tr>];\n }\n }\n case KupFormLabelPlacement.RIGHT: {\n if (section) {\n return [fieldCell(), labelCell(label)];\n } else {\n return [\n <tr>\n {fieldCell()}\n {labelCell(label)}\n </tr>,\n ];\n }\n }\n case KupFormLabelPlacement.TOP:\n return [<tr>{labelCell(label)}</tr>, <tr>{fieldCell()}</tr>];\n default: {\n if (section) {\n return [labelCell(label), fieldCell()];\n } else {\n return [\n <tr>\n {labelCell(label)}\n {fieldCell()}\n </tr>,\n ];\n }\n }\n }\n\n function fieldCell(): VNode {\n return (\n <td\n data-cell={cell}\n data-row={row}\n data-column={formField.column}\n class={classObj}\n style={styleObj}\n title={title}\n >\n {cell && column ? (\n <FCell {...cellProps} />\n ) : (\n <span>{formField.value}</span>\n )}\n </td>\n );\n }\n\n function labelCell(label: string): VNode {\n const alignment =\n section?.label?.alignment || KupFormLabelAlignment.LEFT;\n const style = {\n width: section?.label?.width ? section?.label?.width : '',\n };\n return (\n <td\n class={`form__label form__label--${alignment}`}\n style={style}\n >\n <span>{label}</span>\n </td>\n );\n }\n\n function setPlaceholderLabel() {\n switch (\n dom.ketchup.data.cell.getType(\n cell,\n cell.shape || column.shape || null\n )\n ) {\n case FCellTypes.AUTOCOMPLETE:\n case FCellTypes.COLOR_PICKER:\n case FCellTypes.COMBOBOX:\n case FCellTypes.DATE:\n case FCellTypes.DATETIME:\n case FCellTypes.TIME:\n if (cell.data.data) {\n if (cell.data.data['kup-text-field']) {\n cell.data.data['kup-text-field'].label =\n column.title;\n } else {\n cell.data.data = {\n 'kup-text-field': {\n label: column.title,\n },\n };\n }\n } else {\n cell.data.data = {\n 'kup-text-field': {\n label: column.title,\n },\n };\n }\n break;\n case FCellTypes.CHECKBOX:\n case FCellTypes.NUMBER:\n case FCellTypes.STRING:\n case FCellTypes.SWITCH:\n cell.data.label = column.title;\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.language.register(this);\n this.kupManager.theme.register(this);\n this.onDataChanged();\n }\n\n componentDidLoad() {\n this.kupReady.emit({ comp: this, id: this.rootElement.id });\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const fs: NodeListOf<HTMLElement> =\n root.querySelectorAll('.f-text-field');\n for (let index = 0; index < fs.length; index++) {\n FTextFieldMDC(fs[index]);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n let formContent: VNode[] = null;\n\n if (this.data.rows.length === 0) {\n formContent = (\n <p>\n {this.kupManager.language.translate(\n KupLanguageGeneric.EMPTY_DATA\n )}\n </p>\n );\n } else {\n const rows = this.data.rows;\n let size = rows.length;\n\n let cnt = 0;\n formContent = [];\n\n while (size-- > 0) {\n formContent.push(this.renderRow(rows[cnt++]));\n }\n }\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>{formContent}</div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.language.unregister(this);\n this.kupManager.theme.unregister(this);\n }\n}\n","/**\n * Props of the kup-gauge component.\n * Used to export every prop in an object.\n */\nexport enum KupGaugeProps {\n arcThickness = 'Sets how much the arc of the gauge should be thick.',\n colors = 'Array of three elements to specify the color of the arcs.',\n customStyle = 'Custom style of the component. For more information: https://smeup.github.io/ketchup/#/customization',\n firstThreshold = 'The first threshold, establishing the length of the first and second arc.',\n labelDistance = 'The distance the label and the value has from the gauge graph.',\n maxValue = 'The maximum value reachable in the current graph.',\n measurementUnit = 'A string which will be appended to the displayed values of the component.',\n minValue = 'The minimum value reachable in the current graph.',\n needleCircle = 'When true, shows a rounded needle.',\n onlyValue = \"When true, ignore thresholds in gauge and show colored value's arc.\",\n reverseColors = 'When true, the colors inside the colors array are used in the reversed order.',\n secondThreshold = 'The second threshold, establishing the length of the second and third arc.',\n showLabels = 'If set to false, threshold values of the gauge are not displayed.',\n showMaxmin = 'If set to false, the maximum and minimum values of the gauge are not displayed.',\n showValue = 'If set to false, the current value of the gauge is not displayed.',\n size = 'Con be used change the viewbox of the SVG. By manipulating this value, some customizations of the aspect of the gauge is achievable.',\n value = \"The current value of the gauge. The gauge's needle points to the percentage based on this prop.\",\n valueSize = \"The current size of gauge's value. Correct values are: 0,1,2 or 3.\",\n widthComponent = 'Set Width gauge.',\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","/**\n* @prop --kup-gauge-color: Sets text color of the component.\n* @prop --kup-gauge-font-family: Sets font family of the component.\n* @prop --kup-gauge-font-size: Sets font size of the component.\n* @prop --kup-gauge-needle-color: Sets color of the needle.\n*/\n\n:host {\n --kup_gauge_color: var(--kup-gauge-color, var(--kup-text-secondary));\n --kup_gauge_font_family: var(--kup-gauge-font-family, var(--kup-font-family));\n --kup_gauge_font_size: var(--kup-gauge-font-size, var(--kup-font-size));\n --kup_gauge_needle_color: var(\n --kup-gauge-needle-color,\n var(--kup-text-secondary)\n );\n\n display: inline-block;\n font-family: var(--kup_gauge_font_family);\n font-size: var(--kup_gauge_font_size);\n height: 100%;\n width: 100%;\n}\n\n.gauge {\n /*\n * [1] - This overflow visible here is necessary to allow the numbers of the thresholds to be visible even when placed outside\n * the main borders of the svg.\n */\n box-sizing: border-box;\n height: 100%;\n overflow: visible; // [1]\n padding: 10px;\n\n // Div wrapping the SVG element\n &__container {\n height: 100%;\n width: 100%;\n }\n\n // Class for the labels of the threshold\n &__label-text {\n fill: var(--kup_gauge_color);\n text-align: center;\n }\n\n // Class for the value label\n &__value-text {\n fill: var(--kup_gauge_color);\n color: var(--kup_gauge_color);\n text-align: center;\n }\n\n // Needle colors\n &__needle-base,\n &__needle {\n fill: var(--kup_gauge_needle_color);\n }\n}\n","import {\n Component,\n Element,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\n\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, setProps } from '../../utils/utils';\nimport { KupGaugeProps } from './kup-gauge-declarations';\n\nimport { arc } from 'd3-shape';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-gauge',\n styleUrl: 'kup-gauge.scss',\n shadow: true,\n})\nexport class KupGauge {\n /**\n * References the root HTML element of the component (<kup-gauge>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Sets how much the arc of the gauge should be thick.\n * @namespace kup-gauge.arcThickness\n * @see kup-gauge.size\n */\n @Prop() arcThickness: number = 30;\n /**\n * Array of three elements to specify the color of the arcs.\n */\n @Prop() colors: string[] = [\n `var(${KupThemeColorValues.SUCCESS})`,\n `var(${KupThemeColorValues.WARNING})`,\n `var(${KupThemeColorValues.DANGER})`,\n ];\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The first threshold, establishing the length of the first and second arc.\n */\n @Prop() firstThreshold?: number;\n /**\n * The distance the label and the value has from the gauge graph.\n */\n @Prop({ mutable: true }) labelDistance: number = 20;\n /**\n * The maximum value reachable in the current graph.\n */\n @Prop({ mutable: true }) maxValue: number = 100;\n /**\n * A string which will be appended to the displayed values of the component.\n */\n @Prop() measurementUnit: string = '';\n /**\n * The minimum value reachable in the current graph.\n */\n @Prop({ mutable: true }) minValue: number = -100;\n /**\n * When true, shows a rounded needle.\n */\n @Prop() needleCircle: boolean = false;\n /**\n * When true, ignore thresholds in gauge and show colored value's arc.\n */\n @Prop() onlyValue: boolean = false;\n /**\n * When true, the colors inside the colors array are used in the reversed order.\n */\n @Prop() reverseColors: boolean = false;\n /**\n * The second threshold, establishing the length of the second and third arc.\n */\n @Prop() secondThreshold?: number;\n /**\n * If set to false, threshold values of the gauge are not displayed.\n */\n @Prop() showLabels: boolean = true;\n /**\n * If set to false, the maximum and minimum values of the gauge are not displayed.\n */\n @Prop() showMaxmin: boolean = true;\n /**\n * If set to false, the current value of the gauge is not displayed.\n */\n @Prop() showValue: boolean = true;\n /**\n * Con be used change the viewbox of the SVG.\n * By manipulating this value, some customizations of the aspect of the gauge is achievable.\n * @namespace kup-gauge.size\n * @see kup-gauge.arcThickness\n */\n @Prop() size: number = 300;\n /**\n * The current value of the gauge.\n * The gauge's needle points to the percentage based on this prop.\n */\n @Prop({ mutable: true }) value: number = 0;\n /**\n * The current size of gauge's value.\n * Correct values are: 0,1,2 or 3.\n */\n @Prop() valueSize: number = 0;\n /**\n * Set Width gauge.\n */\n @Prop() widthComponent: string = '100%';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n // Arcs generator\n private arcGenerator = arc();\n /**\n * Holds the maximum positive interval.\n * Percentages are calculated as it follows:\n * MIN = 0 = the value the prop minValue gets transformed to\\\n * MAX = ABSOLUTE(minValue - maxValue) = the maxValuePositive holds this value\n * TVALUE = value - minValue = any value, which needs to be represented on the chart\n * @namespace kup-gauge.maxValuePositive\n */\n private maxValuePositive = 0;\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupGaugeProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupGaugeProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n percToDeg(perc) {\n return perc * 360;\n }\n\n degToRad(deg) {\n return (deg * Math.PI) / 180;\n }\n\n percToRad(perc) {\n return this.degToRad(this.percToDeg(perc));\n }\n\n /**\n * Given a valid value, minValue <= value <= maxValue, calculates this value as a percentage of the interval [minValue, maxValue]\n * @param {number} valueToPercentage - The value to be calculated as a percentage\n * @see kup-gauge.maxValuePositive\n */\n calculateValuePercentage(valueToPercentage: number = 0): number {\n return (valueToPercentage - this.minValue) / this.maxValuePositive;\n }\n\n calculateValueFontSize(): string {\n switch (this.valueSize) {\n case 3:\n return '350%';\n case 2:\n return '325%';\n case 1:\n return '300%';\n default:\n case 0:\n return '275%';\n }\n }\n\n //---- Rendering functions ----\n /**\n * Provided all the necessary data, returns the string necessary for a <path/> element to build the gauge needle.\n * @param needleLength - A pure number of viewbox units indicating the needle lenght.\n * @param needleBaseRadius - Sets the needle radius in viewbox units.\n * @param centerX - X coordinate of the center of the base needle.\n * @param centerY - Y coordinate of the center of the base needle.\n * @param rotationPercentage {number} - A percentage number setting the current rotation of the needle. (0 < rotationPercentage < 1)\n * @returns {string}\n */\n paintNeedle(\n needleLength: number,\n needleBaseRadius: number,\n centerX: number,\n centerY: number,\n rotationPercentage: number = 0\n ): string {\n let leftX, leftY, rightX, rightY, thetaRad, topX, topY;\n thetaRad = this.percToRad(rotationPercentage / 2); // Since the gauge is a semicircle, we must divide the percentage in half to have the correct angle\n topX = centerX - needleLength * Math.cos(thetaRad);\n topY = centerY - needleLength * Math.sin(thetaRad);\n leftX = centerX - needleBaseRadius * Math.cos(thetaRad - Math.PI / 2);\n leftY = centerY - needleBaseRadius * Math.sin(thetaRad - Math.PI / 2);\n rightX = centerX - needleBaseRadius * Math.cos(thetaRad + Math.PI / 2);\n rightY = centerY - needleBaseRadius * Math.sin(thetaRad + Math.PI / 2);\n return (\n 'M ' +\n leftX +\n ' ' +\n leftY +\n ' L ' +\n topX +\n ' ' +\n topY +\n ' L ' +\n rightX +\n ' ' +\n rightY\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n if (!this.labelDistance) {\n this.labelDistance = 20;\n }\n if (this.maxValue === undefined || this.maxValue === null) {\n this.maxValue = 100;\n }\n if (this.minValue === undefined || this.minValue === null) {\n this.minValue = -100;\n }\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n if (isNaN(this.value)) {\n this.kupManager.debug.logMessage(\n this,\n 'Invalid value, not rendering!',\n KupDebugCategory.WARNING\n );\n return;\n }\n // mathematical operations\n this.maxValuePositive = Math.abs(this.minValue - this.maxValue);\n let tempValue = this.value;\n if (this.value > this.maxValue) {\n this.value = this.maxValue;\n }\n if (this.value < this.minValue) {\n this.value = this.minValue;\n }\n\n // Svg constants\n let yValueMultiplier = 1;\n switch (this.valueSize) {\n case 3:\n yValueMultiplier = 3;\n break;\n case 2:\n yValueMultiplier = 2.75;\n break;\n case 1:\n yValueMultiplier = 2.5;\n break;\n default:\n case 0:\n yValueMultiplier = 2.25;\n break;\n }\n const halvedSize = this.size / 2; // The svg size ratio w : w / 2\n const needleCircleRadius = this.size / 20; // Arbitrary size of the base of the needle\n const needleLength = halvedSize - 2 * this.arcThickness; // Calculates the length of the needle in pure units\n const valueLabelYPosition =\n halvedSize +\n needleCircleRadius +\n this.labelDistance * yValueMultiplier;\n\n // User provided thresholds\n // TODO these thresholds will be given to the component by a user prop\n const givenThresholds = [];\n if (!this.onlyValue) {\n if (this.firstThreshold || 0 === this.firstThreshold) {\n givenThresholds.push(this.firstThreshold);\n }\n if (this.secondThreshold || 0 === this.secondThreshold) {\n givenThresholds.push(this.secondThreshold);\n }\n } else {\n givenThresholds.push(this.value);\n }\n\n // This creates the various point from which the arcs are generated\n const arcsThresholds = [\n this.minValue,\n ...givenThresholds,\n this.maxValue,\n ];\n\n // Creates arc elements and chooses their color orders\n const arcsElements = [];\n let arcsColors;\n if (!this.onlyValue) {\n arcsColors = !this.reverseColors\n ? this.colors\n : this.colors.slice().reverse();\n } else {\n let computedcolors = !this.reverseColors\n ? this.colors\n : this.colors.slice().reverse();\n let valuecolor =\n this.value < this.firstThreshold\n ? computedcolors[0]\n : this.value < this.secondThreshold\n ? computedcolors[1]\n : computedcolors[2];\n arcsColors = [\n valuecolor,\n `rgba(var(${KupThemeColorValues.TEXT}-rgb), .1)`,\n ];\n }\n\n for (let i = 0; i < arcsThresholds.length - 1; i++) {\n const currentArcPath = this.arcGenerator({\n innerRadius: halvedSize - this.arcThickness,\n outerRadius: halvedSize,\n startAngle:\n this.calculateValuePercentage(arcsThresholds[i]) * Math.PI,\n endAngle:\n this.calculateValuePercentage(arcsThresholds[i + 1]) *\n Math.PI,\n });\n // If there is no color specified for that arc, we provide a black fallback\n arcsElements.push(\n <path\n d={currentArcPath}\n style={{ fill: arcsColors[i] ? arcsColors[i] : '#000000' }}\n />\n );\n }\n\n // Composes the threshold label elements, if labels must be displayed\n const textElements =\n this.showLabels || this.showMaxmin\n ? arcsThresholds.map((threshold) => {\n // Given the\n const thresholdPercentage =\n this.calculateValuePercentage(threshold);\n // Decides the position of the text\n // @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor\n let textPosition = 'end';\n if (thresholdPercentage > 0.5) {\n textPosition = 'start';\n } else if (thresholdPercentage === 0.5) {\n textPosition = 'middle';\n }\n // Since the gauge is a semicircle, we must divide the percentage in half to have the correct angle\n const thetaRad = this.percToRad(thresholdPercentage / 2);\n let topX =\n halvedSize - (needleLength + 2) * Math.cos(thetaRad);\n let topY =\n halvedSize - (needleLength + 2) * Math.sin(thetaRad);\n\n let retValue = '';\n if (thresholdPercentage > 0 && thresholdPercentage < 1) {\n if (this.showLabels && !this.onlyValue) {\n retValue = (\n <text\n class=\"gauge__label-text\"\n text-anchor={textPosition}\n x={topX}\n y={topY}\n >\n {this.kupManager.math.numberStringToFormattedString(\n String(threshold),\n -1,\n ''\n )}\n </text>\n );\n }\n } else {\n if (this.showMaxmin) {\n if (thresholdPercentage === 0) {\n topX = this.arcThickness;\n topY = halvedSize + this.labelDistance;\n } else {\n topX = this.size - this.arcThickness;\n topY = halvedSize + this.labelDistance;\n }\n retValue = (\n <text\n class=\"gauge__label-text\"\n text-anchor={textPosition}\n x={topX}\n y={topY}\n >\n {this.kupManager.math.numberStringToFormattedString(\n String(threshold),\n -1,\n ''\n )}\n </text>\n );\n }\n }\n return retValue;\n })\n : [];\n\n const style = { fontSize: this.calculateValueFontSize() };\n let valueText = undefined;\n if (this.showValue) {\n valueText = (\n <text\n class=\"gauge__label-text value\"\n text-anchor=\"middle\"\n x={halvedSize}\n y={valueLabelYPosition}\n style={style}\n >\n {this.kupManager.math.numberStringToFormattedString(\n String(tempValue),\n -1,\n ''\n ) +\n ' ' +\n this.measurementUnit}\n </text>\n );\n }\n\n const width = { width: this.widthComponent };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} class=\"gauge__container\">\n <svg\n class=\"gauge\"\n style={width}\n viewBox={`0 0 ${this.size} ${valueLabelYPosition}`}\n >\n <g\n transform={`rotate(-90) translate(-${halvedSize}, ${halvedSize})`}\n >\n {arcsElements}\n </g>\n {this.needleCircle ? (\n <circle\n class=\"gauge__needle-base\"\n cx={halvedSize}\n cy={halvedSize}\n r={needleCircleRadius}\n />\n ) : null}\n <path\n class=\"gauge__needle\"\n d={this.paintNeedle(\n needleLength,\n needleCircleRadius,\n halvedSize,\n halvedSize,\n this.calculateValuePercentage(this.value)\n )}\n />\n {textElements}\n {valueText}\n </svg>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { Color } from './kup-image-canvas-declarations';\n\nexport function getColorFromString(rgb: string): Color {\n const rIndex = rgb.indexOf('R');\n const gIndex = rgb.indexOf('G');\n const bIndex = rgb.indexOf('B');\n\n if (rIndex < 0 || gIndex < 0 || bIndex < 0) {\n return;\n }\n\n const r = rgb.substring(rIndex + 1, rIndex + 4);\n const g = rgb.substring(gIndex + 1, gIndex + 4);\n const b = rgb.substring(bIndex + 1, bIndex + 4);\n\n try {\n return new Color(parseInt(r), parseInt(g), parseInt(b));\n } catch (e) {\n console.error(e);\n }\n\n return null;\n}\n","import { getColorFromString } from './kup-image-canvas-helper';\n\nexport class GraphicElement {\n width = 100.0;\n height = 100.0;\n color: Color = null;\n shape = 'bar';\n\n init(markers: string[]): void {\n markers.forEach((marker) => {\n if (marker.toUpperCase().startsWith('HEIGHT;')) {\n this.initHeight(marker);\n } else if (marker.toUpperCase().startsWith('SHAPE;')) {\n this.initShape(marker);\n } else if (marker.toUpperCase().startsWith('BCOLOR;')) {\n // TODO ?\n } else {\n this.initColor(marker);\n }\n });\n }\n\n initColor(rgb: string): void {\n if (rgb.length > 11 && this.isValidColor(rgb)) {\n this.color = getColorFromString(rgb.substring(0, 12));\n\n try {\n this.width = parseFloat(rgb.substring(13).replace(',', '.'));\n } catch (e) {\n console.error(e);\n }\n } else if (rgb.startsWith('*NONE')) {\n try {\n this.width = parseFloat(rgb.substring(6).replace(',', '.'));\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n isTrasparent(): boolean {\n return this.color === null;\n }\n\n initHeight(height: string): void {\n if (height) {\n const toBeParsed = height\n .substring('HEIGHT;'.length)\n .replace(',', '.');\n\n try {\n this.height = parseFloat(toBeParsed);\n if (Number.isNaN(this.height)) {\n this.height = 100;\n }\n } catch (err) {\n console.error(err);\n this.height = 100;\n }\n }\n }\n\n initShape(shape: string) {\n shape = shape.substring('SHAPE;'.length);\n const vLastSemicolonIndex = shape.indexOf(';');\n let vShapeTypeString = shape;\n if (vLastSemicolonIndex > -1) {\n vShapeTypeString = shape.substring(0, vLastSemicolonIndex);\n\n try {\n this.width = parseFloat(\n shape.substring(vLastSemicolonIndex + 1).replace(',', '.')\n );\n } catch (err) {\n console.error(err);\n }\n }\n\n switch (vShapeTypeString.toLocaleLowerCase()) {\n case 'circle':\n this.shape = 'circle';\n break;\n\n case 'tril':\n this.shape = 'tril';\n break;\n\n case 'trir':\n this.shape = 'trir';\n break;\n }\n }\n\n isValidColor(color: string): boolean {\n if (!color) {\n return false;\n }\n\n color = color.trim();\n\n const vRgb = [];\n\n let vError = false;\n\n let vColorKey = null;\n\n // red\n let vIndex = color.indexOf('R');\n if (vIndex > -1) {\n vColorKey = color.substring(vIndex + 1, vIndex + 4);\n vRgb[0] = parseInt(vColorKey);\n if (isNaN(vRgb[0])) {\n vError = true;\n }\n }\n\n // green\n vIndex = color.indexOf('G');\n if (vIndex > -1) {\n vColorKey = color.substring(vIndex + 1, vIndex + 4);\n vRgb[1] = parseInt(vColorKey);\n if (isNaN(vRgb[1])) {\n vError = true;\n }\n }\n\n // blue\n vIndex = color.indexOf('B');\n if (vIndex > -1) {\n vColorKey = color.substring(vIndex + 1, vIndex + 4);\n vRgb[2] = parseInt(vColorKey);\n if (isNaN(vRgb[2])) {\n vError = true;\n }\n }\n\n if (vError) {\n const vIndexR = color.indexOf('R');\n const vIndexG = color.indexOf('G');\n const vIndexB = color.indexOf('B');\n\n // check R\n vColorKey = color.substring(vIndexR + 1, vIndexG);\n vRgb[0] = parseInt(vColorKey);\n if (isNaN(vRgb[0])) {\n vError = true;\n }\n\n // Check G\n vColorKey = color.substring(vIndexG + 1, vIndexB);\n vRgb[1] = parseInt(vColorKey);\n if (isNaN(vRgb[1])) {\n vError = true;\n }\n\n // Check B\n vColorKey = color.substring(vIndexB + 1);\n vRgb[2] = parseInt(vColorKey);\n if (isNaN(vRgb[2])) {\n vError = true;\n }\n\n if (vError) {\n return false;\n }\n }\n\n // Check if all values are between 0 and 255\n if (\n vRgb[0] < 0 ||\n vRgb[0] > 255 ||\n vRgb[1] < 0 ||\n vRgb[1] > 255 ||\n vRgb[2] < 0 ||\n vRgb[2] > 255\n ) {\n return false;\n }\n\n // All good\n return true;\n }\n\n getHeight(): number {\n return this.height;\n }\n\n getWidth(): number {\n return this.width;\n }\n\n getShape(): string {\n return this.shape;\n }\n\n getColor(): Color {\n return this.color;\n }\n}\n\nexport class Color {\n constructor(private r: number, private g: number, private b: number) {}\n\n toString(): string {\n return `rgb(${this.r},${this.g},${this.b})`;\n }\n}\n","import { GraphicElement, Color } from './kup-image-canvas-declarations';\nimport { getColorFromString } from './kup-image-canvas-helper';\n\nexport class imageCanvas {\n graphic_element_marker_splitter = '\\\\\\\\';\n graphic_element_splitter = '\\\\\\\\AND\\\\\\\\';\n background_color = 'BCOLOR;R255G000B000';\n default_color = new Color(0, 0, 0);\n\n value: string;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n\n async drawCanvas(value: string, canvas: HTMLCanvasElement) {\n this.value = value;\n this.canvas = canvas;\n this.draw();\n return value;\n }\n\n draw(): void {\n if (!this.value) {\n return;\n }\n\n if (this.canvas.getContext) {\n this.ctx = this.canvas.getContext('2d');\n this.drawGraphicCell();\n }\n }\n\n drawGraphicCell(): void {\n const vGraphicElementDefinitionArr = this.value.split(\n this.graphic_element_splitter\n );\n\n vGraphicElementDefinitionArr.forEach((graphicElem, index) => {\n let vShapeMarker = 'SHAPE;BAR';\n let vBGColorMarker = this.background_color;\n let vHeightPctMarker = 'HEIGHT;100';\n\n const vMarkersArray = graphicElem.split(\n this.graphic_element_marker_splitter\n );\n\n const shapesArray = [];\n const vSeparatorsList = [];\n\n vMarkersArray.forEach((vString) => {\n if (this.isShapeMarker(vString)) {\n vShapeMarker = vString;\n } else if (this.isBgColorMarker(vString)) {\n vBGColorMarker = vString;\n } else if (this.isHeightMarker(vString)) {\n vHeightPctMarker = vString;\n } else if (this.isDecoratorMarker(vString)) {\n vSeparatorsList.push(vString);\n } else {\n shapesArray.push(vString);\n }\n });\n\n const vGraphicElementArray = shapesArray.map((shape) => {\n const elem = new GraphicElement();\n\n elem.init([\n vShapeMarker,\n vBGColorMarker,\n vHeightPctMarker,\n shape,\n ]);\n\n return elem;\n });\n\n if (index === 0 && vBGColorMarker !== this.background_color) {\n const bgColor = getColorFromString(\n vBGColorMarker.substring('BCOLOR;'.length)\n );\n\n this.drawRect(\n 0,\n 0,\n this.canvas.clientWidth,\n this.canvas.clientHeight,\n bgColor\n );\n }\n\n let startX = 0;\n\n vGraphicElementArray.forEach((elem) => {\n switch (elem.getShape()) {\n case 'circle':\n startX = this.getNewStarXFromCircle(startX, elem);\n break;\n\n case 'tril':\n startX = this.getNewStarXFromTril(startX, elem);\n break;\n\n case 'trir':\n startX = this.getNewStarXFromTrir(startX, elem);\n break;\n\n default:\n // bar\n startX = this.getNewStarXFromBar(startX, elem);\n break;\n }\n });\n\n vSeparatorsList.forEach((sep) => {\n if (sep.startsWith('SEP') || sep.startsWith('DIV')) {\n this.drawSeparator(sep);\n } else if (sep.startsWith('ARW')) {\n this.drawArrow(sep);\n } else if (sep.startsWith('GRID')) {\n this.drawGrid(sep);\n }\n });\n });\n }\n\n isShapeMarker(value: string): boolean {\n return value && value.toUpperCase().startsWith('SHAPE;');\n }\n\n isBgColorMarker(value: string): boolean {\n return value && value.toUpperCase().startsWith('BCOLOR;');\n }\n\n isHeightMarker(value: string): boolean {\n return value && value.toUpperCase().startsWith('HEIGHT;');\n }\n\n isDecoratorMarker(value: string): boolean {\n return (\n value &&\n (value.toUpperCase().startsWith('SEP;') ||\n value.toUpperCase().startsWith('DIV;') ||\n value.toUpperCase().startsWith('ARW;') ||\n value.toUpperCase().startsWith('GRID;'))\n );\n }\n\n getDim(dimPixel: number, dimPerc: number): number {\n return Math.floor((dimPixel / 100) * dimPerc);\n }\n\n getNewStarXFromBar(startX: number, elem: GraphicElement): number {\n if (Number.isNaN(elem.getWidth())) {\n //no width\n return startX;\n }\n const elemWidth = this.getDim(this.canvas.clientWidth, elem.getWidth());\n const elemHeight = this.getDim(\n this.canvas.clientHeight,\n elem.getHeight()\n );\n const y = this.canvas.clientHeight - elemHeight;\n\n if (!elem.isTrasparent()) {\n this.drawRect(\n startX,\n y,\n elemWidth - startX,\n elemHeight,\n elem.getColor()\n );\n }\n\n return elemWidth;\n }\n\n getNewStarXFromCircle(startX: number, circle: GraphicElement): number {\n const newStartX = this.getDim(\n this.canvas.clientWidth,\n circle.getWidth()\n );\n\n const x = (startX + newStartX) / 2;\n\n if (!circle.isTrasparent()) {\n this.drawArc(x, this.canvas.clientHeight / 2, circle.getColor());\n }\n\n return newStartX;\n }\n\n getNewStarXFromTril(startX: number, triLeft: GraphicElement): number {\n const newStartX = this.getDim(\n this.canvas.clientWidth,\n triLeft.getWidth()\n );\n\n if (!triLeft.isTrasparent()) {\n this.drawTri(\n newStartX,\n 0,\n startX,\n this.canvas.clientHeight / 2,\n triLeft.getColor()\n );\n }\n\n return newStartX;\n }\n\n getNewStarXFromTrir(startX: number, triRight: GraphicElement): number {\n const newStartX = this.getDim(\n this.canvas.clientWidth,\n triRight.getWidth()\n );\n\n if (!triRight.isTrasparent()) {\n this.drawTri(\n startX,\n 0,\n newStartX,\n this.canvas.clientHeight / 2,\n triRight.getColor()\n );\n }\n\n return newStartX;\n }\n\n drawArc(x: number, radius: number, color: Color): void {\n if(color){\n this.ctx.fillStyle = color.toString();\n }\n this.ctx.beginPath();\n this.ctx.arc(x, radius, radius, 0, 2 * Math.PI, true);\n this.ctx.fill();\n }\n\n drawRect(\n x: number,\n y: number,\n width: number,\n height: number,\n color: Color\n ): void {\n if(color){\n this.ctx.fillStyle = color.toString();\n }\n this.ctx.fillRect(x, y, width, height);\n }\n\n drawTri(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n color: Color\n ): void {\n if(color){\n this.ctx.fillStyle = color.toString();\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x1, y1);\n this.ctx.lineTo(x2, y2);\n this.ctx.lineTo(x1, this.canvas.clientHeight);\n this.ctx.fill();\n }\n\n drawArrow(sep: string): void {\n let vPart = sep.substring('ARW;'.length);\n\n if (vPart.indexOf(',') > -1) {\n vPart = vPart.replace(',', '.');\n }\n\n this.ctx.fillStyle = this.default_color.toString();\n\n const startX = this.getDim(this.canvas.clientWidth, parseFloat(vPart));\n const height = this.canvas.clientHeight;\n const arrSpan = Math.floor(height / 3);\n const arrSpanHalf = arrSpan / 2;\n\n this.ctx.beginPath();\n this.ctx.moveTo(startX, 0);\n this.ctx.lineTo(startX - arrSpan, height / 2);\n this.ctx.lineTo(startX - arrSpanHalf, height / 2);\n this.ctx.lineTo(startX - arrSpanHalf, height);\n this.ctx.lineTo(startX + arrSpanHalf, height);\n this.ctx.lineTo(startX + arrSpanHalf, height / 2);\n this.ctx.lineTo(startX + arrSpan, height / 2);\n this.ctx.fill();\n }\n\n drawGrid(sep: string): void {\n let vPart = sep.substring('GRID;'.length);\n if (vPart.indexOf(',') > -1) {\n vPart = vPart.replace(',', '.');\n }\n const vTickNum = parseInt(vPart);\n const vTickDist = this.canvas.clientWidth / vTickNum;\n\n const tickH = this.canvas.clientHeight / 5;\n const y = this.canvas.clientHeight - tickH;\n\n const tickW = 1;\n for (\n let i = vTickDist;\n i < this.canvas.clientWidth;\n i = i + vTickDist\n ) {\n this.drawRect(i, y, tickW, tickH, this.default_color);\n }\n }\n\n drawSeparator(sep: string): void {\n const vSeparatorPart = sep.substring('SEP;'.length).split(';');\n\n let vColor = 'R000G000B000';\n let vThickness = 2;\n let vPositionPart = vSeparatorPart[0];\n\n if (vSeparatorPart.length > 1) {\n vColor = vSeparatorPart[1];\n }\n if (vSeparatorPart.length > 2) {\n vThickness = parseInt(vSeparatorPart[2]);\n }\n\n if (vPositionPart.indexOf(',') > -1) {\n vPositionPart = vPositionPart.replace(',', '.');\n }\n\n const x = this.getDim(\n this.canvas.clientWidth,\n parseFloat(vPositionPart)\n );\n\n this.drawRect(\n x,\n 0,\n vThickness,\n this.canvas.clientHeight,\n getColorFromString(vColor)\n );\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-image component.\n * Used to export every prop in an object.\n */\nexport enum KupImageProps {\n badgeData = 'Sets the data of badges.',\n color = 'The color of the icon, defaults to the CSS variable --kup-icon-color.',\n customStyle = 'Custom style of the component.',\n data = \"When present, the component will be drawn using CSS. Check the 'Drawing with CSS' section of the image showcase for more information.\",\n feedback = 'When set to true, a spinner will be displayed until the image finished loading. Not compatible with SVGs.',\n isCanvas = \"The image component will create a canvas element on which it's possible to draw. It's a temporary feature that will be fully replaced by CSS drawing in the future.\",\n placeholderResource = 'An SVG that will be displayed until the image is loaded.',\n resource = 'The resource used to fetch the image.',\n sizeX = 'The width of the icon, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).',\n sizeY = 'The height of the icon, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).',\n zoomEnable = 'When set to true, a dialog will be displayed with the same resource set to 100% when image is clicked',\n}\n\nexport interface KupImageClickEventPayload extends KupEventPayload {\n el: EventTarget;\n}\n",":host {\n display: block;\n position: relative;\n transition: color 0.2s ease;\n margin: auto;\n\n #kup-component {\n margin: auto;\n position: relative;\n transition: color 0.2s ease;\n height: 100%;\n width: 100%;\n }\n\n #feedback {\n width: 32px;\n height: 32px;\n position: absolute;\n top: calc(50% - 16px);\n left: calc(50% - 16px);\n }\n}\n\n:host([is-canvas]) {\n canvas {\n height: 100%;\n width: 100%;\n }\n}\n\ncanvas {\n display: block;\n height: 100%;\n width: 100%;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport type { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { imageCanvas } from './canvas/kup-image-canvas';\nimport { KupBadge } from '../kup-badge/kup-badge';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport {\n FImageProps,\n FImageData,\n} from '../../f-components/f-image/f-image-declarations';\nimport {\n KupImageClickEventPayload,\n KupImageProps,\n} from './kup-image-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupCardFamily } from '../kup-card/kup-card-declarations';\n\n@Component({\n tag: 'kup-image',\n assetsDirs: ['assets/svg'],\n styleUrl: 'kup-image.scss',\n shadow: true,\n})\nexport class KupImage {\n /**\n * References the root HTML element of the component (<kup-image>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Sets the data of badges.\n * @default null\n */\n @Prop() badgeData: KupBadge[] = null;\n /**\n * The color of the icon, defaults to the CSS variable KupThemeColorValues.ICON.\n * @default KupThemeColorValues.ICON\n */\n @Prop() color: string = `var(${KupThemeColorValues.ICON})`;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * When present, the component will be drawn using CSS. Check the 'Drawing with CSS' section of the image showcase for more information.\n * @default null\n */\n @Prop() data: FImageData[] = null;\n /**\n * When set to true, a spinner will be displayed until the image finished loading. Not compatible with SVGs.\n * @default false\n */\n @Prop() feedback: boolean = false;\n /**\n * The image component will create a canvas element on which it's possible to draw. It's a temporary feature that will be fully replaced by CSS drawing in the future.\n * @default false\n */\n @Prop() isCanvas: boolean = false;\n /**\n * An SVG that will be displayed until the image is loaded.\n * @default \"\"\n */\n @Prop() placeholderResource = '';\n /**\n * The resource used to fetch the image.\n * @default null\n */\n @Prop() resource: string = null;\n /**\n * The width of the icon, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).\n * @default '100%'\n */\n @Prop() sizeX: string = '100%';\n /**\n * The height of the icon, defaults to 100%. Accepts any valid CSS format (px, %, vh, etc.).\n * @default '100%'\n */\n @Prop() sizeY: string = '100%';\n\n /**\n * When set to true, a dialog will be displayed with the same resource set to 100% when image is clicked.\n * @default false\n */\n @Prop() zoomEnable: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Reference to the canvas element.\n */\n private canvas: HTMLCanvasElement;\n /**\n * Instance of the imageCanvas class.\n */\n private imageCanvas: imageCanvas;\n /**\n * True when the resource is an URL.\n */\n private isUrl: boolean = false;\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n card: HTMLKupCardElement = null;\n dialog: HTMLKupDialogElement = null;\n image: HTMLKupImageElement = null;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-image-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupImageClickEventPayload>;\n\n onKupClick(e: Event) {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n el: e.target,\n });\n if (this.zoomEnable) {\n this.createDialog();\n }\n }\n\n @Event({\n eventName: 'kup-image-load',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupLoad: EventEmitter<KupImageClickEventPayload>;\n\n onKupLoad(e: Event) {\n this.kupLoad.emit({\n comp: this,\n id: this.rootElement.id,\n el: e.target,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupImageProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupImageProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Render the canvas variant of kup-image.\n * @todo should be handled inside f-image.\n */\n private renderCanvas(): HTMLDivElement {\n return (\n <div\n id=\"kup-component\"\n onClick={(e) => this.onKupClick(e)}\n class=\"is-canvas\"\n >\n <canvas ref={(el) => (this.canvas = el)}>\n {this.resource}\n </canvas>\n </div>\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n this.isUrl = false;\n if (this.resource) {\n if (\n this.resource.indexOf('.') > -1 ||\n this.resource.indexOf('/') > -1 ||\n this.resource.indexOf('\\\\') > -1\n ) {\n this.isUrl = true;\n }\n }\n }\n\n componentDidRender() {\n if (this.isCanvas && !this.imageCanvas) {\n this.imageCanvas = new imageCanvas();\n }\n if (this.isCanvas && this.resource) {\n this.canvas.height = this.canvas.clientHeight;\n this.canvas.width = this.canvas.clientWidth;\n this.imageCanvas.drawCanvas(this.resource, this.canvas);\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n createDialog() {\n this.card = document.createElement('kup-card');\n this.card.layoutFamily = KupCardFamily.FREE;\n this.card.layoutNumber = 1;\n this.card.sizeX = '100%';\n this.card.sizeY = '100%';\n\n this.image = document.createElement('kup-image');\n this.image.resource = this.resource;\n this.image.placeholderResource = this.placeholderResource;\n this.image.zoomEnable = false;\n this.image.sizeX = '100%';\n this.image.sizeY = '100%';\n\n this.card.appendChild(this.image);\n\n this.dialog = document.createElement('kup-dialog');\n this.dialog.id = 'kup-image-zoom';\n this.dialog.sizeX = '80vw';\n this.dialog.sizeY = '80vh';\n this.dialog.addEventListener('kup-dialog-close', () => this.hide());\n this.dialog.appendChild(this.card);\n document.body.appendChild(this.dialog);\n }\n\n hide() {\n if (this.image) {\n this.image.remove();\n this.image = null;\n this.card.remove();\n this.card = null;\n this.dialog.remove();\n this.dialog = null;\n }\n }\n\n render() {\n let el: Element;\n let feedback: HTMLElement;\n let spinnerLayout: number;\n\n const props: FImageProps = {\n badgeData: this.badgeData,\n color: this.color,\n data: this.data,\n fit: this.rootElement.classList.contains('kup-fit') ? true : false,\n placeholderResource: this.placeholderResource,\n resource: this.resource,\n sizeX: this.sizeX,\n sizeY: this.sizeY,\n onClick: (e) => this.onKupClick(e),\n onLoad: (e) => this.onKupLoad(e),\n };\n\n let elStyle: {\n height: string;\n minHeight: string;\n width: string;\n minWidth: string;\n } = {\n height: props.sizeY,\n minHeight: props.sizeY,\n width: props.sizeX,\n minWidth: props.sizeX,\n };\n\n if (this.feedback && this.isUrl) {\n spinnerLayout = 14;\n feedback = (\n <div id=\"feedback\" title=\"Image not loaded yet...\">\n <kup-spinner\n dimensions=\"3px\"\n active\n layout={spinnerLayout}\n ></kup-spinner>\n </div>\n );\n }\n\n if (this.isCanvas) {\n el = this.renderCanvas();\n } else if (props.resource || props.data) {\n el = <FImage {...props}></FImage>;\n } else {\n let message = 'Resource undefined, not rendering!';\n this.kupManager.debug.logMessage(\n this,\n message,\n KupDebugCategory.WARNING\n );\n return;\n }\n\n return (\n <Host style={elStyle}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n {feedback}\n <div id={componentWrapperId}>{el}</div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","@import 'styles/kup-list-main.scss';\n@import 'styles/kup-list-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n VNode,\n} from '@stencil/core';\nimport {\n KupListNode,\n KupListEventPayload,\n KupListProps,\n KupListRole,\n} from './kup-list-declarations';\nimport { KupRadio } from '../kup-radio/kup-radio';\nimport { ItemsDisplayMode } from './kup-list-declarations';\nimport { getIdOfItemByDisplayMode } from './kup-list-helper';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { FCheckbox } from '../../f-components/f-checkbox/f-checkbox';\n\n@Component({\n tag: 'kup-list',\n styleUrl: 'kup-list.scss',\n shadow: true,\n})\nexport class KupList {\n /**\n * References the root HTML element of the component (<kup-list>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The focused list item.\n * @default null\n */\n @State() focused: number = null;\n /**\n * The selected list items.\n * @default []\n */\n @State() selected: string[] = [];\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The data of the list.\n * @default []\n */\n @Prop({ mutable: true }) data: KupListNode[] = [];\n /**\n * Selects how the items must display their label and how they can be filtered for.\n * @default ItemsDisplayMode.DESCRIPTION\n */\n @Prop() displayMode: ItemsDisplayMode = ItemsDisplayMode.DESCRIPTION;\n /**\n * Keeps string for filtering elements when filter mode is active\n * @default ''\n */\n @Prop({ mutable: true }) filter: string = '';\n /**\n * Hides rows' text, ideally to display a list of icons only.\n * @default false\n */\n @Prop() hideText: boolean = false;\n /**\n * Defines whether the list is a menu or not.\n * @default false\n */\n @Prop() isMenu: boolean = false;\n /**\n * When true, enables items' navigation through arrow keys.\n * @default true\n */\n @Prop() keyboardNavigation: boolean = true;\n /**\n * Sets the status of the menu, when false it's hidden otherwise it's visible.\n * @default false\n */\n @Prop() menuVisible: boolean = false;\n /**\n * Defines the type of selection. Values accepted: listbox, radiogroup or group.\n * @default KupListRole.LISTBOX\n */\n @Prop({ mutable: true }) roleType?: KupListRole = KupListRole.LISTBOX;\n /**\n * Defines whether items are selectable or not.\n * @default true\n */\n @Prop() selectable: boolean = true;\n /**\n * Displays the icons associated to each row when set to true.\n * @default false\n */\n @Prop() showIcons: boolean = false;\n /**\n * The list elements descriptions will be arranged in two lines.\n * @default false\n */\n @Prop() twoLine: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n\n #radios: KupRadio[] = [];\n #listItems: HTMLElement[] = [];\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-list-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupEventPayload>;\n\n @Event({\n eventName: 'kup-list-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupEventPayload>;\n\n @Event({\n eventName: 'kup-list-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupListEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n onKupClick(index: number) {\n this.#handleSelection(index);\n }\n\n /*-------------------------------------------------*/\n /* L i s t e n e r s */\n /*-------------------------------------------------*/\n\n @Listen('keydown')\n listenKeydown(e: KeyboardEvent) {\n if (this.keyboardNavigation) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n this.focusNext();\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n this.focusPrevious();\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n this.#handleSelection(this.focused);\n break;\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Focuses the next element of the list.\n */\n @Method()\n async focusNext(): Promise<void> {\n if (\n isNaN(this.focused) ||\n this.focused === null ||\n this.focused === undefined\n ) {\n if (this.selected.length === 1) {\n const selectedItem: KupListNode = this.data.find(\n (x: KupListNode) => x.id === this.selected[0]\n );\n this.focused = this.data.indexOf(selectedItem) + 1;\n } else {\n this.focused = 0;\n }\n } else {\n this.focused++;\n }\n if (this.focused > this.#listItems.length - 1) {\n this.focused = 0;\n }\n this.#listItems[this.focused].focus();\n }\n /**\n * Focuses the previous element of the list.\n */\n @Method()\n async focusPrevious(): Promise<void> {\n if (\n isNaN(this.focused) ||\n this.focused === null ||\n this.focused === undefined\n ) {\n if (this.selected.length === 1) {\n const selectedItem: KupListNode = this.data.find(\n (x: KupListNode) => x.id === this.selected[0]\n );\n this.focused = this.data.indexOf(selectedItem) - 1;\n } else {\n this.focused = 0;\n }\n } else {\n this.focused--;\n }\n if (this.focused < 0) {\n this.focused = this.#listItems.length - 1;\n }\n this.#listItems[this.focused].focus();\n }\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupListProps, descriptions);\n }\n /**\n * Returns the selected node.\n * @returns {Promise<KupListNode>} Selected node.\n */\n @Method()\n async getSelectedNode(): Promise<KupListNode[]> {\n const nodes: KupListNode[] = [];\n this.data.forEach((node) => {\n if (this.selected.includes(node.id)) {\n nodes.push(node);\n }\n });\n return nodes;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Calls handleSelection internal method to select the given item.\n * @param {number} index - Based zero index of the item that must be selected, when not provided the list will attempt to select the focused element.\n */\n @Method()\n async select(index?: number): Promise<void> {\n if (index === undefined) {\n index = this.focused;\n }\n this.#handleSelection(index);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupListProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Selects the specified item.\n * @param {number} index - Based zero index of the item that must be selected, when not provided the list will attempt to select the focused element.\n */\n #handleSelection(index: number): void {\n if (index !== null && index !== undefined && !isNaN(index)) {\n const listItems: NodeListOf<HTMLElement> =\n this.rootElement.shadowRoot.querySelectorAll('.list-item');\n const id: string = listItems[index].dataset.id;\n const dataEl = this.data.find((x: KupListNode) => x.id === id);\n switch (this.roleType) {\n case KupListRole.GROUP:\n if (this.selected.includes(id)) {\n this.selected.splice(this.selected.indexOf(id), 1);\n } else {\n this.selected.push(id);\n }\n this.selected = new Array(...this.selected);\n break;\n default:\n this.selected = new Array(id);\n break;\n }\n for (let index = 0; index < this.data.length; index++) {\n const item = this.data[index];\n item.selected = this.selected.includes(item.id);\n }\n\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n selected: dataEl,\n index,\n });\n }\n }\n\n #isNested() {\n return this.rootElement.hasAttribute('nested-list');\n }\n\n #renderListItem(item: KupListNode, index: number) {\n if (item.selected != true) {\n item.selected = false;\n }\n if (!item.id) {\n item.id = item.value;\n }\n\n let nestedList: VNode = null;\n if (item.children && item.children.length > 0) {\n this.rootElement.setAttribute('nested-list', '');\n nestedList = (\n <kup-list\n class=\"kup-paddingless\"\n data={item.children}\n isMenu={true}\n menuVisible={true}\n nested-list\n ></kup-list>\n );\n }\n\n let imageTag: HTMLElement = undefined;\n if (\n this.showIcons == true &&\n item.icon != null &&\n item.icon.trim() != ''\n ) {\n imageTag = this.#getIconTag(item.icon, item.placeholderIcon);\n }\n let primaryTextTag = [\n getIdOfItemByDisplayMode(item, this.displayMode, ' - '),\n ];\n\n let secTextTag = [];\n if (this.twoLine && item.secondaryText && item.secondaryText != '') {\n primaryTextTag = [\n <span class=\"list-item__primary-text\">{item.value}</span>,\n ];\n secTextTag = [\n <span class=\"list-item__secondary-text\">\n {item.secondaryText}\n </span>,\n ];\n }\n let classAttr = 'list-item';\n let tabIndexAttr = item.selected == true ? '0' : '-1';\n if (\n !this.#isNested() &&\n item.selected == true &&\n this.#isListBoxRule()\n ) {\n classAttr += ' list-item--selected';\n }\n if (this.focused === index) {\n classAttr += ' list-item--focused';\n }\n let roleAttr = 'option';\n\n let ariaCheckedAttr: string = null;\n let ariaSelectedAttr: string = item.selected == true ? 'true' : 'false';\n if (this.selectable != true) {\n ariaSelectedAttr = null;\n }\n let innerSpanTag = [\n imageTag,\n <span class=\"list-item__text\">\n {primaryTextTag}\n {secTextTag}\n </span>,\n ];\n if (this.#isRadioButtonRule()) {\n roleAttr = 'radio';\n ariaCheckedAttr = item.selected == true ? 'true' : 'false';\n let dataTmp = [\n {\n value: item.id,\n label: '',\n checked: item.selected == true ? true : false,\n },\n ];\n let trickForMDC = {\n display: 'none',\n };\n innerSpanTag = [\n <span class=\"list-item__graphic\">\n <input type=\"radio\" style={trickForMDC} />\n <kup-radio\n data={dataTmp}\n id={this.rootElement.id + '_' + index}\n ref={(el) => (this.#radios[index] = el as any)}\n ></kup-radio>\n </span>,\n imageTag,\n <label\n class=\"list-item__text\"\n htmlFor={this.rootElement.id + '_' + index}\n >\n {primaryTextTag}\n {secTextTag}\n </label>,\n ];\n } else if (this.#isCheckBoxRule()) {\n roleAttr = 'checkbox';\n ariaCheckedAttr = item.selected == true ? 'true' : 'false';\n let checkedAttr: boolean = item.selected == true ? true : false;\n\n let trickForMDC = {\n display: 'none',\n };\n\n innerSpanTag = [\n <span class=\"list-item__graphic\">\n <input type=\"checkbox\" style={trickForMDC} />\n <FCheckbox checked={checkedAttr} />\n </span>,\n imageTag,\n <label\n class=\"list-item__text\"\n htmlFor={this.rootElement.id + '_' + index}\n >\n {primaryTextTag}\n {secTextTag}\n </label>,\n ];\n }\n const vNodes: VNode[] = [];\n if (item.separator) {\n vNodes.push(<li role=\"separator\" class=\"list-divider\"></li>);\n }\n vNodes.push(\n <li\n ref={(el: HTMLLIElement) => {\n this.#listItems.push(el);\n }}\n class={classAttr}\n role={roleAttr}\n tabindex={tabIndexAttr}\n data-id={item.id}\n aria-selected={ariaSelectedAttr}\n aria-checked={ariaCheckedAttr}\n onBlur={\n !this.selectable\n ? (e: FocusEvent) => e.stopPropagation()\n : () => this.onKupBlur()\n }\n onFocus={\n !this.selectable\n ? (e: FocusEvent) => e.stopPropagation()\n : () => this.onKupFocus()\n }\n onClick={\n !this.selectable\n ? (e: MouseEvent) => e.stopPropagation()\n : this.#isNested()\n ? (e: MouseEvent) => {\n e.stopPropagation();\n this.onKupClick(index);\n }\n : () => this.onKupClick(index)\n }\n >\n {innerSpanTag}\n {nestedList\n ? [\n <FImage\n resource=\"chevron-right\"\n sizeX=\"1.5em\"\n sizeY=\"1.5em\"\n wrapperClass=\"list-item__expand-icon\"\n ></FImage>,\n nestedList,\n ]\n : null}\n </li>\n );\n return vNodes;\n }\n\n #getIconTag(icon: string, placeholderIcon: string) {\n const large: boolean = this.rootElement.classList.contains('kup-large');\n const propsFImage = {\n color: `var(--kup-list-fimage-color, var(--kup-text-secondary))`,\n sizeX: large ? '24px' : '16px',\n sizeY: large ? '24px' : '16px',\n };\n\n return (\n <FImage\n {...propsFImage}\n resource={icon}\n placeholderResource={placeholderIcon}\n wrapperClass={`icon-button__icon kup-icon`}\n />\n );\n }\n\n #isMultiSelection(): boolean {\n return this.#isCheckBoxRule();\n }\n\n #isCheckBoxRule(): boolean {\n return this.roleType == KupListRole.GROUP;\n }\n\n #isRadioButtonRule(): boolean {\n return this.roleType == KupListRole.RADIOGROUP;\n }\n\n #isListBoxRule(): boolean {\n return this.roleType == KupListRole.LISTBOX;\n }\n\n #checkRoleType() {\n if (!this.#isCheckBoxRule() && !this.#isRadioButtonRule()) {\n this.roleType = KupListRole.LISTBOX;\n }\n }\n\n #itemCompliant(item: KupListNode): boolean {\n if (!this.filter) {\n return true;\n }\n\n return (\n item.id.toLowerCase().indexOf(this.filter.toLowerCase()) >= 0 ||\n item.value.toLowerCase().indexOf(this.filter.toLowerCase()) >= 0\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.theme.register(this);\n for (let index = 0; index < this.data.length; index++) {\n const el: KupListNode = this.data[index];\n if (el.selected) {\n this.selected.push(el.id);\n }\n }\n }\n\n componentDidLoad() {\n this.#kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n if (\n this.isMenu &&\n this.menuVisible &&\n (!document.activeElement ||\n document.activeElement.tagName === 'BODY')\n ) {\n setTimeout(() => {\n this.rootElement.focus();\n }, 0);\n }\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n this.#listItems = [];\n let componentClass: string = 'list';\n let wrapperClass = undefined;\n\n if (this.isMenu) {\n wrapperClass = 'kup-menu';\n\n if (this.menuVisible) {\n wrapperClass += ' visible';\n }\n }\n\n this.#checkRoleType();\n\n if (this.selectable != true) {\n componentClass += ' list--non-interactive';\n }\n\n if (this.twoLine) {\n componentClass += ' list--two-line';\n }\n\n if (this.hideText) {\n componentClass += ' text-hidden';\n }\n\n if (!this.data || this.data.length === 0) {\n componentClass += ' list--empty';\n }\n\n let roleAttr = this.roleType;\n\n let ariaMultiSelectable: string = 'false';\n if (this.#isMultiSelection()) {\n ariaMultiSelectable = 'true';\n }\n\n this.#radios = [];\n let index = 0;\n\n return (\n <Host>\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id=\"kup-component\" class={wrapperClass}>\n <ul\n class={componentClass}\n role={roleAttr}\n aria-multiselectable={ariaMultiSelectable}\n >\n {this.data\n .filter((item) => this.#itemCompliant(item))\n .map((item) => this.#renderListItem(item, index++))}\n </ul>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.#kupManager.theme.unregister(this);\n }\n}\n","/**\n * Props of the kup-progress-bar component.\n * Used to export every prop in an object.\n */\nexport enum KupProgressBarProps {\n centeredLabel = \"Displays the label in the middle of the progress bar. It's the default for the radial variant and can't be changed.\",\n customStyle = 'Custom style of the component.',\n hideLabel = \"Flag to show or hide the progress bar's label.\",\n icon = 'Specifies an icon to replace the label.',\n label = \"Specifies a text for the bar's label.\",\n isRadial = 'Radial version.',\n value = 'The current value the progress bar must display.',\n}\n","/**\n* @prop --kup-progressbar-border-radius: Sets border radius of the component.\n* @prop --kup-progressbar-font-family: Sets font family of the component.\n* @prop --kup-progressbar-font-size: Sets font size of the component.\n* @prop --kup-progressbar-height: Sets height of the component.\n* @prop --kup-progressbar-primary-color: Sets primary color of the component.\n* @prop --kup-progressbar-text-color: Sets text color of the component.\n* @prop --kup-progressbar-text-color-rgb: Sets text color RGB values of the component (used for shaders).\n* @prop --kup-progressbar-text-on-primary-color: Sets text on primary color of the component.\n* @prop --kup-progressbar-track-color: Sets track color of the progress bar (empty section).\n* @prop --kup-progressbar-width: Sets width of the component.\n*/\n\n:host {\n display: block;\n width: var(--kup-progressbar-width, 100%);\n}\n","import {\n Component,\n Element,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\n\nimport type { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupProgressBarProps } from './kup-progress-bar-declarations';\nimport { FProgressBar } from '../../f-components/f-progress-bar/f-progress-bar';\nimport { FProgressBarProps } from '../../f-components/f-progress-bar/f-progress-bar-declarations';\n\n@Component({\n tag: 'kup-progress-bar',\n styleUrl: 'kup-progress-bar.scss',\n shadow: true,\n})\nexport class KupProgressBar {\n /**\n * References the root HTML element of the component (<kup-progress-bar>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Displays the label in the middle of the progress bar. It's the default for the radial variant and can't be changed.\n * @default true\n */\n @Prop() centeredLabel: boolean = true;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Flag to show or hide the progress bar's label.\n * @default false\n */\n @Prop() hideLabel: boolean = false;\n /**\n * Specifies an icon to replace the label.\n * @default null\n */\n @Prop() icon: string = null;\n /**\n * Specifies a text for the bar's label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * Radial version.\n * @default false\n */\n @Prop({ reflect: true }) isRadial: boolean = false;\n /**\n * The current value the progress bar must display.\n * @default 0\n */\n @Prop() value: number = 0;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupProgressBarProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupProgressBarProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n\n if (root && this.isRadial) {\n let deg = this.value * 3.6 + 'deg';\n root.querySelector('.left-side').setAttribute(\n 'style',\n 'transform: rotate(' + deg + ')'\n );\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FProgressBarProps = {\n animated: this.rootElement.classList.contains('kup-animated')\n ? true\n : false,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n centeredLabel: this.centeredLabel,\n hideLabel: this.hideLabel,\n icon: this.icon,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n isRadial: this.isRadial,\n label: this.label,\n padded: this.rootElement.classList.contains('kup-padded')\n ? true\n : false,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n slim: this.rootElement.classList.contains('kup-slim')\n ? true\n : false,\n striped: this.rootElement.classList.contains('kup-striped')\n ? true\n : false,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n value: this.value,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FProgressBar {...props}></FProgressBar>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-radio component.\n * Used to export every prop in an object.\n */\nexport enum KupRadioProps {\n columns = 'Number of columns. When undefined, radio fields will be displayed inline.',\n customStyle = 'Custom style of the component.',\n data = 'List of elements.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n leadingLabel = 'Defaults at false. When set to true, the label will be on the left of the component.',\n}\n\nexport interface KupRadioChangeEventPayload extends KupEventPayload {\n value: string;\n}\n","/**\n* @prop --kup-radio-font-family: Sets font family of the radio's label.\n* @prop --kup-radio-font-size: Sets font size of the radio's label.\n* @prop --kup-radio-font-weight: Sets font weight of the radio's label.\n* @prop --kup-radio-outer-circle-color: Sets color of the outer circle.\n* @prop --kup-radio-primary-color: Sets primary color of the component.\n* @prop --kup-radio-primary-color-rgb: Sets primary color RGB values of the component.\n* @prop --kup-radio-text-color: Sets text color of the radio's label.\n*/\n\n:host {\n display: block;\n}\n\n.kup-radio-wrapper {\n display: grid;\n gap: var(--kup-space-03);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport type {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n KupRadioChangeEventPayload,\n KupRadioProps,\n} from './kup-radio-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { FRadio } from '../../f-components/f-radio/f-radio';\nimport {\n FRadioData,\n FRadioProps,\n} from '../../f-components/f-radio/f-radio-declarations';\n\n@Component({\n tag: 'kup-radio',\n styleUrl: 'kup-radio.scss',\n shadow: true,\n})\nexport class KupRadio {\n /**\n * References the root HTML element of the component (<kup-radio>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The value of the component.\n * @default \"\"\n */\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Number of columns. When null, radio fields will be displayed inline.\n * @default null\n */\n @Prop() columns: number = null;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * List of elements.\n * @default null\n */\n @Prop() data: FRadioData[] = null;\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Defaults at false. When set to true, the component is horizontal.\n * @default false\n */\n @Prop() horizontal: boolean = false;\n /**\n * When set, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = '';\n /**\n * Defaults at false. When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the input element loses focus.\n */\n @Event({\n eventName: 'kup-radio-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupEventPayload>;\n /**\n * Triggered when the input element's value changes.\n */\n @Event({\n eventName: 'kup-radio-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupRadioChangeEventPayload>;\n /**\n * Triggered when the input element gets focused.\n */\n @Event({\n eventName: 'kup-radio-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n onKupChange(i: number) {\n this.value = this.data[i].value;\n for (let index = 0; index < this.data.length; index++) {\n const radio: FRadioData = this.data[index];\n if (index === i) {\n radio.checked = true;\n } else {\n radio.checked = false;\n }\n }\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n this.refresh();\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupRadioProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupRadioProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n if (!this.data || this.data.length === 0) {\n return;\n }\n\n const props: FRadioProps = {\n columns: this.columns,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n data: this.data,\n disabled: this.disabled,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n horizontal: this.rootElement.classList.contains('kup-horizontal')\n ? true\n : false,\n leadingLabel: this.leadingLabel,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n onBlur: () => this.onKupBlur(),\n onChange: (i) => this.onKupChange(i),\n onFocus: () => this.onKupFocus(),\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} class=\"kup-radio-wrapper\">\n <FRadio {...props}></FRadio>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-rating component.\n * Used to export every prop in an object.\n */\nexport enum KupRatingProps {\n customStyle = 'Custom style of the component.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n maxValue = 'Max number of stars (default 5)',\n value = 'Rated stars',\n}\n\nexport interface KupRatingClickEventPayload extends KupEventPayload {\n value: number;\n}\n","/**\n* @prop --kup-rating-color: Sets color of the component.\n* @prop --kup-rating-font-size: Sets font size of the component.\n*/\n\n:host {\n display: block;\n}\n","import {\n Component,\n Event,\n Element,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport {\n KupRatingClickEventPayload,\n KupRatingProps,\n} from './kup-rating-declarations';\nimport { FRating } from '../../f-components/f-rating/f-rating';\nimport { FRatingProps } from '../../f-components/f-rating/f-rating-declarations';\n\n@Component({\n tag: 'kup-rating',\n styleUrl: 'kup-rating.scss',\n shadow: true,\n})\nexport class KupRating {\n /**\n * References the root HTML element of the component (<kup-rating>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Max number of stars (default 5).\n * @default 5\n */\n @Prop() maxValue: number = 5;\n /**\n * Rated stars.\n * @default 0\n */\n @Prop() value: number = 0;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-rating-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupRatingClickEventPayload>;\n\n onKupClick(newValue: number) {\n if (!this.disabled) {\n this.value = newValue;\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n this.refresh();\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupRatingProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupRatingProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FRatingProps = {\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n maxValue: this.maxValue,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n value: this.value,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n onClick: (i) => this.onKupClick(i),\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FRating {...props}></FRating>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","/**\n * Props of the kup-spinner component.\n * Used to export every prop in an object.\n */\nexport enum KupSpinnerProps {\n active = 'When set to true the spinner is animating.',\n barVariant = 'Defaults at false. When set to true, the component is disabled.',\n customStyle = 'Max number of stars (default 5)',\n dimensions = 'Width and height of the spinner. For the bar variant, only height.',\n fader = 'Places a blend modal over the wrapper to darken the view (or lighten, when the theme is dark).',\n faderTimeout = 'The time required for the \"fader\" to trigger.',\n fullScreen = 'When set to true the component will fill the whole viewport.',\n layout = 'Sets the layout of the spinner.',\n}\n","@import 'styles/kup-spinner-main.scss';\n@import 'styles/kup-spinner-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupSpinnerProps } from './kup-spinner-declarations';\n\n@Component({\n tag: 'kup-spinner',\n styleUrl: 'kup-spinner.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class KupSpinner {\n /**\n * References the root HTML element of the component (<kup-spinner>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * When set to true the spinner is animating.\n * @default false\n */\n @Prop({ reflect: true }) active: boolean = false;\n /**\n * Decides whether the component is a bar or a spinner.\n * @default false\n */\n @Prop() barVariant: boolean = false;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Width and height of the spinner. For the bar variant, only height.\n * @default false\n */\n @Prop() dimensions: string = null;\n /**\n * Places a blend modal over the wrapper to darken the view (or lighten, when the theme is dark).\n * @default false\n */\n @Prop() fader: boolean = false;\n /**\n * The time required for the \"fader\" to trigger.\n * @default 3500\n */\n @Prop() faderTimeout: number = 3500;\n /**\n * When set to true the component will fill the whole viewport.\n * @default false\n */\n @Prop({ reflect: true }) fullScreen: boolean = false;\n /**\n * Sets the layout of the spinner.\n * @default 1\n */\n @Prop() layout: number = 1;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the component is ready.\n */\n @Event({\n eventName: 'kup-spinner-ready',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupSpinnerReady: EventEmitter<KupEventPayload>;\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupSpinnerProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupSpinnerProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupSpinnerReady.emit({\n comp: this,\n id: this.rootElement.id,\n });\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentDidUpdate() {\n const root = this.rootElement.shadowRoot;\n if (root) {\n root.querySelector('#loading-wrapper-master').classList.remove(\n 'loading-wrapper-big-wait'\n );\n }\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n\n if (root) {\n if (this.fader) {\n setTimeout(function () {\n root.querySelector('#loading-wrapper-master').classList.add(\n 'loading-wrapper-big-wait'\n );\n }, this.faderTimeout);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n let masterClass = '';\n let wrapperClass = '';\n let spinnerClass = '';\n let spinnerEl: any = '';\n let elStyle = undefined;\n\n if (this.barVariant) {\n masterClass += ' bar-version';\n wrapperClass = 'loading-wrapper-master-bar';\n spinnerClass = 'spinner-bar-v' + this.layout;\n } else {\n masterClass += ' spinner-version';\n wrapperClass = 'loading-wrapper-master-spinner';\n spinnerClass = 'spinner-v' + this.layout;\n if (this.layout === 7) {\n spinnerEl = [\n <div class=\"sk-spinner-v7-dot\"></div>,\n <div class=\"sk-spinner-v7-dot\"></div>,\n <div class=\"sk-spinner-v7-dot\"></div>,\n <div class=\"sk-spinner-v7-dot\"></div>,\n <div class=\"sk-spinner-v7-dot\"></div>,\n <div class=\"sk-spinner-v7-dot\"></div>,\n ];\n }\n if (this.layout === 9) {\n spinnerEl = [\n <div class=\"sk-spinner-v9-bounce1\"></div>,\n <div class=\"sk-spinner-v9-bounce2\"></div>,\n ];\n }\n if (this.layout === 10) {\n spinnerEl = [\n <div class=\"sk-spinner-v10-cube1\"></div>,\n <div class=\"sk-spinner-v10-cube2\"></div>,\n ];\n }\n if (this.layout === 12) {\n spinnerEl = [\n <div class=\"sk-spinner-v12-dot1\"></div>,\n <div class=\"sk-spinner-v12-dot2\"></div>,\n ];\n }\n if (this.layout === 13) {\n spinnerEl = [\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube1\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube2\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube3\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube4\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube5\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube6\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube7\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube8\"></div>,\n <div class=\"sk-spinner-v13-cube sk-spinner-v13-cube9\"></div>,\n ];\n }\n if (this.layout === 14) {\n spinnerEl = [\n <div class=\"sk-spinner-v14-circle1 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle2 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle3 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle4 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle5 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle6 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle7 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle8 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle9 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle10 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle11 sk-spinner-v14-circle\"></div>,\n <div class=\"sk-spinner-v14-circle12 sk-spinner-v14-circle\"></div>,\n ];\n }\n }\n\n if (!this.fullScreen) {\n elStyle = {\n height: '100%',\n width: '100%',\n };\n }\n\n if (this.dimensions) {\n elStyle = {\n ...elStyle,\n fontSize: this.dimensions,\n };\n } else if (!this.barVariant) {\n elStyle = {\n ...elStyle,\n fontSize: '16px',\n };\n } else {\n elStyle = {\n ...elStyle,\n fontSize: '3px',\n };\n }\n\n return (\n <Host style={elStyle}>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} style={elStyle}>\n <div\n id=\"loading-wrapper-master\"\n class={masterClass}\n style={elStyle}\n >\n <div id={wrapperClass} style={elStyle}>\n <div class={spinnerClass}>{spinnerEl}</div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from \"../../types/GenericTypes\";\n\n/**\n * Props of the kup-switch component.\n * Used to export every prop in an object.\n */\nexport enum KupSwitchProps {\n checked = \"Defaults at false. When set to true, the component will be set to 'checked'.\",\n customStyle = 'Custom style of the component.',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n label = 'Defaults at null. When specified, its content will be shown as a label.',\n leadingLabel = 'Defaults at false. When set to true, the label will be on the left of the component.',\n}\n\nexport interface KupSwitchEventPayload extends KupEventPayload {\n value: string;\n}\n","/**\n* NOTE: These variables are used in the related f-component.\n*\n* @prop --kup-switch-font-family: Sets font family of the switch's label.\n* @prop --kup-switch-font-size: Sets font size of the switch's label.\n* @prop --kup-switch-font-weight: Sets font weight of the switch's label.\n* @prop --kup-switch-label-color: Sets text color of the switch's label.\n* @prop --kup-switch-primary-color: Sets primary color of the component.\n* @prop --kup-switch-primary-color-rgb: Sets primary color RGB values of the component.\n* @prop --kup-switch-thumb-color: Sets thumb color.\n*/\n\n:host {\n display: block;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FSwitch } from '../../f-components/f-switch/f-switch';\nimport {\n FSwitchProps,\n FSwitchSizing,\n} from '../../f-components/f-switch/f-switch-declarations';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport {\n KupSwitchEventPayload,\n KupSwitchProps,\n} from './kup-switch-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-switch',\n styleUrl: 'kup-switch.scss',\n shadow: true,\n})\nexport class KupSwitch {\n /**\n * References the root HTML element of the component (<kup-switch>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The value of the component.\n * @default \"\"\n */\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Defaults at false. When set to true, the component will be set to 'checked'.\n * @default false\n */\n @Prop({ mutable: true }) checked: boolean = false;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Defaults at null. When specified, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * Defaults at false. When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n /**\n * Sets the size of the switch\n * @default FSwitchSizing.MEDIUM\n */\n @Prop() sizing: FSwitchSizing = FSwitchSizing.MEDIUM;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the input element loses focus.\n */\n @Event({\n eventName: 'kup-switch-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupSwitchEventPayload>;\n /**\n * Triggered when the input element's value changes.\n */\n @Event({\n eventName: 'kup-switch-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupSwitchEventPayload>;\n /**\n * Triggered when the input element gets focused.\n */\n @Event({\n eventName: 'kup-switch-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupSwitchEventPayload>;\n\n onKupBlur() {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupChange() {\n if (this.checked) {\n this.checked = false;\n this.value = 'off';\n } else {\n this.checked = true;\n this.value = 'on';\n }\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupSwitchProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupSwitchProps, props);\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n if (this.checked) {\n this.value = 'on';\n } else {\n this.value = 'off';\n }\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n let props: FSwitchProps = {\n checked: this.checked,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n disabled: this.disabled,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n label: this.label,\n leadingLabel: this.leadingLabel,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n sizing: this.sizing,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n onBlur: () => this.onKupBlur(),\n onChange: () => this.onKupChange(),\n onFocus: () => this.onKupFocus(),\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FSwitch {...props} />\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupDataNode } from '../../managers/kup-data/kup-data-declarations';\nimport { KupObj } from '../../managers/kup-objects/kup-objects-declarations';\nimport { GenericObject, KupEventPayload } from '../../types/GenericTypes';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\n\n/**\n * Props of the kup-tab-bar component.\n * Used to export every prop in an object.\n */\nexport enum KupTabBarProps {\n customStyle = 'Custom style of the component.',\n data = 'List of elements.',\n ripple = \"When enabled displays Material's ripple effect on item headers.\",\n toolbar = 'when true, it will show the toolbar activation icon',\n variant = 'Variant of the component. It is either flat or contained',\n}\n\n/**\n * Styling options for the f-button component.\n * @enum {string}\n * @property {string} FLAT - Flat style: no background nor borders.\n * @property {string} CONTAINED - Background and active field as background.\n\n */\nexport enum KupTabbarStyling {\n FLAT = 'flat',\n CONTAINED = 'contained',\n}\n\n/**\n * The object of a single radio.\n */\nexport interface KupTabBarNode extends KupDataNode {\n active?: boolean;\n danger?: boolean;\n}\n\nexport interface KupTabBarEventPayload extends KupEventPayload {\n node: KupTabBarNode;\n index: number;\n}\n","/**\n* @prop --kup-tabbar-font-family: Sets font family of the component.\n* @prop --kup-tabbar-font-size: Sets font size of the component.\n* @prop --kup-tabbar-font-weight: Sets font weight of the component.\n* @prop --kup-tabbar-height: Sets height of the component.\n* @prop --kup-tabbar-primary-color: Sets primary color of the component.\n* @prop --kup-tabbar-primary-color-rgb: Sets primary color RGB values of the component (used for shaders).\n* @prop --kup-tabbar-tab-padding: Sets padding of each tab.\n*/\n\n:host {\n --kup_tabindicator_border_bottom_color: var(\n --kup-tab-indicator-border-bottom-color,\n var(--kup-layer-2)\n );\n --kup_tabindicator_border_bottom_color_active: var(\n --kup-tabindicator-border-bottom-color-active,\n var(--kup-border-interactive)\n );\n --kup_tabbar_text_color: var(\n --kup-tabbar-text-color,\n var(--kup-text-secondary)\n );\n --kup_tabbar_text_color_active: var(\n --kup-tabbar-text-color-active,\n var(--kup-text-primary)\n );\n --kup_tabbar_border_color_dense: var(\n --kup-tabbar-border-color-dense,\n var(--kup-border-strong)\n );\n\n --kup_tabbar_font_size: var(--kup-tabbar-font-size, var(--kup-font-size));\n --kup_tabbar_font_weight: var(--kup-tabbar-font-weight, 500);\n --kup_tabbar_height: var(--kup-tabbar-height, 36px);\n --kup_tabbar_tab_padding: var(\n --kup-tabbar-tab-padding,\n 0 var(--kup-space-05)\n );\n\n display: block;\n font-size: var(--kup_tabbar_font_size);\n}\n\n.tab-bar {\n width: 100%;\n\n .tab-scroller {\n height: var(--kup_tabbar_height);\n overflow-y: hidden;\n\n .tab-scroller__scroll-area {\n display: flex;\n overflow-x: hidden;\n overflow: auto;\n\n .tab-scroller__scroll-content {\n position: relative;\n display: flex;\n flex: 1 0 auto;\n transform: none;\n will-change: transform;\n gap: 2px;\n }\n }\n\n // add the disabled status on specific field\n .tab {\n -webkit-font-smoothing: antialiased;\n padding: var(--kup_tabbar_tab_padding);\n position: relative;\n display: flex;\n box-sizing: border-box;\n gap: 8px;\n margin: 0px;\n border: none;\n flex: 1 0;\n outline: 2px solid transparent;\n outline-offset: -2px;\n background: none;\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n appearance: none;\n z-index: 1;\n height: var(--kup_tabbar_height);\n &:focus {\n outline: 2px solid var(--kup_tabindicator_border_bottom_color_active);\n }\n\n .tab__icon + .tab__text-label {\n padding-left: 8px;\n padding-right: 0px;\n @include kup-body-compact-01;\n }\n\n .tab__icon .f-image__icon {\n background: var(--kup_tabbar_text_color) !important;\n }\n\n &.kup-danger {\n --kup_tabbar_text_color: var(--kup-danger-color-60);\n --kup_tabindicator_border_bottom_color: var(--kup-danger-color-60);\n --kup_tabindicator_border_bottom_color: var(--kup-danger-color-60);\n --kup_tabindicator_border_bottom_color_active: var(\n --kup-danger-color-60\n );\n &:focus {\n outline: 2px solid var(--kup-danger-color-60);\n }\n }\n\n &:hover {\n background-color: rgba(var(--kup_tabbar_primary_color_rgb), 0.075);\n .tab-indicator .tab-indicator__content--underline {\n --kup_tabindicator_border_bottom_color: var(--kup-border-strong);\n }\n }\n &.tab--active {\n .tab__iconToolbar {\n opacity: 0.3;\n min-width: 16px;\n }\n &:hover {\n .tab__iconToolbar:hover {\n opacity: 1;\n background-color: var(--kup-gray-color-20-hover);\n }\n }\n .tab__content {\n .tab__icon {\n transition-delay: 100ms;\n }\n .tab__text-label {\n transition-delay: 100ms;\n @include kup-heading-compact-01;\n }\n }\n }\n &[disabled] {\n --kup_tabindicator_border_bottom_color: var(--kup-border-disabled);\n --kup_tabbar_text_color: var(--kup-text-disabled);\n pointer-events: none;\n }\n &.kup-dense {\n background: var(--kup-layer-2);\n border-right: 1px solid var(--kup_tabbar_border_color_dense);\n &.tab--active {\n background: var(--kup-layer-2-selected);\n }\n &:hover {\n background: var(--kup-layer-2-hover);\n }\n .tab-indicator {\n height: 2px;\n border-color: transparent;\n }\n .tab-indicator--active .tab-indicator__content {\n border-color: var(--kup_tabindicator_border_bottom_color_active);\n }\n }\n }\n\n @media screen and (min-width: 678px) {\n .tab {\n flex: none;\n }\n }\n\n .tab__content {\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: inherit;\n pointer-events: none;\n gap: var(--kup-space-03);\n\n .tab__icon {\n transition: color 150ms linear 0s;\n width: 16px;\n height: 16px;\n font-size: 16px;\n z-index: 2;\n margin: 0;\n\n &.#{$kup-icon} {\n height: 16px;\n width: 16px;\n }\n }\n\n .tab__text-label {\n transition: color 150ms linear 0s;\n display: inline-block;\n line-height: 1;\n z-index: 2;\n color: var(--kup_tabbar_text_color);\n min-width: auto;\n }\n\n @media screen and (min-width: 678px) {\n .tab__text-label {\n min-width: 150px;\n }\n }\n }\n\n .tab__iconToolbar {\n opacity: 0;\n }\n\n .tab-indicator {\n display: flex;\n position: absolute;\n top: 0px;\n left: 0px;\n justify-content: center;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n\n &.tab-indicator--active {\n .tab-indicator__content {\n opacity: 1;\n border-color: var(--kup_tabindicator_border_bottom_color_active);\n }\n }\n\n .tab-indicator__content {\n transform-origin: left center;\n\n &.tab-indicator__content--underline {\n align-self: flex-end;\n box-sizing: border-box;\n width: 100%;\n border-top-style: solid;\n border-top-width: 2px;\n transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0s;\n color: var(--kup_tabindicator_border_bottom_color);\n }\n }\n }\n }\n\n &.tab-bar--contained {\n .tab-scroller .tab-scroller__scroll-content {\n gap: 0px;\n }\n .tab {\n background-color: var(--kup-gray-color-10);\n border-right: 1px solid var(--kup-gray-color-20);\n &:nth-last-child(1) {\n border-right: none;\n }\n &:hover {\n background-color: var(--kup-gray-color-10-hover);\n }\n .tab-indicator {\n height: auto;\n }\n }\n .tab--active {\n background-color: var(--kup-gray-color-0);\n border: none;\n }\n }\n}\n\n.mdc-ripple-surface {\n --mdc-ripple-fg-opacity: 0.24;\n\n &:before,\n &:after {\n background-color: var(--kup_tabbar_primary_color);\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n VNode,\n Watch,\n} from '@stencil/core';\nimport { MDCRipple } from '@material/ripple';\nimport {\n KupTabBarNode,\n KupTabBarEventPayload,\n KupTabBarProps,\n KupTabbarStyling,\n} from './kup-tab-bar-declarations';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { KupScrollOnHoverElement } from '../../managers/kup-scroll-on-hover/kup-scroll-on-hover-declarations';\nimport { KupThemeColorValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport {\n KupDynamicPositionAnchor,\n KupDynamicPositionElement,\n KupDynamicPositionPlacement,\n} from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport { KupDataNode } from '../../managers/kup-data/kup-data-declarations';\nimport { KupToolbarItemClickEventPayload } from '../../components/kup-toolbar/kup-toolbar-declarations';\n\n@Component({\n tag: 'kup-tab-bar',\n styleUrl: 'kup-tab-bar.scss',\n shadow: true,\n})\nexport class KupTabBar {\n /**\n * References the root HTML element of the component (<kup-tab-bar>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * List of elements.\n * @default null\n */\n @Prop() data: KupTabBarNode[] = null;\n /**\n * List of elements.\n * @default KupTabbarStyling.FLAT\n */\n @Prop() variant: KupTabbarStyling = KupTabbarStyling.FLAT;\n /**\n * Defaults at false. When set to true, the component is dense.\n * @default false\n */\n @Prop() dense: boolean = false;\n /**\n * When enabled displays Material's ripple effect on item headers.\n * @default true\n */\n @Prop() ripple: boolean = false;\n /**\n * When enabled displays toolbar item inside each single tab.\n * @default false\n */\n @Prop() toolbar: boolean = false;\n /**\n * Display DataNode Toolbar.\n * @default null\n */\n @Prop() toolbarData: KupDataNode[];\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n #clickCbDropCard: KupManagerClickCb = null;\n /**\n * Element scrollable on mouse hover.\n */\n private scrollArea: KupScrollOnHoverElement = null;\n /**\n * Toolbar List.\n */\n private toolbarList: KupDynamicPositionElement;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n /**\n * Triggered when the tab loses focus.\n */\n @Event({\n eventName: 'kup-tabbar-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupTabBarEventPayload>;\n\n /**\n * Triggered when the tab is clicked.\n */\n @Event({\n eventName: 'kup-tabbar-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupTabBarEventPayload>;\n\n /**\n * Triggered when the icon inside tab is clicked.\n */\n @Event({\n eventName: 'kup-tabbar-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupTabBarEventPayload>;\n\n /**\n * Triggered when the tab is focused.\n */\n @Event({\n eventName: 'kup-tabbar-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupTabBarEventPayload>;\n\n /**\n * Triggered when a list item is clicked.\n */\n @Event({\n eventName: 'kup-tabbar-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupToolbarItemClickEventPayload>;\n\n #dropDownActionCardAnchor: HTMLElement = null;\n\n onKupBlur(i: number, node: KupTabBarNode) {\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n index: i,\n node: node,\n });\n }\n\n onKupClick(i: number, node: KupTabBarNode) {\n for (let i = 0; i < this.data.length; i++) {\n this.data[i].active = false;\n }\n this.data[i].active = true;\n this.value = node.id;\n\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n index: i,\n node: node,\n });\n }\n\n onKupIconClick(i: number, node: KupTabBarNode, el: HTMLElement) {\n this.#dropDownActionCardAnchor = el;\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n index: i,\n node: node,\n });\n this.createDropDownToolbarList();\n }\n\n onKupFocus(i: number, node: KupTabBarNode) {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n index: i,\n node: node,\n });\n }\n\n onKupToolbarItemClick(e: CustomEvent) {\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n node: e.detail.selected,\n });\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('ripple')\n applyRipple() {\n const root = this.rootElement.shadowRoot;\n if (root && this.ripple) {\n const rippleCells = root.querySelectorAll(\n '.mdc-ripple-surface:not(.mdc-ripple-upgraded)'\n );\n if (rippleCells) {\n for (let i = 0; i < rippleCells.length; i++) {\n MDCRipple.attachTo(rippleCells[i]);\n }\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupTabBarProps, descriptions);\n }\n /**\n * Returns the selected node.\n * @returns {Promise<KupTabBarNode>} Selected node.\n */\n @Method()\n async getSelectedNode(): Promise<KupTabBarNode> {\n let res: KupTabBarNode = null;\n this.data.forEach((node) => {\n if (node.id === this.value) {\n res = node;\n }\n });\n return res;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupTabBarProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n closeRowToolbarList() {\n if (this.toolbarList) {\n this.kupManager.dynamicPosition.stop(\n this.toolbarList as KupDynamicPositionElement\n );\n this.kupManager.removeClickCallback(this.#clickCbDropCard);\n this.toolbarList.remove();\n this.toolbarList = null;\n }\n }\n\n createDropDownToolbarList() {\n if (this.toolbarList) {\n this.closeRowToolbarList();\n }\n const listEl = document.createElement('kup-toolbar');\n listEl.data = this.toolbarData;\n listEl.addEventListener('kup-toolbar-click', (e: CustomEvent) => {\n this.onKupToolbarItemClick(e);\n setTimeout(() => {\n this.closeRowToolbarList();\n }, 0);\n });\n this.toolbarList = listEl;\n this.#clickCbDropCard = {\n cb: () => {\n this.closeRowToolbarList();\n },\n el: this.toolbarList,\n };\n\n this.kupManager.addClickCallback(this.#clickCbDropCard, true);\n this.rootElement.shadowRoot.appendChild(this.toolbarList);\n requestAnimationFrame(() => {\n this.kupManager.dynamicPosition.register(\n this.toolbarList as unknown as KupDynamicPositionElement,\n this.#dropDownActionCardAnchor as KupDynamicPositionAnchor,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n this.kupManager.dynamicPosition.start(\n this.toolbarList as unknown as KupDynamicPositionElement\n );\n });\n }\n\n private consistencyCheck() {\n let activeTabs: number = 0;\n let lastActiveOccurrence: number = 0;\n if (this.data && this.data.length > 0) {\n for (let i = 0; i < this.data.length; i++) {\n if (this.data[i].active) {\n activeTabs++;\n lastActiveOccurrence = i;\n }\n this.data[i].active = false;\n }\n if (activeTabs > 1) {\n this.data[lastActiveOccurrence].active = true;\n this.value = this.data[lastActiveOccurrence].id;\n this.kupManager.debug.logMessage(\n this,\n 'Too many active tabs, forcing last one.',\n KupDebugCategory.WARNING\n );\n } else if (activeTabs === 0) {\n this.data[0].active = true;\n this.value = this.data[0].id;\n this.kupManager.debug.logMessage(\n this,\n 'No active tabs detected, forcing first one.'\n );\n } else {\n this.data[lastActiveOccurrence].active = true;\n this.value = this.data[lastActiveOccurrence].id;\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.consistencyCheck();\n }\n\n componentDidLoad() {\n this.kupManager.scrollOnHover.register(this.scrollArea);\n this.applyRipple();\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n if (!this.data || this.data.length === 0) {\n return;\n }\n\n const tabBar: Array<VNode> = [];\n\n for (let i = 0; i < this.data.length; i++) {\n const node: KupTabBarNode = this.data[i];\n const tabClass: Record<string, boolean> = {\n tab: true,\n 'tab--active': node.active ? true : false,\n 'mdc-ripple-surface': this.ripple ? true : false,\n 'kup-dense': this.dense,\n 'kup-danger': node.danger,\n };\n\n const tabEl: VNode = (\n <f-button\n class={tabClass}\n role=\"tab\"\n aria-selected={this.data[i].active ? true : false}\n tabIndex={i}\n title={node.title ? node.title : null}\n onBlur={() => this.onKupBlur(i, node)}\n onClick={() => this.onKupClick(i, node)}\n onFocus={() => this.onKupFocus(i, node)}\n >\n <span class=\"tab__content\">\n {node.icon ? (\n <FImage\n color={`var(${KupThemeColorValues.PRIMARY})`}\n resource={node.icon}\n placeholderResource={node.placeholderIcon}\n sizeX=\"24px\"\n sizeY=\"24px\"\n wrapperClass=\"tab__icon\"\n />\n ) : null}\n {node.value ? (\n <span class=\"tab__text-label\">\n {this.data[i].value}\n </span>\n ) : null}\n </span>\n {this.toolbar && (\n <FImage\n resource=\"more_vert\"\n sizeX=\"16px\"\n sizeY=\"16px\"\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n this.onKupIconClick(\n i,\n node,\n event.currentTarget as HTMLElement\n );\n }}\n wrapperClass=\"tab__iconToolbar\"\n ></FImage>\n )}\n <span\n class={`tab-indicator ${\n node.active ? ' tab-indicator--active' : ''\n }`}\n >\n <span class=\"tab-indicator__content tab-indicator__content--underline\"></span>\n </span>\n </f-button>\n );\n tabBar.push(tabEl);\n }\n\n const tabbarRole: Record<string, boolean> = {\n 'tab-bar': true,\n [`tab-bar--${this.variant}`]: this.variant ? true : false,\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <div class={tabbarRole} role=\"tablist\">\n <div class=\"tab-scroller\">\n <div\n class=\"tab-scroller__scroll-area\"\n ref={(el: HTMLElement) =>\n (this.scrollArea =\n el as KupScrollOnHoverElement)\n }\n >\n <div class=\"tab-scroller__scroll-content\">\n {tabBar}\n </div>\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.scrollOnHover.unregister(this.scrollArea);\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from '../../types/GenericTypes';\n\n/**\n * Props of the kup-text-field component.\n * Used to export every prop in an object.\n */\nexport enum KupTextFieldProps {\n allowNegative = 'When true, could be input negative numbers. It has effect only with number input type.',\n customStyle = 'Custom style of the component.',\n decimals = 'Number of decimals (should be used when inputType is number).',\n disabled = 'When set to true, the component is disabled.',\n emitSubmitEventOnEnter = \"When the text field is part of the autocomplete component and the list is opened, enter key selects the item and doesn't submit.\",\n fullWidth = 'When set to true, the component will be rendered at full width.',\n group = 'When true, the number will be formatted with group separator. It has effect only with number input type.',\n helper = 'When set, its content will be shown as a help text below the field.',\n helperEnabled = 'When true, the helper will be displayed.',\n helperWhenFocused = 'When set, the helper will be shown only when the field is focused.',\n hiddenCounter = 'Hides the character counter.',\n icon = 'When set, the text-field will show this icon.',\n initialValue = 'Sets the initial value of the component',\n inputMode = 'The HTML inputmode of the input element. It has no effect on text areas.',\n inputType = 'The HTML type of the input element. It has no effect on text areas.',\n integers = 'Number of integers (should be used when inputType is number).',\n isClearable = 'Enables a clear trailing icon.',\n label = 'When set, its content will be shown as a label.',\n leadingLabel = 'When set to true, the label will be on the left of the component.',\n max = 'The HTML max attribute specifies the maximum value for the input element. Works with the following input types: number, range, date, datetime-local, month, time and week.',\n maxLength = 'When set, the helper will display a character counter.',\n min = 'The HTML min attribute specifies the minimum value for the input element. Works with the following input types: number, range, date, datetime-local, month, time and week.',\n name = 'The HTML name attribute used for form autocomplete.',\n outlined = 'When set to true, the component will be rendered as an outlined field.',\n readOnly = 'Sets the component to read only state, making it not editable, but interactable. Used in combobox component when it behaves as a select.',\n size = 'The HTML attribute size of the input element.',\n step = 'The HTML step of the input element. It has effect only with number input type.',\n textArea = 'When set to true, the component will be rendered as a textarea.',\n trailingIcon = 'When set, the icon will be shown after the text.',\n trailingLabel = 'When set to true, the label will be on the right of the component.',\n}\n\nexport interface KupTextFieldEventPayload extends KupEventPayload {\n value: string;\n}\n","@import 'styles/kup-text-field-main.scss';\n@import 'styles/kup-text-field-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\nimport {\n GenericObject,\n KupComponent,\n KupComponentSizing,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n KupTextFieldEventPayload,\n KupTextFieldProps,\n} from './kup-text-field-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport { componentWrapperId } from '../../variables/GenericVariables';\n\n@Component({\n tag: 'kup-text-field',\n styleUrl: 'kup-text-field.scss',\n shadow: true,\n})\nexport class KupTextField {\n /**\n * References the root HTML element of the component (<kup-text-field>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The value of the component.\n * @default \"\"\n */\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Set alert message\n * @default '''\n */\n @Prop() alert: string = '';\n /**\n * When true, could be input negative numbers (should be used when inputType is number).\n * @default null\n */\n @Prop() allowNegative: boolean = false;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Number of decimals (should be used when inputType is number).\n * @default null\n */\n @Prop() decimals: number = null;\n /**\n * When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * When the text field is part of the autocomplete component and the list is opened, enter key selects the item and doesn't submit.\n * @default true\n */\n @Prop() emitSubmitEventOnEnter: boolean = true;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n /**\n * When set to true, the component will be rendered at full width.\n * @default false\n */\n @Prop({ reflect: true }) fullWidth: boolean = false;\n /**\n * When true, the number will be formatted with group separator (should be used when inputType is number).\n * @default null\n */\n @Prop() group: boolean = false;\n /**\n * When set, its content will be shown as a help text below the field.\n * @default null\n */\n @Prop() helper: string = null;\n /**\n * When set, its content will be shown as a help icon inside the field.\n * @default false\n */\n @Prop() helperIcon: boolean = false;\n /**\n * When true, the helper will be displayed.\n * @default true\n */\n @Prop() helperEnabled: boolean = true;\n /**\n * When set, the helper will be shown only when the field is focused.\n * @default false\n */\n @Prop() helperWhenFocused: boolean = false;\n /**\n * Hides the character counter.\n * @default false\n */\n @Prop() showCounter: boolean = false;\n /**\n * When set, the text-field will show this icon.\n * @default null\n */\n @Prop() icon: string = null;\n /**\n * Sets the initial value of the component\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * The HTML inputmode of the input element.\n * @default null\n */\n @Prop() inputMode: string = null;\n /**\n * The HTML type of the input element. It has no effect on text areas.\n * @default \"text\"\n */\n @Prop() inputType: string = 'text';\n /**\n * Number of integers (should be used when inputType is number).\n * @default null\n */\n @Prop() integers: number = null;\n /**\n * Enables a clear trailing icon.\n * @default false\n */\n @Prop() isClearable: boolean = false;\n /**\n * When set, its content will be shown as a label.\n * @default null\n */\n @Prop() label: string = null;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() lightMode: boolean = false;\n /**\n * When set to true, the label will be on the left of the component.\n * @default false\n */\n @Prop() leadingLabel: boolean = false;\n /**\n * The HTML max attribute specifies the maximum value for the input element.\n * Works with the following input types: number, range, date, datetime-local, month, time and week.\n * @default null\n */\n @Prop() max: number = null;\n /**\n * When set, the helper will display a character counter.\n * @default null\n */\n @Prop() maxLength: number = null;\n /**\n * The HTML min attribute specifies the minimum value for the input element.\n * Works with the following input types: number, range, date, datetime-local, month, time and week.\n * @default null\n */\n @Prop() min: number = null;\n /**\n * The HTML name attribute used for form autocomplete.\n * @default null\n */\n @Prop() name: string = null;\n /**\n * When set to true, the component will be rendered as an outlined field.\n * @default false\n */\n @Prop() outlined: boolean = false;\n /**\n * Set the placeholder value. It's an example, not a label.\n * @default false\n */\n @Prop() placeholder: string = '';\n /**\n * When set, appear 2 buttons to increment and decrement the value.\n * @default false\n */\n @Prop() quantityButtons: boolean = false;\n /**\n * Sets the component to read only state, making it not editable, but interactable. Used in combobox component when it behaves as a select.\n * @default false\n */\n @Prop() readOnly: boolean = false;\n /**\n * The HTML attribute size of the input element.\n * @default null\n */\n @Prop() size: number = null;\n /**\n * Sets the sizing of the textfield\n * @default KupComponentSizing.SMALL\n */\n @Prop() sizing: KupComponentSizing = KupComponentSizing.SMALL;\n /**\n * The HTML step of the input element. It has effect only with number input type.\n * @default null\n */\n @Prop() step: number = null;\n /**\n * When set to true, the component will be rendered as a textarea.\n * @default false\n */\n @Prop() textArea: boolean = false;\n /**\n * When set, the icon will be shown after the text.\n * @default false\n */\n @Prop() trailingIcon: boolean = false;\n /**\n * When set to true, the label will be on the right of the component.\n * @default false\n */\n @Prop() trailingLabel: boolean = false;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Reference to the input element.\n */\n private inputEl: HTMLInputElement | HTMLTextAreaElement;\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Triggered when the input element loses focus.\n */\n @Event({\n eventName: 'kup-textfield-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the input element changes.\n */\n @Event({\n eventName: 'kup-textfield-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the input element is clicked.\n */\n @Event({\n eventName: 'kup-textfield-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the input element gets focused.\n */\n @Event({\n eventName: 'kup-textfield-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the input element receives an input.\n */\n @Event({\n eventName: 'kup-textfield-input',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInput: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the text field's icon is clicked.\n */\n @Event({\n eventName: 'kup-textfield-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the text field's clear icon is clicked.\n */\n @Event({\n eventName: 'kup-textfield-cleariconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClearIconClick: EventEmitter<KupEventPayload>;\n /**\n * Triggered when the Enter key is pressed.\n */\n @Event({\n eventName: 'kup-textfield-submit',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTextFieldSubmit: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the - button of the number type component is pressed.\n */\n @Event({\n eventName: 'kup-textfield-minusclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupMinusClick: EventEmitter<KupTextFieldEventPayload>;\n /**\n * Triggered when the + button of the number type component is pressed.\n */\n @Event({\n eventName: 'kup-textfield-plusclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupPlusClick: EventEmitter<KupTextFieldEventPayload>;\n\n onKupBlur(event: FocusEvent & { target: HTMLInputElement }) {\n const { target } = event;\n this.#setValueFromEventTaget(target);\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupChange(event: UIEvent & { target: HTMLInputElement }) {\n const { target } = event;\n this.#setValueFromEventTaget(target);\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupClick(event: MouseEvent & { target: HTMLInputElement }) {\n const { target } = event;\n this.#setValueFromEventTaget(target);\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupFocus(_event: FocusEvent & { target: HTMLInputElement }) {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupInput(event: UIEvent & { target: HTMLInputElement }) {\n const { target } = event;\n this.kupInput.emit({\n comp: this,\n id: this.rootElement.id,\n value: target.value,\n });\n }\n\n onKupIconClick(event: MouseEvent & { target: HTMLInputElement }) {\n const { target } = event;\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: target.value,\n });\n }\n\n onKupClearIconClick() {\n this.value = '';\n this.inputEl.value = '';\n this.kupClearIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n onKeyDown(event: KeyboardEvent & { target: HTMLInputElement }) {\n const { target } = event;\n if (event.key === 'Enter') {\n if (this.emitSubmitEventOnEnter == true) {\n this.#setValueFromEventTaget(target);\n this.kupTextFieldSubmit.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n }\n }\n\n onKupMinusClick(event: MouseEvent & { target: HTMLInputElement }) {\n const { target } = event;\n\n const value: number = Number(this.value) - 1;\n this.value = value.toString();\n\n this.kupMinusClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupPlusClick(event: MouseEvent & { target: HTMLInputElement }) {\n const { target } = event;\n\n const value: number = Number(this.value) + 1;\n this.value = value.toString();\n\n this.kupMinusClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupTextFieldProps, descriptions);\n }\n /**\n * Returns the component's internal value.\n */\n @Method()\n async getValue(): Promise<string> {\n if (this.inputType == 'number') {\n // return this.kupManager.math.formattedStringToNumberString(\n // this.value,\n // ''\n // );\n /** value is already ok, decimal separator . */\n }\n return this.value;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Focuses the input element.\n */\n @Method()\n async setFocus(): Promise<void> {\n this.inputEl.focus();\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupTextFieldProps, props);\n }\n /**\n * Sets the internal value of the component.\n */\n @Method()\n async setValue(value: string, skipNumberCheck = false): Promise<void> {\n this.value = value;\n if (skipNumberCheck) {\n this.inputEl.value = value;\n } else {\n try {\n this.inputEl.value = this.#getValueForOutput();\n } catch (error) {\n this.kupManager.debug.logMessage(\n this,\n \"Couldn't set value on input element: '\" + value + \"'\",\n KupDebugCategory.WARNING\n );\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n #getValueForOutput(): string {\n if (this.value == null || this.value.trim() == '') {\n return '';\n }\n let v1 = this.kupManager.math.numberStringToFormattedString(\n this.value,\n this.decimals,\n ''\n );\n return v1;\n }\n\n #setValueFromEventTaget(target: HTMLInputElement) {\n if (this.inputType == 'number') {\n this.value = this.kupManager.math.formattedStringToNumberString(\n target.value,\n ''\n );\n } else {\n this.value = target.value;\n }\n }\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.value = this.initialValue;\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root: ShadowRoot = this.rootElement.shadowRoot;\n if (root) {\n const f: HTMLElement = root.querySelector('.f-text-field');\n if (f) {\n const inputEl: HTMLInputElement | HTMLTextAreaElement =\n f.querySelector('.mdc-text-field__input');\n if (inputEl) {\n this.inputEl = inputEl;\n }\n FTextFieldMDC(f);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n const props: FTextFieldProps = {\n alert: this.alert,\n allowNegative: this.allowNegative,\n danger: this.rootElement.classList.contains('kup-danger')\n ? true\n : false,\n decimals: this.decimals,\n disabled: this.disabled,\n error: this.error,\n fullHeight: this.rootElement.classList.contains('kup-full-height')\n ? true\n : false,\n fullWidth: this.fullWidth,\n group: this.group,\n helper: this.helper,\n helperIcon: this.helperIcon,\n helperEnabled: this.helperEnabled,\n helperWhenFocused: this.helperWhenFocused,\n showCounter: this.showCounter,\n icon: this.icon,\n info: this.rootElement.classList.contains('kup-info')\n ? true\n : false,\n inputMode: this.inputMode,\n inputType: this.inputType,\n integers: this.integers,\n isClearable: this.isClearable,\n label: this.label,\n leadingLabel: this.leadingLabel,\n lightMode: this.lightMode,\n max: this.max,\n maxLength: this.maxLength,\n min: this.min,\n name: this.name,\n outlined: this.outlined,\n placeholder: this.placeholder,\n quantityButtons: this.quantityButtons,\n readOnly: this.readOnly,\n secondary: this.rootElement.classList.contains('kup-secondary')\n ? true\n : false,\n shaped: this.rootElement.classList.contains('kup-shaped')\n ? true\n : false,\n size: this.size,\n sizing: this.sizing,\n step: this.step,\n success: this.rootElement.classList.contains('kup-success')\n ? true\n : false,\n textArea: this.textArea,\n trailingIcon: this.trailingIcon,\n trailingLabel: this.trailingLabel,\n value: this.value,\n warning: this.rootElement.classList.contains('kup-warning')\n ? true\n : false,\n onBlur: (e: FocusEvent & { target: HTMLInputElement }) =>\n this.onKupBlur(e),\n onChange: (e: UIEvent & { target: HTMLInputElement }) =>\n this.onKupChange(e),\n onClick: (e: MouseEvent & { target: HTMLInputElement }) =>\n this.onKupClick(e),\n onFocus: (e: FocusEvent & { target: HTMLInputElement }) =>\n this.onKupFocus(e),\n onInput: (e: UIEvent & { target: HTMLInputElement }) =>\n this.onKupInput(e),\n onKeyDown: (e: KeyboardEvent & { target: HTMLInputElement }) =>\n this.onKeyDown(e),\n onIconClick: (e: MouseEvent & { target: HTMLInputElement }) =>\n this.onKupIconClick(e),\n onClearIconClick: () => this.onKupClearIconClick(),\n onMinusClick: (e: MouseEvent & { target: HTMLInputElement }) =>\n this.onKupMinusClick(e),\n onPlusClick: (e: MouseEvent & { target: HTMLInputElement }) =>\n this.onKupPlusClick(e),\n };\n\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <FTextField {...props} />\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.theme.unregister(this);\n }\n}\n","import { KupEventPayload } from \"../../types/GenericTypes\";\n\n/**\n * Props of the kup-time-picker component.\n * Used to export every prop in an object.\n */\nexport enum KupTimePickerProps {\n clockVariant = 'When set to true, the drop down menu will display a clock.',\n customStyle = 'Custom style of the component.',\n data = 'Props of the sub-components (time input text field)',\n disabled = 'Defaults at false. When set to true, the component is disabled.',\n initialValue = 'Sets the initial value of the component',\n manageSeconds = 'Manage seconds',\n timeMinutesStep = 'Minutes step',\n}\n\nexport interface KupTimePickerEventPayload extends KupEventPayload {\n value: any;\n}","@import 'styles/kup-time-picker-main.scss';\n@import 'styles/kup-time-picker-classes.scss';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\nimport { getProps, setProps } from '../../utils/utils';\nimport {\n KupTimePickerEventPayload,\n KupTimePickerProps,\n} from './kup-time-picker-declarations';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { FTextField } from '../../f-components/f-text-field/f-text-field';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupCardClickPayload,\n KupCardData,\n KupCardFamily,\n} from '../kup-card/kup-card-declarations';\nimport { KupDynamicPositionPlacement } from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { FTextFieldProps } from '../../f-components/f-text-field/f-text-field-declarations';\nimport { KupDatesFormats } from '../../managers/kup-dates/kup-dates-declarations';\n@Component({\n tag: 'kup-time-picker',\n styleUrl: 'kup-time-picker.scss',\n shadow: true,\n})\nexport class KupTimePicker {\n /**\n * References the root HTML element of the component (<kup-time-picker>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n @State() value: string = '';\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * When set to true, the drop down menu will display a clock.\n * @default true\n */\n @Prop() clockVariant: boolean = true;\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * Props of the sub-components (time input text field)\n * @default {}\n */\n @Prop() data: Object = {};\n /**\n * Defaults at false. When set to true, the component is disabled.\n * @default false\n */\n @Prop() disabled: boolean = false;\n /**\n * Sets the initial value of the component.\n * @default \"\"\n */\n @Prop() initialValue: string = '';\n /**\n * Manage seconds.\n * @default false\n */\n @Prop() manageSeconds: boolean = false;\n /**\n * Minutes step.\n * @default 10\n */\n @Prop() timeMinutesStep: number = 10;\n /**\n * Set error message\n * @default '''\n */\n @Prop() error: string = '';\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n private kupManager: KupManager = kupManagerInstance();\n private hoursActive: boolean = true;\n private minutesActive: boolean = false;\n private secondsActive: boolean = false;\n private textFieldContainerEl: HTMLElement = undefined;\n private textfieldEl: HTMLInputElement = undefined;\n private pickerKupEl: HTMLKupListElement | HTMLKupCardElement = undefined;\n private clickCb: KupManagerClickCb = null;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-timepicker-blur',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupBlur: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-change',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupChange: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-focus',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupFocus: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-input',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupInput: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-iconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupIconClick: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-itemclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupItemClick: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-textfieldsubmit',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTextFieldSubmit: EventEmitter<KupTimePickerEventPayload>;\n\n @Event({\n eventName: 'kup-timepicker-cleariconclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClearIconClick: EventEmitter<KupEventPayload>;\n\n onKupTimePickerItemClick(e: CustomEvent, value?: string) {\n if (e != null) {\n if (value == null) {\n value = e.detail.selected.id;\n }\n }\n this.setPickerValueSelected(value);\n\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n\n this.kupItemClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n\n this.setFocus();\n }\n\n onKupClearIconClick() {\n this.setPickerValueSelected('');\n\n this.kupChange.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n\n this.kupClearIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n });\n }\n\n onKupBlur() {\n this.closePicker();\n this.kupBlur.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupChange(e: InputEvent) {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupChange\n );\n }\n\n onKupClick() {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupFocus() {\n this.kupFocus.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n onKupInput(e: InputEvent) {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupInput\n );\n }\n\n onKupTextFieldSubmit(e: KeyboardEvent) {\n this.refreshPickerValue(\n (e.target as HTMLInputElement).value,\n this.kupTextFieldSubmit\n );\n }\n\n onKupIconClick() {\n if (this.isPickerOpened()) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n this.kupIconClick.emit({\n comp: this,\n id: this.rootElement.id,\n value: this.value,\n });\n }\n\n /*-------------------------------------------------*/\n /* L i s t e n e r s */\n /*-------------------------------------------------*/\n\n @Listen('keyup', { target: 'document' })\n listenKeyup(e: KeyboardEvent) {\n if (this.isPickerOpened()) {\n if (e.key === 'Escape') {\n this.closePicker();\n }\n if (e.key === 'Enter') {\n this.onKupTimePickerItemClick(null);\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('timeMinutesStep')\n watchTimeMinutesStep() {\n if (this.clockVariant) {\n return;\n }\n if (this.timeMinutesStep <= 0) {\n this.kupManager.debug.logMessage(\n this,\n 'property time-minutes-step=[' +\n this.timeMinutesStep +\n '] not allowed: it must be > 0 and divisor of 60',\n KupDebugCategory.WARNING\n );\n this.timeMinutesStep = 10;\n return;\n }\n let result: number = 60 % this.timeMinutesStep;\n\n if (result != 0) {\n this.kupManager.debug.logMessage(\n this,\n 'property time-minutes-step=[' +\n this.timeMinutesStep +\n '] not allowed: it must be > 0 and divisor of 60',\n KupDebugCategory.WARNING\n );\n this.timeMinutesStep = 10;\n return;\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupTimePickerProps, descriptions);\n }\n /**\n * Returns the component's internal value.\n */\n @Method()\n async getValue(): Promise<string> {\n return this.value;\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * Focuses the input element.\n */\n @Method()\n async setFocus() {\n if (this.textfieldEl != null) {\n this.textfieldEl.focus();\n }\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupTimePickerProps, props);\n }\n /**\n * Sets the internal value of the component.\n */\n @Method()\n async setValue(value: string) {\n this.value = value;\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n getFormattedValue(value: string): string {\n return this.kupManager.dates.formattedStringToCustomDateTime(\n value,\n this.manageSeconds\n ? KupDatesFormats.ISO_TIME\n : KupDatesFormats.ISO_TIME_WITHOUT_SECONDS,\n this.manageSeconds\n );\n }\n\n refreshPickerValue(eventDetailValue: string, eventToRaise: EventEmitter) {\n let newValue = null;\n if (\n this.kupManager.dates.isValidFormattedStringTime(\n eventDetailValue,\n this.manageSeconds\n )\n ) {\n this.value = eventDetailValue;\n newValue = this.value;\n }\n\n if (newValue != null) {\n eventToRaise.emit({\n comp: this,\n id: this.rootElement.id,\n value: newValue,\n });\n }\n }\n\n setPickerValueSelected(newValue?: string) {\n if (!this.isPickerOpened()) {\n return;\n }\n if (this.disabled == true) {\n return;\n }\n if (newValue == null) {\n newValue = this.getPickerValueSelected();\n }\n this.closePicker();\n if (newValue == null) {\n return;\n }\n this.value = newValue;\n }\n\n getPickerValueSelected(): string {\n return this.value;\n }\n\n getValueForPickerComponent() {\n return this.value;\n }\n\n openPicker() {\n const elStyle = this.pickerKupEl.style;\n elStyle.height = 'auto';\n elStyle.minWidth = this.textFieldContainerEl.clientWidth + 'px';\n this.pickerKupEl.menuVisible = true;\n if (this.textfieldEl != null) {\n this.textfieldEl.classList.add('toggled');\n }\n if (this.kupManager.dynamicPosition.isRegistered(this.pickerKupEl)) {\n this.kupManager.dynamicPosition.changeAnchor(\n this.pickerKupEl,\n this.textFieldContainerEl\n );\n } else {\n this.kupManager.dynamicPosition.register(\n this.pickerKupEl,\n this.textFieldContainerEl,\n 0,\n KupDynamicPositionPlacement.AUTO,\n true\n );\n }\n this.kupManager.dynamicPosition.start(this.pickerKupEl);\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.closePicker();\n },\n el: this.pickerKupEl,\n };\n }\n this.kupManager.addClickCallback(this.clickCb, true);\n }\n\n closePicker() {\n this.pickerKupEl.menuVisible = false;\n this.kupManager.removeClickCallback(this.clickCb);\n let textfieldEl = this.textfieldEl;\n if (textfieldEl != null) {\n textfieldEl.classList.remove('toggled');\n }\n this.pickerKupEl.menuVisible = false;\n this.kupManager.dynamicPosition.stop(this.pickerKupEl);\n this.kupManager.removeClickCallback(this.clickCb);\n }\n\n isPickerOpened(): boolean {\n return this.pickerKupEl.menuVisible == true;\n }\n\n getTextFieldId(): string {\n return this.textfieldEl.id;\n }\n\n getPickerElId(): string {\n return this.pickerKupEl.id;\n }\n\n prepTextfield(initialValue: string): any {\n const fullHeight =\n this.rootElement.classList.contains('kup-full-height');\n const fullWidth = this.rootElement.classList.contains('kup-full-width');\n const textfieldData: FTextFieldProps = {\n error: this.error,\n ...this.data['kup-text-field'],\n };\n if (!textfieldData.icon) {\n textfieldData.icon = 'access_time';\n }\n if (textfieldData.icon) {\n textfieldData.trailingIcon = true;\n }\n let comp: HTMLElement = (\n <FTextField\n {...textfieldData}\n disabled={this.disabled}\n fullHeight={fullHeight}\n fullWidth={fullWidth}\n id={this.rootElement.id + '_text-field'}\n value={initialValue}\n onBlur={() => this.onKupBlur()}\n onChange={(e: InputEvent) => this.onKupChange(e)}\n onClick={() => this.onKupClick()}\n onFocus={() => this.onKupFocus()}\n onInput={(e: InputEvent) => this.onKupInput(e)}\n onIconClick={() => this.onKupIconClick()}\n onKeyDown={(e: KeyboardEvent) => this.onKupTextFieldSubmit(e)}\n onClearIconClick={() => this.onKupClearIconClick()}\n >\n {this.prepTimePicker()}\n </FTextField>\n );\n\n return comp;\n }\n\n isRelatedTargetInThisComponent(e: any): boolean {\n if (!e.relatedTarget) {\n return false;\n }\n let id = e.relatedTarget.id;\n if (id == null || id.trim() == '') {\n return false;\n }\n if (id == this.getTextFieldId()) {\n return true;\n }\n if (id == this.getPickerElId()) {\n return true;\n }\n\n let idConc = '#time-picker-div#confirm#';\n return idConc.indexOf('#' + id + '#') >= 0;\n }\n\n prepTimePicker() {\n if (this.clockVariant) {\n const data: KupCardData = {\n options: {\n initialValue: this.value,\n manageSeconds: this.manageSeconds,\n hoursActive: this.hoursActive,\n minutesActive: this.minutesActive,\n secondsActive: this.secondsActive,\n },\n };\n\n return (\n <kup-card\n ref={(el) => (this.pickerKupEl = el)}\n data={data}\n layoutFamily={KupCardFamily.BUILT_IN}\n layoutNumber={2}\n sizeX=\"300px\"\n sizeY=\"450px\"\n isMenu\n onkup-card-click={(\n ev: CustomEvent<KupCardClickPayload>\n ) => {\n if (ev.detail.value != null && ev.detail.value != '')\n this.onKupTimePickerItemClick(ev, ev.detail.value);\n }}\n ></kup-card>\n );\n } else {\n return (\n <kup-list\n ref={(el) => (this.pickerKupEl = el)}\n data={this.createTimeListData(this.value)}\n is-menu\n onkup-list-click={(e) =>\n this.onKupTimePickerItemClick(e, e.detail.selected.id)\n }\n id={this.rootElement.id + '_list'}\n ></kup-list>\n );\n }\n }\n\n private createTimeListData(value: string) {\n const date: Date = new Date();\n const listData: KupListNode[] = [];\n const totalDayMinutes: number = 24 * 60;\n const itemsCount = totalDayMinutes / this.timeMinutesStep;\n\n let selectedTime: Date;\n if (value == null || value.trim() == '') {\n selectedTime = new Date();\n } else {\n selectedTime = this.kupManager.dates.toDate(\n value,\n this.manageSeconds\n ? KupDatesFormats.ISO_TIME\n : KupDatesFormats.ISO_TIME_WITHOUT_SECONDS\n );\n }\n\n date.setHours(0, 0, 0);\n for (let i = 0; i < itemsCount; i++) {\n let selected: boolean = false;\n if (\n date.getHours() == selectedTime.getHours() &&\n date.getMinutes() == selectedTime.getMinutes()\n ) {\n selected = true;\n }\n const value: string = this.kupManager.dates.formatTime(\n date,\n this.manageSeconds\n );\n const id = this.kupManager.dates.formattedStringToCustomDateTime(\n value,\n this.manageSeconds\n ? KupDatesFormats.ISO_TIME\n : KupDatesFormats.ISO_TIME_WITHOUT_SECONDS,\n this.manageSeconds\n );\n let item: KupListNode = {\n id: id,\n selected: selected,\n value: value,\n };\n listData[listData.length] = item;\n date.setMinutes(date.getMinutes() + this.timeMinutesStep);\n }\n\n return listData;\n }\n\n getTimeForOutput(): string {\n if (this.value == null || this.value.trim() == '') {\n return '';\n }\n let v1 = this.kupManager.dates.timeStringToFormattedString(\n this.value,\n this.manageSeconds\n );\n return v1;\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.kupManager.dates.register(this);\n this.kupManager.debug.logLoad(this, false);\n this.kupManager.theme.register(this);\n this.watchTimeMinutesStep();\n this.value = this.initialValue;\n if (!this.data) {\n this.data = {\n 'kup-list': {},\n 'kup-text-field': {},\n };\n }\n }\n\n componentDidLoad() {\n this.kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n if (root) {\n const f: HTMLElement = root.querySelector('.f-text-field');\n if (f) {\n this.textFieldContainerEl = f;\n this.textfieldEl = f.querySelector('input');\n FTextFieldMDC(f);\n }\n }\n this.kupManager.debug.logRender(this, true);\n }\n\n render() {\n return (\n <Host>\n <style>\n {this.kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n {this.prepTextfield(this.getTimeForOutput())}\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.kupManager.dates.unregister(this);\n this.kupManager.theme.unregister(this);\n if (this.pickerKupEl) {\n this.pickerKupEl.remove();\n }\n }\n}\n",".toolbar-container {\n width: fit-content;\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.05);\n}\n\n.component-type-chip {\n background-color: var(--kup-layer-2);\n color: var(--kup-text-disabled);\n padding: var(--kup-space-02) var(--kup-space-03);\n @include kup-caption-01;\n}\n\n.parent-class {\n position: relative;\n cursor: pointer;\n width: 200px;\n background-color: var(--kup-gray-color-10);\n display: flex;\n justify-content: space-between;\n padding: var(--kup-space-03);\n border-left: 1px solid transparent;\n align-items: center;\n\n &:hover:not(:has(> .f-cell)) {\n background-color: var(--kup-gray-color-10-hover);\n }\n\n &:focus:not(:has(> .f-cell)) {\n outline: 2px solid var(--kup-border-interactive);\n outline-offset: -2px;\n }\n\n &:active:not(:has(> .f-cell)) {\n border-left: 1px solid var(--kup-border-interactive);\n }\n\n > .nested-class {\n position: absolute;\n top: 0;\n left: 100%;\n display: none;\n z-index: 10;\n transition: display 0.2s ease;\n background-color: var(--kup-gray-color-10);\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.05);\n width: inherit;\n max-width: 200px;\n }\n\n .chevron-right {\n float: right;\n margin: 0;\n margin-left: var(--kup-space-03);\n @include kup-caption-01;\n }\n\n &:hover {\n > .nested-class {\n display: block;\n }\n }\n}\n\n.chevron-type-wrapper {\n display: flex;\n align-items: center;\n gap: var(--kup-space-03);\n .chevron-right {\n float: right;\n margin: 0;\n margin-left: var(--kup-space-00);\n @include kup-caption-01;\n }\n}\n\n.nested-class .f-cell .f-cell__content {\n display: block;\n .f-radio {\n gap: 0;\n .form-field {\n cursor: pointer;\n &:active,\n &:focus {\n outline: 2px solid var(--kup-border-interactive);\n outline-offset: -2px;\n }\n &:hover {\n background-color: var(--kup-gray-color-10-hover);\n }\n .radio {\n padding: var(--kup-space-03) 0 var(--kup-space-03) var(--kup-space-03);\n }\n label {\n width: 100%;\n cursor: pointer;\n padding: var(--kup-space-03);\n }\n }\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Method,\n Prop,\n State,\n VNode,\n Fragment,\n} from '@stencil/core';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport { GenericObject, KupComponent } from '../../types/GenericTypes';\nimport { getProps, setProps } from '../../utils/utils';\nimport { KupTreeNode } from '../kup-tree/kup-tree-declarations';\nimport { KupListProps } from '../kup-list/kup-list-declarations';\nimport {\n KupToolbarClickEventPayload,\n KupToolbarTreeNode,\n} from './kup-toolbar-declarations';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport {\n KupDataCellOptions,\n KupDataColumn,\n KupDataRow,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupLanguageGeneric } from '../../managers/kup-language/kup-language-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { FCell } from '../../f-components/f-cell/f-cell';\nimport { FCellProps } from '../../f-components/f-cell/f-cell-declarations';\n\n@Component({\n tag: 'kup-toolbar',\n styleUrl: 'kup-toolbar.scss',\n shadow: true,\n})\nexport class KupToolbar {\n /**\n * References the root HTML element of the component (<kup-toolbar>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n /**\n * The focused list item.\n * @default null\n */\n @State() focused: number = null;\n /**\n * The selected list items.\n * @default []\n */\n @State() selected: string[] = [];\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The data of the list.\n * @default []\n */\n @Prop({ mutable: true }) data: KupToolbarTreeNode[] = [];\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n @Event({\n eventName: 'kup-toolbar-click',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupClick: EventEmitter<KupToolbarClickEventPayload>;\n\n onKupClick(index: number, node: KupToolbarTreeNode) {\n this.#handleClick(index, node);\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupListProps, descriptions);\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupListProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n private generateRowForNode(treeNode: KupToolbarTreeNode): KupDataRow {\n const col: KupDataColumn = this.generateColumnForNode(treeNode);\n const row: KupDataRow = { cells: {} };\n row.cells[col.name] = treeNode;\n return row;\n }\n\n private generateColumnForNode(treeNode: KupToolbarTreeNode): KupDataColumn {\n const colname: string =\n treeNode.obj && treeNode.obj.t\n ? treeNode.obj.t + ';' + treeNode.obj.p\n : 'KUPCELL';\n const coltitle: string =\n treeNode.obj && treeNode.obj.t\n ? treeNode.obj.t + ';' + treeNode.obj.p\n : this.#kupManager.language.translate(\n KupLanguageGeneric.EMPTY_OBJECT\n );\n\n return {\n name: colname,\n title: coltitle,\n };\n }\n\n #renderTreeNode(node: KupToolbarTreeNode, index: number): VNode {\n const hasChildren = node.children && node.children.length > 0;\n\n if (!hasChildren) {\n const column = this.generateColumnForNode(node);\n const row = this.generateRowForNode(node);\n\n const cellProps: FCellProps = {\n cell: node,\n column: column,\n component: this,\n editable: node.isEditable,\n renderKup: true,\n row: row,\n };\n\n return (\n <>\n {cellProps.cell.shape ? (\n <FCell {...cellProps} />\n ) : (\n <div\n id={node.value}\n class=\"parent-class\"\n tabindex=\"0\"\n onClick={\n !cellProps.shape || cellProps.cell.data\n ? () => {\n this.onKupClick(index, node);\n }\n : undefined\n }\n >\n <span>{node.value}</span>\n <div class=\"chevron-type-wrapper\">\n {node.componentType && (\n <div class=\"component-type-chip\">\n {node.componentType}\n </div>\n )}\n <div\n style={{ width: '14px', height: '14px' }}\n ></div>\n </div>\n </div>\n )}\n </>\n );\n } else {\n return (\n <div class=\"parent-class\" tabindex=\"0\">\n <span>{node.value}</span>\n <div class=\"chevron-type-wrapper\">\n {node.componentType && (\n <div class=\"component-type-chip\">\n {node.componentType}\n </div>\n )}\n <FImage\n resource=\"chevron-right\"\n sizeX=\"14px\"\n sizeY=\"14px\"\n color=\"var(--kup-text-secondary)\"\n wrapperClass=\"chevron-right\"\n ></FImage>\n </div>\n <div class=\"nested-class\">\n {this.#renderNestedChildren(node.children, index)}\n </div>\n </div>\n );\n }\n }\n\n #handleClick(index: number, node: KupToolbarTreeNode): void {\n this.kupClick.emit({\n comp: this,\n id: this.rootElement.id,\n selected: node,\n index,\n });\n }\n\n #renderNestedChildren(\n children: KupToolbarTreeNode[],\n parentIndex: number\n ): VNode[] {\n return children.map((child, index) =>\n this.#renderTreeNode(child, parentIndex + index)\n );\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.theme.register(this);\n }\n\n componentDidLoad() {\n this.#kupManager.debug.logLoad(this, true);\n this.rootElement.addEventListener(\n 'kup-cell-update',\n (event: CustomEvent) => {\n const index = event.detail.cell.value;\n const node = event.detail.cell;\n this.onKupClick(index, node);\n }\n );\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n }\n\n componentDidRender() {\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n if (!this.data || this.data.length === 0) {\n return;\n }\n\n return (\n <Host>\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId}>\n <div class=\"toolbar-container\">\n {this.data.map((item, index) =>\n this.#renderTreeNode(item, index)\n )}\n </div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.#kupManager.theme.unregister(this);\n }\n}\n","import { GenericFilter } from '../../utils/filters/filters-declarations';\nimport { TotalsMap } from '../kup-data-table/kup-data-table-declarations';\nimport { KupState } from '../kup-state/kup-state';\nexport class KupTreeState implements KupState {\n density: string = 'small';\n globalFilter = false;\n globalFilterValue: string = '';\n showFilters: boolean = false;\n showFooter: boolean = false;\n totals: TotalsMap;\n filters: GenericFilter = {};\n load: boolean = false;\n\n public toDebugString() {\n // TODO\n return 'tree state';\n }\n}\n","import { KupTreeNode } from './kup-tree-declarations';\n\nexport function isExpandable(node: KupTreeNode): boolean {\n return (\n (node.children?.length > 0 || node.expandable) &&\n node.expandable !== false\n );\n}\n","import type {\n GenericFilter,\n ValueDisplayedValue,\n} from './filters-declarations';\nimport {\n KupTreeNode,\n treeMainColumnName,\n} from '../../components/kup-tree/kup-tree-declarations';\nimport { FiltersColumnMenu } from './filters-column-menu';\nimport { FiltersRows } from './filters-rows';\nimport {\n KupDataColumn,\n KupDataRowCells,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { addColumnValueFromRow } from '../../managers/kup-data/kup-data-cell-helper';\nimport { isExpandable } from '../../components/kup-tree/kup-tree-helper';\n\n/**\n * Filtering algorithms related to tree items rows.\n * @module FiltersTreeItems\n * @todo Should contain EVERY tree-item-specific filtering method.\n */\nexport class FiltersTreeItems extends FiltersRows {\n filterRows(\n items: KupTreeNode[] = [],\n filters: GenericFilter = {},\n globalFilter: string = '',\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): Array<KupTreeNode> {\n if (!items || items == null) {\n return [];\n }\n\n const isUsingGlobalFilter: boolean = !!(globalFilter && columns);\n\n if (\n !isUsingGlobalFilter &&\n !this.hasFilters(filters, columns, columnFilters)\n ) {\n this.setAllVisible(items);\n return items;\n }\n for (let i = 0; i < items.length; i++) {\n if (\n this.setNodeVisibility(\n items[i],\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n )\n ) {\n }\n }\n return items;\n }\n\n isNodeCompliant(\n node: KupTreeNode,\n filters: GenericFilter = {},\n globalFilter: string = '',\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n let retValue = false;\n\n if (node.cells != null) {\n let cellsHolder: KupDataRowCells = node.cells;\n cellsHolder[treeMainColumnName] = {\n obj: node.obj,\n value: node.value,\n };\n retValue = this.areCellsCompliant(\n cellsHolder,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n );\n }\n\n if (isUsingGlobalFilter == true) {\n retValue = this.isFilterCompliantForValue(node.value, globalFilter);\n }\n\n return retValue;\n }\n\n private setNodeVisibility(\n node: KupTreeNode,\n filters: GenericFilter = {},\n globalFilter: string,\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n let visibility: boolean = this.isNodeCompliant(\n node,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n );\n if (node.disabled != true && node.expandable == true) {\n /** se il ramo è compatibile con il filtro, mostro tutto l'albero sottostante */\n if (visibility == true && isUsingGlobalFilter) {\n this.setAllVisible(node.children);\n } else {\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n if (\n this.setNodeVisibility(\n node.children[i],\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n )\n ) {\n this.expandCollapseNode(node, true);\n visibility = true;\n }\n }\n }\n }\n }\n node.visible = visibility;\n return visibility;\n }\n\n private setAllVisible(items: KupTreeNode[]) {\n if (items) {\n items.forEach((element) => {\n element.visible = true;\n this.setAllVisible(element.children);\n });\n }\n }\n\n extractColumnValues(\n rows: Array<KupTreeNode>,\n column: KupDataColumn,\n values: ValueDisplayedValue[],\n univocal?: boolean\n ) {\n if (rows == null || rows.length == 0) {\n return;\n }\n /** il valore delle righe attualmente filtrate, formattato */\n rows.forEach((node): void => {\n let cellsHolder: KupDataRowCells = node.cells;\n cellsHolder[treeMainColumnName] = {\n obj: node.obj,\n value: node.value,\n };\n if (node.visible) {\n addColumnValueFromRow(\n values,\n column,\n cellsHolder[column.name],\n univocal\n );\n this.extractColumnValues(\n node.children,\n column,\n values,\n univocal\n );\n }\n });\n return values;\n }\n\n expandCollapseNode(treeNode: KupTreeNode, expandNode: boolean = false) {\n // The node is expandable, which means there are sub trees\n if (isExpandable(treeNode)) {\n // If the node does not already have the property to toggle expansion we add it\n // Notice how, if the property is already set, its first value will be the same value that was provided by the object itself\n // and only if the node must be expanded automatically then [treeExpandedPropName] is set to true forcibly.\n // This is done to allow a KupTreeNode to force its [treeExpandedPropName] to true so that specific nodes can be already set to open.\n treeNode.isExpanded = treeNode.hasOwnProperty('isExpanded')\n ? treeNode.isExpanded || expandNode\n : expandNode;\n }\n }\n\n expandCollapseAllNodes(treeNode: KupTreeNode, expandNode: boolean = false) {\n // The node is expandable, which means there are sub trees\n if (isExpandable(treeNode) && !treeNode.disabled) {\n this.expandCollapseNode(treeNode, expandNode);\n // Enriches also direct subtrees recursively (if it has children)\n if (treeNode.children && treeNode.children.length) {\n // To save some function calls, only child elements which are expandable will be enriched\n for (let i = 0; i < treeNode.children.length; i++) {\n this.expandCollapseAllNodes(\n treeNode.children[i],\n expandNode\n );\n }\n }\n }\n }\n}\n","@import 'styles/kup-tree-main';\n@import 'styles/kup-tree-classes';\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { PointerEvent } from '@interactjs/types/index';\nimport {\n TotalLabel,\n TotalMode,\n TotalsMap,\n} from './../kup-data-table/kup-data-table-declarations';\nimport {\n KupTreeProps,\n TreeNodePath,\n treeMainColumnName,\n KupTreeEventHandlerDetails,\n KupTreeNodeCollapseEventPayload,\n KupTreeNodeExpandEventPayload,\n KupTreeNodeSelectedEventPayload,\n KupTreeNodeButtonClickEventPayload,\n KupTreeContextMenuEventPayload,\n KupTreeColumnMenuEventPayload,\n KupTreeDynamicMassExpansionEventPayload,\n KupTreeExpansionMode,\n KupTreeColumnRemoveEventPayload,\n KupTreeNode,\n} from './kup-tree-declarations';\nimport { MDCRipple } from '@material/ripple';\nimport {\n KupManager,\n kupManagerInstance,\n} from '../../managers/kup-manager/kup-manager';\nimport {\n calcTotals,\n normalizeRows,\n} from '../kup-data-table/kup-data-table-helper';\nimport { KupTreeState } from './kup-tree-state';\nimport { KupStore } from '../kup-state/kup-store';\nimport { getColumnByName } from '../../utils/cell-utils';\nimport { getProps, setProps } from '../../utils/utils';\nimport { KupColumnMenu } from '../../utils/kup-column-menu/kup-column-menu';\nimport { FiltersColumnMenu } from '../../utils/filters/filters-column-menu';\nimport {\n GenericFilter,\n KupGlobalFilterMode,\n ValueDisplayedValue,\n} from '../../utils/filters/filters-declarations';\nimport { FiltersTreeItems } from '../../utils/filters/filters-tree-items';\nimport { KupListNode } from '../kup-list/kup-list-declarations';\nimport {\n GenericObject,\n KupComponent,\n KupEventPayload,\n} from '../../types/GenericTypes';\nimport {\n kupDynamicPositionAttribute,\n KupDynamicPositionCoordinates,\n KupDynamicPositionElement,\n} from '../../managers/kup-dynamic-position/kup-dynamic-position-declarations';\nimport { KupScrollOnHoverElement } from '../../managers/kup-scroll-on-hover/kup-scroll-on-hover-declarations';\nimport {\n KupLanguageGeneric,\n KupLanguageSearch,\n KupLanguageTotals,\n} from '../../managers/kup-language/kup-language-declarations';\nimport { KupCardEventPayload } from '../kup-card/kup-card-declarations';\nimport { componentWrapperId } from '../../variables/GenericVariables';\nimport { KupThemeIconValues } from '../../managers/kup-theme/kup-theme-declarations';\nimport { KupPointerEventTypes } from '../../managers/kup-interact/kup-interact-declarations';\nimport { KupManagerClickCb } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n FCellPadding,\n FCellProps,\n} from '../../f-components/f-cell/f-cell-declarations';\nimport { FCell } from '../../f-components/f-cell/f-cell';\nimport {\n KupDataCell,\n KupDataColumn,\n KupDataDataset,\n KupDataRow,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\nimport { FTextFieldMDC } from '../../f-components/f-text-field/f-text-field-mdc';\nimport { FImage } from '../../f-components/f-image/f-image';\nimport { isExpandable } from './kup-tree-helper';\n@Component({\n tag: 'kup-tree',\n styleUrl: 'kup-tree.scss',\n shadow: true,\n})\nexport class KupTree {\n /**\n * References the root HTML element of the component (<kup-tree>).\n */\n @Element() rootElement: HTMLElement;\n\n /*-------------------------------------------------*/\n /* S t a t e s */\n /*-------------------------------------------------*/\n\n state: KupTreeState = new KupTreeState();\n\n @State() private treeColumnVisible = true;\n /**\n * name of the column with the opened total menu\n */\n @State() private openedTotalMenu: string = null;\n @State() private columnMenuAnchor: string = null;\n @State() stateSwitcher: boolean = false;\n /**\n * An array of integers containing the path to a selected child.\\\n * Groups up the properties SelFirst, SelItem, SelName.\n */\n @State()\n private selectedNode: TreeNodePath = [];\n\n initWithPersistedState(): void {\n if (this.store && this.stateId) {\n const state = this.store.getState(this.stateId);\n if (state != null) {\n this.density = state.density;\n this.showFilters = state.showFilters;\n this.showFooter = state.showFooter;\n this.globalFilter = state.globalFilter;\n this.globalFilterValue = state.globalFilterValue;\n this.filters = { ...state.filters };\n this.totals = { ...state.totals };\n }\n }\n }\n\n persistState(): void {\n if (this.store && this.stateId) {\n let somethingChanged = false;\n\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.filters,\n this.filters\n )\n ) {\n this.state.filters = { ...this.filters };\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.density,\n this.density\n )\n ) {\n this.state.density = this.density;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showFilters,\n this.showFilters\n )\n ) {\n this.state.showFilters = this.showFilters;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.showFooter,\n this.showFooter\n )\n ) {\n this.state.showFooter = this.showFooter;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.totals,\n this.totals\n )\n ) {\n this.state.totals = { ...this.totals };\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.globalFilter,\n this.globalFilter\n )\n ) {\n this.state.globalFilter = this.globalFilter;\n somethingChanged = true;\n }\n if (\n !this.#kupManager.objects.deepEqual(\n this.state.globalFilterValue,\n this.globalFilterValue\n )\n ) {\n this.state.globalFilterValue = this.globalFilterValue;\n somethingChanged = true;\n }\n if (!this.state.load) {\n this.state.load = true;\n return;\n }\n if (somethingChanged) {\n this.store.persistState(this.stateId, this.state);\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* P r o p s */\n /*-------------------------------------------------*/\n\n /**\n * When enabled, the first level of depth will give an accordion look to nodes.\n * @default false\n */\n @Prop({ reflect: true }) asAccordion: boolean = false;\n /**\n * The columns of the tree when tree visualization is active.\n */\n @Prop({ mutable: true }) columns?: KupDataColumn[];\n /**\n * Custom style of the component.\n * @default \"\"\n * @see https://smeup.github.io/ketchup/#/customization\n */\n @Prop() customStyle: string = '';\n /**\n * The json data used to populate the tree view: the basic, always visible tree nodes.\n */\n @Prop({ mutable: true }) data: KupTreeNode[] = [];\n /**\n * The density of the rows, defaults at 'medium' and can also be set to 'dense' or 'wide'.\n */\n @Prop() density: FCellPadding = FCellPadding.MEDIUM;\n /**\n * Function that gets invoked when a new set of nodes must be loaded as children of a node.\n *\n * When useDynamicExpansion is set, the tree component will have two different behaviors depending on the value of this prop.\n * 1 - If this prop is set to null, no callback to download data is available:\n * the component will emit an event requiring the parent to load the children of the given node.\n * 2 - If this prop is set to have a callback, then the component will automatically make requests to load children of\n * a given node. After the load has been completed, a different event will be fired to alert the parent of the change.\n *\n * @see useDynamicExpansion\n */\n @Prop() dynamicExpansionCallback: (\n treeNodeToExpand: KupTreeNode,\n treeNodePath: TreeNodePath\n ) => Promise<KupTreeNode[]> | undefined = undefined;\n /**\n * When set to true, editable cells will be rendered using input components.\n * @default false\n */\n @Prop() editableData: boolean = false;\n /**\n * Enables the extracolumns add buttons.\n */\n @Prop() enableExtraColumns: boolean = true;\n /**\n * Flag: the nodes of the whole tree must be already expanded upon loading. Disabled nodes do NOT get expanded.\n */\n @Prop() expanded: boolean = false;\n /**\n * Behavior of nodes' expansion: it can be chosen between expanding a node by clicking on the dropdown icon, or by clicking on the whole node.\n * @default KupTreeExpansionMode.DROPDOWN\n */\n @Prop() expansionMode: KupTreeExpansionMode = KupTreeExpansionMode.DROPDOWN;\n /**\n * List of filters set by the user.\n */\n @Prop({ mutable: true }) filters: GenericFilter = {};\n /**\n * When set to true it activates the global filter.\n */\n @Prop() globalFilter: boolean = false;\n /**\n * The value of the global filter.\n */\n @Prop({ reflect: true, mutable: true }) globalFilterValue = '';\n\n /**\n * The mode of the global filter (default SIMPLE)\n */\n @Prop() globalFilterMode: KupGlobalFilterMode = KupGlobalFilterMode.SIMPLE;\n /**\n * Experimental feature: when active, the tree will try to prevent horizontal overflowing elements by setting a width on the content of the table cells.\n * It works only on cells of the main column.\n * @default false;\n */\n @Prop({ reflect: true }) preventXScroll: boolean = false;\n /**\n * Sets the possibility to remove the selected column.\n */\n @Prop() removableColumns: boolean = true;\n /**\n * When enabled displays Material's ripple effect on nodes (only when no columns are displayed).\n * @default true\n */\n @Prop() ripple: boolean = true;\n /**\n * Activates the scroll on hover function.\n */\n @Prop() scrollOnHover: boolean = false;\n /**\n * Shows the tree data as a table.\n */\n @Prop({ mutable: true }) showColumns: boolean = false;\n /**\n * When set to true enables the column filters.\n */\n @Prop() showFilters: boolean = true;\n /**\n * When set to true shows the footer.\n */\n @Prop() showFooter: boolean = false;\n /**\n * Flag: shows the header of the tree when the tree is displayed as a table.\n * @see showColumns\n */\n @Prop({ mutable: true }) showHeader: boolean = false;\n /**\n * Shows the icons of the nodes.\n */\n @Prop() showIcons: boolean = true;\n @Prop() stateId: string = '';\n @Prop() store: KupStore;\n /**\n * When the component must use the dynamic expansion feature to open its nodes, it means that not all the nodes of the\n * tree have been passed inside the data property.\n *\n * Therefore, when expanding a node, the tree must emit an event (or run a given callback)\n * and wait for the child nodes to be downloaded from the server.\n *\n * For more information:\n * @see dynamicExpansionCallback\n */\n @Prop() useDynamicExpansion: boolean = false;\n /**\n * Defines the current totals options.\n */\n @Prop({ mutable: true }) totals: TotalsMap;\n\n /*-------------------------------------------------*/\n /* I n t e r n a l V a r i a b l e s */\n /*-------------------------------------------------*/\n\n /**\n * Instance of the KupManager class.\n */\n #kupManager: KupManager = kupManagerInstance();\n /**\n * Reference to the column menu card.\n */\n private columnMenuCard: HTMLKupCardElement = null;\n private treeWrapperRef: KupScrollOnHoverElement;\n private clickTimeout: any[] = [];\n private globalFilterTimeout: number;\n private footer: { [index: string]: number };\n private sizedColumns: KupDataColumn[] = undefined;\n columnFilterTimeout: number;\n private columnMenuInstance: KupColumnMenu;\n private filtersColumnMenuInstance: FiltersColumnMenu =\n new FiltersColumnMenu();\n private filtersTreeItemsInstance: FiltersTreeItems = new FiltersTreeItems();\n private totalMenuCoords: KupDynamicPositionCoordinates = null;\n private visibleNodes: number;\n private contentRefs: HTMLElement[] = [];\n private oldWidth: number = null;\n private hold: boolean = false;\n private interactableTouch: HTMLElement[] = [];\n private clickCb: KupManagerClickCb = null;\n /**\n * Used to prevent too many resizes callbacks at once.\n */\n private resizeTimeout: number;\n\n /*-------------------------------------------------*/\n /* E v e n t s */\n /*-------------------------------------------------*/\n\n /**\n * Fired when a KupTreeNode gets collapsed (closed).\n */\n @Event({\n eventName: 'kup-tree-nodecollapse',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeNodeCollapse: EventEmitter<KupTreeNodeCollapseEventPayload>;\n\n /**\n * Fired when a node expansion ion has been triggered.\n * Contains additional data when the tree is using the dynamicExpansion feature.\n * @event kup-tree-nodeexpand\n * @type {object}\n * @property {TreeNodePath} treeNodePath - The array of indexes to retrieve the current treeNode inside the data prop.\n * @property {KupTreeNode} treeNode - Reference to the KupTreeNode data object which is being expanded (passed through the data prop).\n * @property {boolean} usesDynamicExpansion - Flag to notify that the component is running in dynamicExpansion mode.\n * @property {boolean} dynamicExpansionRequireChildren - Flag to notify that the current dynamicExpansion event\n * requires the parent component to add KupTreeNode children to the given KupTreeNode.\n * @see useDynamicExpansion\n * @see dynamicExpansionCallback\n * @since 1.0.0\n */\n @Event({\n eventName: 'kup-tree-nodeexpand',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeNodeExpand: EventEmitter<KupTreeNodeExpandEventPayload>;\n\n /**\n * Fired when a node of the tree has been selected\n */\n @Event({\n eventName: 'kup-tree-nodeselected',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeNodeSelected: EventEmitter<KupTreeNodeSelectedEventPayload>;\n\n @Event({\n eventName: 'kup-tree-buttonclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeNodeButtonClick: EventEmitter<KupTreeNodeButtonClickEventPayload>;\n\n /**\n * Generic right click event on tree.\n */\n @Event({\n eventName: 'kup-tree-contextmenu',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeContextMenu: EventEmitter<KupTreeContextMenuEventPayload>;\n /**\n * When the column menu is being opened/closed.\n */\n @Event({\n eventName: 'kup-tree-columnmenu',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeColumnMenu: EventEmitter<KupTreeColumnMenuEventPayload>;\n\n @Event({\n eventName: 'kup-tree-didload',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDidLoad: EventEmitter<KupEventPayload>;\n\n /**\n * Triggered when stop propagation event\n */\n\n @Event({\n eventName: 'kup-tree-didunload',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupDidUnload: EventEmitter<KupEventPayload>;\n\n @Event({\n eventName: 'kup-tree-nodedblclick',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeNodeDblClick: EventEmitter<KupTreeNodeCollapseEventPayload>;\n\n @Event({\n eventName: 'kup-tree-dynamicmassexpansion',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupTreeDynamicMassExpansion: EventEmitter<KupTreeDynamicMassExpansionEventPayload>;\n /**\n * Event fired when columns are removed (set to hidden).\n */\n @Event({\n eventName: 'kup-tree-columnremove',\n composed: true,\n cancelable: false,\n bubbles: true,\n })\n kupColumnRemove: EventEmitter<KupTreeColumnRemoveEventPayload>;\n\n /**\n * This method will get the selected nodes of the component.\n */\n @Method()\n async getSelectedNode(): Promise<TreeNodePath> {\n return this.selectedNode;\n }\n\n /**\n * This method will set the selected rows of the component.\n * @param {string|number[]} rowsIdentifiers - Array of ids (dataset) or indexes (rendered rows).\n * @param {boolean} emitEvent - The event will always be emitted unless emitEvent is set to false.\n */\n @Method()\n async setSelectedNode(\n treeNodePath: string,\n emitEvent?: boolean\n ): Promise<void> {\n this.selectedNode = treeNodePath\n .split(',')\n .map((treeNodeIndex) => parseInt(treeNodeIndex));\n if (emitEvent !== false) {\n this.kupTreeNodeSelected.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: this.selectedNode,\n treeNode: this.getTreeNode(this.selectedNode),\n columnName: null,\n });\n }\n }\n /*-------------------------------------------------*/\n /* W a t c h e r s */\n /*-------------------------------------------------*/\n\n @Watch('data')\n enrichDataWhenChanged(\n newData: KupTreeNode[] | KupDataDataset,\n oldData: KupTreeNode[]\n ) {\n if (!newData) {\n newData = [];\n }\n if (newData !== oldData) {\n this.refreshStructureState();\n }\n }\n\n @Watch('expanded')\n enrichStructureStateWhenChanged(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.refreshStructureState();\n }\n }\n\n /*-------------------------------------------------*/\n /* P u b l i c M e t h o d s */\n /*-------------------------------------------------*/\n\n /**\n * True if there aren't visible nodes\n */\n @Method()\n async isEmpty(): Promise<boolean> {\n return this.visibleNodes == 0;\n }\n\n /**\n * Closes any opened column menu.\n */\n @Method()\n async closeColumnMenu(): Promise<void> {\n this.columnMenuAnchor = null;\n if (this.columnMenuCard) {\n this.columnMenuCard.data = null;\n }\n this.columnMenuInstance.close(this.columnMenuCard);\n this.kupTreeColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.columnMenuCard,\n event: null,\n open: false,\n });\n }\n /**\n * Collapses all nodes.\n */\n @Method()\n async collapseAll() {\n if (!this.useDynamicExpansion) {\n for (let index = 0; index < this.data.length; index++) {\n this.data[index].isExpanded = false;\n this.handleChildren(this.data[index], false);\n }\n } else {\n this.kupTreeDynamicMassExpansion.emit({\n comp: this,\n id: this.rootElement.id,\n expandAll: false,\n });\n }\n this.refresh();\n }\n /**\n * Expands all nodes.\n */\n @Method()\n async expandAll() {\n if (!this.useDynamicExpansion) {\n for (let index = 0; index < this.data.length; index++) {\n this.data[index].isExpanded = true;\n this.handleChildren(this.data[index], true);\n }\n } else {\n this.kupTreeDynamicMassExpansion.emit({\n comp: this,\n id: this.rootElement.id,\n expandAll: true,\n });\n }\n this.refresh();\n }\n /**\n * Adds/subtracts the input number from the first node's depth level.\n */\n @Method()\n async setExpansionByDepth(modifier: number) {\n const handleChildren = (\n node: KupTreeNode,\n expand: boolean,\n maxDepth?: number,\n depth?: number\n ) => {\n const shouldExpand = depth < maxDepth;\n node.isExpanded = shouldExpand;\n for (\n let index = 0;\n node.children && index < node.children.length;\n index++\n ) {\n const child = node.children[index];\n handleChildren(child, expand, maxDepth, depth + 1);\n }\n };\n const getNodeDepth = (): number => {\n let maxDepth = 0;\n\n const traverseNode = (\n node: KupTreeNode,\n currentDepth: number\n ): void => {\n if (node.children?.length) {\n if (node.isExpanded) {\n maxDepth = Math.max(maxDepth, currentDepth + 1);\n }\n for (let index = 0; index < node.children.length; index++) {\n const child = node.children[index];\n traverseNode(child, currentDepth + 1);\n }\n }\n };\n\n for (let index = 0; index < this.data.length; index++) {\n const node = this.data[index];\n traverseNode(node, 0);\n }\n return maxDepth;\n };\n\n let maxDepth = getNodeDepth() + modifier;\n\n if (!this.useDynamicExpansion) {\n for (let index = 0; index < this.data.length; index++) {\n const node = this.data[index];\n handleChildren(node, false, maxDepth, 0);\n }\n } else {\n this.kupTreeDynamicMassExpansion.emit({\n comp: this,\n id: this.rootElement.id,\n expandAll: false,\n });\n }\n this.refresh();\n }\n /**\n * Used to retrieve component's props values.\n * @param {boolean} descriptions - When provided and true, the result will be the list of props with their description.\n * @returns {Promise<GenericObject>} List of props as object, each key will be a prop.\n */\n @Method()\n async getProps(descriptions?: boolean): Promise<GenericObject> {\n return getProps(this, KupTreeProps, descriptions);\n }\n /**\n * Hides the given column.\n * @param {KupDataColumn} column - Column to hide.\n */\n @Method()\n async hideColumn(column: KupDataColumn): Promise<void> {\n this.#kupManager.data.column.hide(this.columns, [column.name]);\n this.kupColumnRemove.emit({\n comp: this,\n id: this.rootElement.id,\n column: column,\n });\n this.refresh();\n }\n /**\n * Opens the column menu of the given column.\n * @param {string} column - Name of the column.\n */\n @Method()\n async openColumnMenu(column: string): Promise<void> {\n this.columnMenuAnchor = column;\n if (!this.columnMenuCard) {\n this.columnMenuCard = document.createElement('kup-card');\n this.columnMenuCard.isMenu = true;\n this.columnMenuCard.layoutNumber = 12;\n this.columnMenuCard.sizeX = 'auto';\n this.columnMenuCard.sizeY = 'auto';\n this.columnMenuCard.addEventListener(\n 'kup-card-click',\n (e: CustomEvent<KupEventPayload>) => {\n this.kupTreeColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.columnMenuCard,\n event: e,\n open: this.columnMenuCard.menuVisible,\n });\n }\n );\n this.columnMenuCard.addEventListener(\n 'kup-card-event',\n (e: CustomEvent<KupCardEventPayload>) => {\n this.columnMenuInstance.eventHandlers(e, this);\n this.kupTreeColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.columnMenuCard,\n event: e,\n open: this.columnMenuCard.menuVisible,\n });\n }\n );\n }\n this.columnMenuCard.setAttribute('data-column', column);\n this.columnMenuCard.data = this.columnMenuInstance.prepData(\n this,\n getColumnByName(this.getVisibleColumns(), column)\n );\n this.columnMenuInstance.open(this, column);\n this.columnMenuInstance.reposition(this, this.columnMenuCard);\n this.kupTreeColumnMenu.emit({\n comp: this,\n id: this.rootElement.id,\n card: this.columnMenuCard,\n event: null,\n open: true,\n });\n }\n /**\n * This method is used to trigger a new render of the component.\n */\n @Method()\n async refresh(): Promise<void> {\n forceUpdate(this);\n }\n /**\n * This method is invoked by KupManager whenever the component changes size.\n */\n @Method()\n async resizeCallback(): Promise<void> {\n if (this.rootElement.clientWidth !== this.oldWidth) {\n window.clearTimeout(this.resizeTimeout);\n this.resizeTimeout = window.setTimeout(() => this.refresh(), 300);\n }\n }\n /**\n * Sets the props to the component.\n * @param {GenericObject} props - Object containing props that will be set to the component.\n */\n @Method()\n async setProps(props: GenericObject): Promise<void> {\n setProps(this, KupTreeProps, props);\n }\n\n /*-------------------------------------------------*/\n /* P r i v a t e M e t h o d s */\n /*-------------------------------------------------*/\n\n setTreeColumnVisibility(value: boolean) {\n this.treeColumnVisible = value;\n }\n\n isTreeColumnVisible(): boolean {\n return this.treeColumnVisible;\n }\n\n private checkScrollOnHover() {\n if (!this.#kupManager.scrollOnHover.isRegistered(this.treeWrapperRef)) {\n if (this.scrollOnHover) {\n this.#kupManager.scrollOnHover.register(this.treeWrapperRef);\n }\n } else {\n if (!this.scrollOnHover) {\n this.#kupManager.scrollOnHover.unregister(this.treeWrapperRef);\n }\n }\n }\n\n onKupTreeNodeDblClick(treeNodeData: KupTreeNode, treeNodePath: string) {\n for (let index = 0; index < this.clickTimeout.length; index++) {\n clearTimeout(this.clickTimeout[index]);\n this.#kupManager.debug.logMessage(\n this,\n 'Cleared hdlTreeNodeClick timeout(' +\n this.clickTimeout[index] +\n ').'\n );\n }\n this.clickTimeout = [];\n this.kupTreeNodeDblClick.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: treeNodePath\n .split(',')\n .map((treeNodeIndex) => parseInt(treeNodeIndex)),\n treeNode: treeNodeData,\n });\n }\n\n nodesToRows(): KupDataRow[] {\n function children(TreeNode: KupTreeNode) {\n for (let index = 0; index < TreeNode.children.length; index++) {\n const node: KupTreeNode = TreeNode.children[index];\n rows.push({\n cells: TreeNode.children[index].cells,\n });\n if (node.children) {\n children(node);\n }\n }\n }\n let rows: KupDataRow[] = [];\n for (let index = 0; index < this.data.length; index++) {\n const node: KupTreeNode = this.data[index];\n rows.push({\n cells: this.data[index].cells,\n });\n if (node.children) {\n children(this.data[index]);\n }\n }\n return rows;\n }\n\n private setDynPosElements() {\n // Column menu\n if (this.columnMenuCard && this.columnMenuCard.data) {\n this.columnMenuCard.data = this.columnMenuInstance.prepData(\n this,\n getColumnByName(\n this.getVisibleColumns(),\n this.columnMenuAnchor\n ),\n this.columnMenuCard.data\n );\n }\n }\n\n expandCollapseNode(treeNode: KupTreeNode, expandNode: boolean = false) {\n this.filtersTreeItemsInstance.expandCollapseNode(treeNode, expandNode);\n }\n\n expandCollapseAllNodes(treeNode: KupTreeNode, expandNode: boolean = false) {\n this.filtersTreeItemsInstance.expandCollapseAllNodes(\n treeNode,\n expandNode\n );\n }\n\n getColumns(): Array<KupDataColumn> {\n return this.columns ? this.columns : [{ title: '', name: '' }];\n }\n\n private getSizedColumns() {\n let columns = this.getColumns();\n let sizedColumns = [];\n for (let j = 0; j < columns.length; j++) {\n if (\n columns[j].size !== null &&\n columns[j].size !== undefined &&\n columns[j].size !== ''\n ) {\n sizedColumns.push(columns[j]);\n }\n }\n if (sizedColumns.length > 0) {\n return sizedColumns;\n } else {\n return undefined;\n }\n }\n\n getVisibleColumns(): Array<KupDataColumn> {\n return this.getColumns().filter((column) =>\n column.hasOwnProperty('visible') ? column.visible : true\n );\n }\n\n getHeadingColumns(): Array<KupDataColumn> {\n const firstColum: KupDataColumn = {\n name: treeMainColumnName,\n title: '',\n };\n const visibleColumns = this.getVisibleColumns();\n return [firstColum, ...visibleColumns];\n }\n\n /*\n *For launch the event when selected node\n */\n launchNodeEvent(treeNodePath: TreeNodePath, treeNode: KupTreeNode) {\n if (treeNodePath && treeNodePath.length > 0) {\n if (treeNodePath[0] != -1) {\n var tn = treeNode.children[treeNodePath[0]];\n if (!tn) {\n tn = treeNode;\n }\n if (treeNodePath.length > 1) {\n treeNodePath = treeNodePath.slice(1);\n this.launchNodeEvent(treeNodePath, tn);\n } else {\n this.hdlTreeNodeClick(\n null,\n tn,\n this.selectedNodeToString(this.selectedNode)\n );\n }\n }\n }\n }\n\n private openTotalMenu(column: KupDataColumn) {\n this.openedTotalMenu = column.name;\n }\n\n private onTotalMenuOpen(column: KupDataColumn) {\n this.closeTotalMenu();\n this.openTotalMenu(column);\n }\n\n private getEventDetails(\n path: HTMLElement[],\n e?: PointerEvent\n ): KupTreeEventHandlerDetails {\n let isHeader: boolean,\n isBody: boolean,\n isFooter: boolean,\n td: HTMLElement,\n th: HTMLElement,\n tr: HTMLElement,\n filterRemove: HTMLSpanElement;\n if (path) {\n for (let i = path.length - 1; i >= 0; i--) {\n let p = path[i];\n if (!p.tagName) {\n continue;\n }\n switch (p.tagName.toUpperCase()) {\n case 'THEAD': {\n isHeader = true;\n break;\n }\n case 'TBODY': {\n isBody = true;\n break;\n }\n case 'TFOOT': {\n isFooter = true;\n break;\n }\n case 'TD': {\n td = p;\n break;\n }\n case 'TH': {\n th = p;\n break;\n }\n case 'TR': {\n tr = p;\n break;\n }\n default: {\n if (\n p.classList.contains(\n KupThemeIconValues.FILTER_REMOVE.replace(\n '--',\n ''\n )\n )\n ) {\n filterRemove = p;\n }\n break;\n }\n }\n }\n }\n let cell: KupDataCell = null,\n column: KupDataColumn = null,\n row: KupTreeNode = null;\n if (isBody) {\n if (td) {\n cell = td['data-cell'];\n }\n if (tr) {\n row = tr['data-row'];\n }\n }\n if (isHeader || isBody || isFooter) {\n const columnName = td\n ? td.dataset.column\n : th\n ? th.dataset.column\n : null;\n if (columnName) {\n column = getColumnByName(this.getColumns(), columnName);\n }\n }\n\n return {\n area: isHeader\n ? 'header'\n : isBody\n ? 'body'\n : isFooter\n ? 'footer'\n : null,\n cell: cell ? cell : null,\n column: column ? column : null,\n filterRemove: filterRemove ? filterRemove : null,\n originalEvent: e,\n row: row ? row : null,\n td: td ? td : null,\n th: th ? th : null,\n tr: tr ? tr : null,\n };\n }\n\n private contextMenuHandler(e: PointerEvent): KupTreeEventHandlerDetails {\n e.preventDefault();\n const details = this.getEventDetails(\n this.#kupManager.getEventPath(e.target, this.rootElement),\n e\n );\n if (details.area === 'header') {\n if (details.th && details.column) {\n this.openColumnMenu(details.column.name);\n return details;\n }\n } else if (details.area === 'footer') {\n if (details.td && details.column) {\n this.totalMenuCoords = { x: e.clientX, y: e.clientY };\n this.onTotalMenuOpen(details.column);\n return details;\n }\n }\n return details;\n }\n\n // When a TreeNode can be selected\n hdlTreeNodeClick(\n e: MouseEvent,\n treeNodeData: KupTreeNode,\n treeNodePath: string\n ) {\n if (\n this.expansionMode.toLowerCase() ===\n KupTreeExpansionMode.DROPDOWN ||\n (this.expansionMode.toLowerCase() === KupTreeExpansionMode.NODE &&\n !isExpandable(treeNodeData))\n ) {\n const td = e\n ? this.#kupManager\n .getEventPath(e.target, this.rootElement)\n .find((el) => {\n if (el.tagName === 'TD') return el;\n })\n : null;\n // If this TreeNode is not disabled, then it can be selected and an event is emitted\n if (treeNodeData && !treeNodeData.disabled) {\n this.selectedNode = treeNodePath\n .split(',')\n .map((treeNodeIndex) => parseInt(treeNodeIndex));\n\n this.kupTreeNodeSelected.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: this.selectedNode,\n treeNode: treeNodeData,\n columnName: td ? td.dataset.column : null,\n });\n }\n }\n\n // If KupTreeExpansionMode.NODE then click is a collapse/expand click\n if (this.expansionMode.toLowerCase() === KupTreeExpansionMode.NODE) {\n this.hdlTreeNodeExpanderClick(\n treeNodeData,\n treeNodePath,\n e ? e.ctrlKey : false\n );\n }\n }\n\n // When a TreeNode must be expanded or closed.\n hdlTreeNodeExpanderClick(\n treeNodeData: KupTreeNode,\n treeNodePath: string,\n ctrlKey: boolean\n ) {\n // If the node is expandable\n if (isExpandable(treeNodeData)) {\n // Always composes the tree node path as an array\n const arrayTreeNodePath: TreeNodePath = treeNodePath\n .split(',')\n .map((index) => parseInt(index));\n\n // There are already children set in this TreeNode -> expand or collapse node and emit appropriate event\n if (treeNodeData.children && treeNodeData.children.length) {\n // Updates expanded state and force rerender\n treeNodeData.isExpanded = !treeNodeData.isExpanded;\n if (ctrlKey) {\n this.handleChildren(treeNodeData, treeNodeData.isExpanded);\n }\n this.refresh();\n if (treeNodeData.isExpanded) {\n // TreeNode is now expanded -> Fires expanded event\n this.kupTreeNodeExpand.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: arrayTreeNodePath,\n treeNode: treeNodeData,\n usesDynamicExpansion: this.useDynamicExpansion,\n });\n } else {\n // TreeNode is now collapsed -> Fires collapsed event\n this.kupTreeNodeCollapse.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: arrayTreeNodePath,\n treeNode: treeNodeData,\n });\n }\n } else if (this.useDynamicExpansion) {\n if (ctrlKey) {\n this.kupTreeDynamicMassExpansion.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: arrayTreeNodePath,\n treeNode: treeNodeData,\n });\n }\n // When the component must use the dynamic expansion feature\n // Currently it does not support the expanded prop\n\n // Checks if we have a dynamicExpansionCallback or not\n if (this.dynamicExpansionCallback) {\n // We have a callback: invokes it and after the result is returned updates the tree\n this.dynamicExpansionCallback(\n treeNodeData,\n arrayTreeNodePath\n )\n .then((childrenTreeNodes) => {\n // Children returned successfully\n treeNodeData.children = childrenTreeNodes;\n treeNodeData.isExpanded = !treeNodeData.isExpanded;\n this.refresh();\n\n // TreeNode is now expanded -> Fires expanded event\n this.kupTreeNodeExpand.emit({\n comp: this,\n id: this.rootElement.id,\n treeNodePath: arrayTreeNodePath,\n treeNode: treeNodeData,\n usesDynamicExpansion: true,\n });\n })\n .catch((err) => {\n console.error(\n 'KupTree: An error occurred when trying to fetch dynamicExpansion nodes data',\n err,\n treeNodeData\n );\n });\n } else {\n // we do NOT have a callback set.\n // Fires the expand request for the given TreeNode and set the appropriate flag\n this.kupTreeNodeExpand.emit({\n comp: this,\n id: this.rootElement.id,\n treeNode: treeNodeData,\n treeNodePath: arrayTreeNodePath,\n usesDynamicExpansion: true,\n dynamicExpansionRequireChildren: true,\n });\n\n treeNodeData.isExpanded = !treeNodeData.isExpanded;\n }\n }\n }\n }\n\n private hasTotals() {\n return this.totals && Object.keys(this.totals).length > 0;\n }\n\n private handleChildren(treeNode: KupTreeNode, expand: boolean) {\n for (let index = 0; index < treeNode.children.length; index++) {\n let node = treeNode.children[index];\n if (!node.disabled) {\n node.isExpanded = expand;\n if (node.children) {\n this.handleChildren(node, expand);\n }\n }\n }\n }\n\n /**\n * Given a nodePath, transform that array into\n * @param nodePath\n */\n selectedNodeToString(nodePath: TreeNodePath) {\n let strToRet = '';\n if (nodePath && nodePath.length) {\n strToRet = nodePath[0].toString();\n for (let i = 1; i < nodePath.length; i++) {\n strToRet += `,${nodePath[i]}`;\n }\n }\n return strToRet;\n }\n\n private getFilterValueForTooltip(column: KupDataColumn): string {\n return this.filtersColumnMenuInstance.getFilterValueForTooltip(\n this.filters,\n column\n );\n }\n\n private getTreeNode(nodePath: TreeNodePath): KupTreeNode {\n if (!nodePath || nodePath.length == 0) {\n return null;\n }\n let father = this.data;\n let node: KupTreeNode = null;\n for (let index = 0; index < nodePath.length; index++) {\n if (node) {\n father = node.children;\n }\n const nodeIndex = nodePath[index];\n node = father[nodeIndex];\n }\n return node;\n }\n\n private onRemoveFilter(column: KupDataColumn) {\n const newFilters: GenericFilter = { ...this.filters };\n this.filtersColumnMenuInstance.removeFilter(newFilters, column.name);\n this.filters = newFilters;\n }\n\n onGlobalFilterChange({ detail }) {\n let value = '';\n if (detail && detail.value) {\n value = detail.value;\n }\n this.globalFilterValue = value;\n }\n\n getColumnValues(column: KupDataColumn): ValueDisplayedValue[] {\n return this.filtersTreeItemsInstance.getColumnValues(\n this,\n column,\n this.globalFilterValue,\n this.filtersColumnMenuInstance\n );\n }\n\n getRows(): Array<KupTreeNode> {\n return this.data ? this.data : [];\n }\n\n private filterNodes() {\n let items: KupTreeNode[] = this.filtersTreeItemsInstance.filterRows(\n this.getRows(),\n this.filters,\n this.globalFilterValue,\n this.getColumns(),\n this.filtersColumnMenuInstance\n );\n\n this.visibleNodes = this.calculateVisibleNodes(items);\n }\n\n private calculateVisibleNodes(items: KupTreeNode[]): number {\n let count = 0;\n if (items) {\n items.forEach((element) => {\n if (element.visible) {\n count++;\n }\n count += this.calculateVisibleNodes(element.children);\n });\n }\n return count;\n }\n\n private refreshStructureState() {\n if (this.data) {\n if ((this.data as KupDataDataset).columns) {\n this.#kupManager.debug.logMessage(\n this,\n 'Detected KupDataDataset: setting up tree as grid.',\n KupDebugCategory.WARNING\n );\n const data = this.data as KupDataDataset;\n this.columns = data.columns;\n this.data = this.#kupManager.data.row.toNode(data);\n this.showColumns = true;\n this.showHeader = true;\n }\n // When the nodes must be expanded upon loading and the tree is not using a dynamicExpansion (and the current TreeNode is not disabled)\n // the default value of the treeExpandedPropName is set to true\n this.data.forEach((rootNode) => {\n this.expandCollapseAllNodes(\n rootNode,\n this.expanded && !this.useDynamicExpansion\n );\n });\n this.selectedNode = [];\n }\n }\n\n private getCellStyle(colName: string, cellStyle: any): any {\n // Controls if there are columns with a specified width\n if (this.sizedColumns) {\n let colWidth: string = '';\n\n // Search if this column has a specified width\n for (let j = 0; j < this.sizedColumns.length; j++) {\n if (colName === this.sizedColumns[j].name) {\n colWidth = this.sizedColumns[j].size;\n break;\n }\n }\n\n // Specific width has been found\n if (colWidth) {\n if (!cellStyle) {\n cellStyle = {};\n }\n\n // Sets the width.\n cellStyle['max-width'] = colWidth;\n cellStyle['min-width'] = colWidth;\n cellStyle['width'] = colWidth;\n cellStyle['overflow'] = 'hidden';\n }\n }\n return cellStyle;\n }\n\n /**\n * Renders the header of the tree when it must be displayed as a table.\n * @returns An array of table header cells.\n */\n renderHeader(): JSX.Element[] {\n return this.getHeadingColumns().map((column) => {\n if (\n !this.isTreeColumnVisible() &&\n column.name === treeMainColumnName\n )\n return;\n\n //---- Filter ----\n let filter = null;\n\n if (\n this.filtersColumnMenuInstance.hasFiltersForColumn(\n this.filters,\n column\n )\n ) {\n const svgLabel =\n this.#kupManager.language.translate(\n KupLanguageGeneric.REMOVE_FILTERS\n ) + `: '${this.getFilterValueForTooltip(column)}'`;\n /**\n * When column has a filter but filters must not be displayed, shows an icon to remove the filter.\n * Upon click, the filter gets removed.\n */\n filter = (\n <span\n title={svgLabel}\n class={`kup-icon ${KupThemeIconValues.FILTER_REMOVE.replace(\n '--',\n ''\n )}`}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.onRemoveFilter(column);\n }}\n ></span>\n );\n }\n\n return (\n <th\n data-column={column.name}\n style={this.getCellStyle(column.name, null)}\n >\n <span class=\"column-title\">{column.title}</span>\n {filter}\n </th>\n );\n });\n }\n\n /**\n * Renders a content with a part highlighted.\n * NOTE: same in kup-accordion and in kup-tree\n */\n private renderHighlightedContent(\n content: string,\n highlight: string,\n styleClass: string\n ) {\n let contentSlices = [];\n if (highlight && content) {\n let contentPart = content;\n let end = contentPart\n .toLowerCase()\n .indexOf(highlight.toLowerCase());\n while (end > -1) {\n contentSlices.push(contentPart.substring(0, end));\n contentSlices.push(\n <span class={styleClass + '--highlighted'}>\n {contentPart.substring(end, end + highlight.length)}\n </span>\n );\n contentPart = contentPart.substring(\n end + highlight.length,\n contentPart.length\n );\n end = contentPart\n .toLowerCase()\n .indexOf(highlight.toLowerCase());\n }\n if (end < contentPart.length) {\n contentSlices.push(\n contentPart.substring(end, contentPart.length)\n );\n }\n } else {\n contentSlices.push(content);\n }\n return (\n <span\n class={styleClass}\n ref={(el: HTMLElement) => this.contentRefs.push(el)}\n title={this.preventXScroll ? content : null}\n >\n {contentSlices}\n </span>\n );\n }\n\n /**\n * Given a KupTreeNode, reads through its data then composes and returns its JSX object.\n * @param treeNodeData - The KupTreeNode object to parse.\n * @param treeNodePath - A string containing the comma(,) separated indexes of the KupTreeNodes to use,\n * sorted from left to right, to access the current KupTreeNode starting from the data prop children object.\n * @param treeNodeDepth - An integer to keep track of the depth level of the current KupTreeNode. Used for indentation.\n * @returns The the JSX created from the current tree node.\n */\n renderTreeNode(\n treeNodeData: KupTreeNode,\n treeNodePath: string,\n treeNodeDepth: number = 0\n ): JSX.Element {\n // Creates the indentation of the current element. Use a css variable to specify padding.\n let indent = treeNodeDepth ? (\n <span\n class=\"kup-tree__indent\"\n style={{\n ['--kup_tree_node_depth']: this.asAccordion\n ? (treeNodeDepth - 1).toString()\n : treeNodeDepth.toString(),\n }}\n />\n ) : null;\n\n // If the tree node is expandable, adds the icon to show the expansion.\n // If expandable, also add the callback on the click action.\n // If it is not expandable, we simply add a placeholder with no icons.\n const hasExpandIcon: boolean = !!(\n isExpandable(treeNodeData) &&\n ((treeNodeData.children && treeNodeData.children.length) ||\n this.useDynamicExpansion)\n );\n let expandClass = 'expand-icon kup-tree__icon kup-tree__node__expander';\n if (hasExpandIcon) {\n expandClass += ' kup-icon';\n if (this.asAccordion && treeNodeDepth === 0) {\n expandClass += ` ${KupThemeIconValues.DROPDOWN.replace(\n '--',\n ''\n )}`;\n } else if (treeNodeData.isExpanded) {\n expandClass += ` ${KupThemeIconValues.EXPANDED.replace(\n '--',\n ''\n )}`;\n } else {\n expandClass += ` ${KupThemeIconValues.COLLAPSED.replace(\n '--',\n ''\n )}`;\n }\n }\n let treeExpandIcon = (\n <span\n title={\n this.#kupManager.language.translate(\n KupLanguageGeneric.EXPAND\n ) +\n '/' +\n this.#kupManager.language.translate(\n KupLanguageGeneric.COLLAPSE\n ) +\n ' (CTRL + Click)'\n }\n class={expandClass}\n onClick={\n this.expansionMode.toLowerCase() ===\n KupTreeExpansionMode.DROPDOWN && !treeNodeData.disabled\n ? (event: MouseEvent) => {\n event.stopPropagation();\n this.hdlTreeNodeExpanderClick(\n treeNodeData,\n treeNodePath,\n event.ctrlKey\n );\n }\n : null\n }\n ></span>\n );\n\n // When TreeNode icons are visible, creates the icon if one is specified\n let treeNodeIcon: any = null;\n if (this.showIcons) {\n if (treeNodeData.icon) {\n if (treeNodeData.icon === '') {\n treeNodeIcon = <span class=\"kup-tree__icon\" />;\n } else {\n treeNodeIcon = (\n <FImage\n color={treeNodeData.iconColor}\n placeholderResource={treeNodeData.placeholderIcon}\n resource={treeNodeData.icon}\n wrapperClass={'kup-tree__icon'}\n ></FImage>\n );\n }\n } else {\n treeNodeIcon = null;\n }\n }\n\n // Composes additional options for the tree node element\n let treeNodeOptions = {};\n if (\n treeNodeData.hasOwnProperty('isExpanded') &&\n treeNodeData.isExpanded &&\n hasExpandIcon\n ) {\n // If the node is expanded it has this attribute set to if this node is expanded or not.\n treeNodeOptions['data-is-expanded'] = treeNodeData.isExpanded;\n }\n\n // When can be expanded OR selected\n if (!treeNodeData.disabled) {\n treeNodeOptions['onClick'] = (e: MouseEvent) => {\n // Note: event must be cloned\n // otherwise inside setTimeout will be exiting the Shadow DOM scope(causing loss of information, including target).\n const clone: GenericObject = {};\n for (const key in e) {\n clone[key] = e[key];\n }\n this.clickTimeout.push(\n setTimeout(\n () =>\n this.hdlTreeNodeClick(\n clone as MouseEvent,\n treeNodeData,\n treeNodePath\n ),\n 300\n )\n );\n };\n }\n\n // When a tree node is displayed as a table\n let treeNodeCells: JSX.Element[] | null = null;\n let visibleCols = this.getVisibleColumns();\n if (this.showColumns && visibleCols && visibleCols.length) {\n treeNodeCells = [];\n // Renders all the cells\n for (let j = 0; j < visibleCols.length; j++) {\n const column = visibleCols[j];\n if (treeNodeData.cells && treeNodeData.cells[column.name]) {\n const cell = treeNodeData.cells[column.name]\n ? treeNodeData.cells[column.name]\n : null;\n const cellProps: FCellProps = {\n cell: cell,\n column: column,\n component: this,\n density: this.density,\n editable: this.editableData,\n renderKup: true,\n row: treeNodeData,\n setSizes: true,\n };\n treeNodeCells.push(\n <td\n class={`grid-cell`}\n data-cell={cell}\n data-column={column.name}\n >\n <FCell {...cellProps}></FCell>\n </td>\n );\n } else {\n treeNodeCells.push(<td class={`grid-cell`}></td>);\n }\n }\n }\n let title: string = undefined;\n if (\n !this.#kupManager.objects.isEmptyKupObj(treeNodeData.obj) &&\n this.#kupManager.debug.isDebug()\n ) {\n title =\n treeNodeData.obj.t +\n '; ' +\n treeNodeData.obj.p +\n '; ' +\n treeNodeData.obj.k +\n ';';\n }\n\n let treeNodeCell = null;\n if (this.isTreeColumnVisible()) {\n let content = '';\n if (KupGlobalFilterMode.HIGHLIGHT === this.globalFilterMode) {\n content = this.renderHighlightedContent(\n treeNodeData.value,\n this.globalFilterValue,\n 'cell-content'\n );\n } else {\n content = (\n <span\n ref={(el: HTMLElement) => this.contentRefs.push(el)}\n class=\"cell-content\"\n title={this.preventXScroll ? treeNodeData.value : null}\n >\n {treeNodeData.value}\n </span>\n );\n }\n\n treeNodeCell = (\n <td\n class={{\n 'first-node': treeNodeDepth === 0 ? true : false,\n 'mdc-ripple-surface':\n this.ripple &&\n !this.showColumns &&\n !treeNodeData.disabled,\n 'is-obj': !this.#kupManager.objects.isEmptyKupObj(\n treeNodeData.obj\n ),\n }}\n style={treeNodeData.style || null}\n title={title}\n onDblClick={() => {\n this.onKupTreeNodeDblClick(treeNodeData, treeNodePath);\n }}\n >\n {this.asAccordion && !treeNodeDepth\n ? [\n treeNodeIcon,\n content,\n hasExpandIcon ? treeExpandIcon : null,\n ]\n : [indent, treeExpandIcon, treeNodeIcon, content]}\n </td>\n );\n }\n\n return (\n <tr\n class={{\n 'kup-tree__node': true,\n 'with-dyn': !treeNodeData.disabled,\n 'kup-tree__node--disabled': treeNodeData.disabled,\n 'kup-tree__node--first': treeNodeDepth ? false : true,\n 'kup-tree__node--selected':\n !treeNodeData.disabled &&\n treeNodePath ===\n this.selectedNodeToString(this.selectedNode),\n }}\n data-row={treeNodeData}\n data-tree-path={treeNodePath}\n {...treeNodeOptions}\n >\n {treeNodeCell}\n {treeNodeCells}\n </tr>\n );\n }\n\n private closeTotalMenu() {\n this.openedTotalMenu = null;\n this.#kupManager.removeClickCallback(this.clickCb);\n }\n\n private isOpenedTotalMenuForColumn(column: string): boolean {\n return this.openedTotalMenu === column;\n }\n\n onTotalsChange(event, column) {\n // close menu\n this.closeTotalMenu();\n if (column) {\n // must do this\n // otherwise does not fire the watcher\n const totalsCopy = { ...this.totals };\n const value = event.detail.selected.id;\n if (value === TotalLabel.CANC) {\n if (this.totals && this.totals[column.name]) {\n delete totalsCopy[column.name];\n }\n } else {\n totalsCopy[column.name] = value;\n }\n this.totals = totalsCopy;\n }\n }\n\n renderFooter() {\n const nodesCell: HTMLElement = <td></td>;\n const footerCells = this.getVisibleColumns().map(\n (column: KupDataColumn) => {\n let totalMenu = undefined;\n let menuLabel = TotalLabel.CALC;\n const translation = {\n [TotalLabel.AVERAGE]: this.#kupManager.language.translate(\n KupLanguageTotals.AVERAGE\n ),\n [TotalLabel.CALC]: this.#kupManager.language.translate(\n KupLanguageTotals.CALCULATE\n ),\n [TotalLabel.CANC]: this.#kupManager.language.translate(\n KupLanguageTotals.CANCEL\n ),\n [TotalLabel.COUNT]: this.#kupManager.language.translate(\n KupLanguageTotals.COUNT\n ),\n [TotalLabel.DISTINCT]: this.#kupManager.language.translate(\n KupLanguageTotals.DISTINCT\n ),\n [TotalLabel.MATH]: this.#kupManager.language.translate(\n KupLanguageTotals.FORMULA\n ),\n [TotalLabel.MAX]: this.#kupManager.language.translate(\n KupLanguageTotals.MAXIMUM\n ),\n [TotalLabel.MIN]: this.#kupManager.language.translate(\n KupLanguageTotals.MINIMUM\n ),\n [TotalLabel.SUM]: this.#kupManager.language.translate(\n KupLanguageTotals.SUM\n ),\n };\n if (this.totals) {\n const totalValue = this.totals[column.name];\n if (totalValue) {\n if (totalValue.startsWith(TotalMode.MATH)) {\n menuLabel = TotalLabel.MATH;\n } else {\n switch (totalValue) {\n case TotalMode.COUNT:\n menuLabel = TotalLabel.COUNT;\n break;\n case TotalMode.DISTINCT:\n menuLabel = TotalLabel.DISTINCT;\n break;\n case TotalMode.SUM:\n menuLabel = TotalLabel.SUM;\n break;\n case TotalMode.AVERAGE:\n menuLabel = TotalLabel.AVERAGE;\n break;\n case TotalMode.MIN:\n menuLabel = TotalLabel.MIN;\n break;\n case TotalMode.MAX:\n menuLabel = TotalLabel.MAX;\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (this.isOpenedTotalMenuForColumn(column.name)) {\n let listData: KupListNode[] = [\n {\n id: TotalMode.COUNT,\n value: translation[TotalLabel.COUNT],\n },\n {\n id: TotalMode.DISTINCT,\n value: translation[TotalLabel.DISTINCT],\n },\n ];\n if (this.#kupManager.objects.isNumber(column.obj)) {\n listData.push(\n {\n id: TotalMode.SUM,\n value: translation[TotalLabel.SUM],\n },\n {\n id: TotalMode.AVERAGE,\n value: translation[TotalLabel.AVERAGE],\n },\n {\n id: TotalMode.MIN,\n value: translation[TotalLabel.MIN],\n },\n {\n id: TotalMode.MAX,\n value: translation[TotalLabel.MAX],\n }\n );\n }\n let selectedItem = listData.find(\n (item) => item.value === menuLabel\n );\n if (selectedItem) {\n selectedItem.selected = true;\n listData.push({\n id: TotalLabel.CANC,\n separator: true,\n value: translation[TotalLabel.CANC],\n });\n }\n\n totalMenu = (\n <kup-list\n class={`total-menu`}\n data={listData}\n id=\"totals-menu\"\n is-menu\n keyboardNavigation={true}\n menu-visible\n onkup-list-click={(event) =>\n this.onTotalsChange(event, column)\n }\n ></kup-list>\n );\n }\n\n let value;\n if (\n menuLabel === TotalLabel.COUNT ||\n menuLabel === TotalLabel.DISTINCT\n ) {\n value = this.footer[column.name];\n } else {\n value = this.#kupManager.math.numberToFormattedString(\n this.footer[column.name],\n column.decimals,\n column.obj ? column.obj.p : ''\n );\n }\n\n return (\n <td data-column={column.name}>\n {totalMenu}\n <span\n class=\"totals-value\"\n title={translation[menuLabel]}\n >\n {value}\n </span>\n </td>\n );\n }\n );\n\n return (\n <tfoot>\n <tr>\n {nodesCell}\n {footerCells}\n </tr>\n </tfoot>\n );\n }\n\n didLoadInteractables() {\n this.interactableTouch.push(this.treeWrapperRef);\n const tapCb = (e: PointerEvent) => {\n if (this.hold) {\n this.hold = false;\n return;\n }\n switch (e.button) {\n // right click\n case 2:\n this.kupTreeContextMenu.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.contextMenuHandler(e),\n });\n break;\n }\n };\n const holdCb = (e: PointerEvent) => {\n if (e.pointerType === 'pen' || e.pointerType === 'touch') {\n this.hold = true;\n this.kupTreeContextMenu.emit({\n comp: this,\n id: this.rootElement.id,\n details: this.contextMenuHandler(e),\n });\n }\n };\n this.#kupManager.interact.on(\n this.treeWrapperRef,\n KupPointerEventTypes.TAP,\n tapCb\n );\n this.#kupManager.interact.on(\n this.treeWrapperRef,\n KupPointerEventTypes.HOLD,\n holdCb\n );\n }\n\n private totalMenuPosition() {\n if (this.rootElement.shadowRoot) {\n const menu: HTMLKupListElement =\n this.rootElement.shadowRoot.querySelector('#totals-menu');\n if (menu) {\n this.#kupManager.dynamicPosition.register(\n menu as unknown as KupDynamicPositionElement,\n this.totalMenuCoords\n );\n if (!this.clickCb) {\n this.clickCb = {\n cb: () => {\n this.closeTotalMenu();\n this.#kupManager.dynamicPosition.stop(\n menu as unknown as KupDynamicPositionElement\n );\n },\n el: menu,\n };\n }\n this.#kupManager.addClickCallback(this.clickCb, true);\n this.#kupManager.dynamicPosition.start(\n menu as unknown as KupDynamicPositionElement\n );\n menu.menuVisible = true;\n }\n }\n }\n\n /**\n * Given a KupTreeNode, reads through its data to compose and return the KupTreeNodes of the root of this KupTreeNode\n * and its children nodes, composing an array of JSX KupTreeNodes.\n * @param treeNodeData - The KupTreeNode object to parse.\n * @param treeNodePath - A string containing the comma(,) separated indexes of the KupTreeNodes to use,\n * sorted from left to right, to access the current KupTreeNode starting from the data prop children object.\n * @param treeNodeDepth - An integer to keep track of the depth level of the current KupTreeNode. Used for indentation.\n * @returns An array of JSX KupTreeNodes created from the given treeNodeData.\n */\n renderTree(\n treeNodeData: KupTreeNode,\n treeNodePath: string,\n treeNodeDepth: number = 0\n ): JSX.Element[] {\n let treeNodes = [];\n\n if (treeNodeData && treeNodeData.visible == true) {\n // Creates and adds the root of the current tree\n treeNodes.push(\n this.renderTreeNode(treeNodeData, treeNodePath, treeNodeDepth)\n );\n\n // Checks if the current node can be expanded, has children object, has children and is expanded\n if (isExpandable(treeNodeData) && treeNodeData.isExpanded) {\n for (let i = 0; i < treeNodeData.children.length; i++) {\n treeNodes = treeNodes.concat(\n this.renderTree(\n treeNodeData.children[i],\n treeNodePath + ',' + i,\n treeNodeDepth + 1\n )\n );\n }\n }\n }\n\n return treeNodes;\n }\n\n private setEllipsis(): void {\n const treeRect: DOMRect = this.rootElement.getBoundingClientRect();\n for (let index = 0; index < this.contentRefs.length; index++) {\n const content: HTMLElement = this.contentRefs[index];\n if (content) {\n const cell = content.parentNode as HTMLElement;\n if (this.asAccordion && cell.classList.contains('first-node')) {\n cell.style.width = treeRect.width + 'px';\n } else {\n content.classList.remove('cell-content--ellipsis');\n content.style.setProperty('--kup_tree_content_width', ``);\n const rect: DOMRect = content.getBoundingClientRect();\n if (rect.right > treeRect.right) {\n const failsafeOffset: number = 5;\n const delta: number = rect.right - treeRect.right;\n content.classList.add('cell-content--ellipsis');\n content.style.setProperty(\n '--kup_tree_content_width',\n `${rect.width - delta - failsafeOffset}px`\n );\n }\n }\n }\n }\n }\n\n /*-------------------------------------------------*/\n /* L i f e c y c l e H o o k s */\n /*-------------------------------------------------*/\n\n componentWillLoad() {\n this.#kupManager.debug.logLoad(this, false);\n this.#kupManager.language.register(this);\n this.#kupManager.theme.register(this);\n this.columnMenuInstance = new KupColumnMenu();\n this.refreshStructureState();\n }\n\n componentDidLoad() {\n this.didLoadInteractables();\n this.kupDidLoad.emit({ comp: this, id: this.rootElement.id });\n this.#kupManager.resize.observe(this.rootElement);\n this.#kupManager.debug.logLoad(this, true);\n }\n\n componentWillRender() {\n this.#kupManager.debug.logRender(this, false);\n if (this.showFooter && this.columns) {\n this.footer = calcTotals(\n normalizeRows(this.getColumns(), this.nodesToRows()),\n this.totals\n );\n }\n this.filterNodes();\n }\n\n componentDidRender() {\n const root = this.rootElement.shadowRoot;\n if (root && this.ripple) {\n const rippleCells = root.querySelectorAll(\n '.mdc-ripple-surface:not(.mdc-ripple-upgraded)'\n );\n if (rippleCells) {\n for (let i = 0; i < rippleCells.length; i++) {\n MDCRipple.attachTo(rippleCells[i]);\n }\n }\n }\n if (root) {\n const fs: NodeListOf<HTMLElement> =\n root.querySelectorAll('.f-text-field');\n for (let index = 0; index < fs.length; index++) {\n FTextFieldMDC(fs[index]);\n }\n }\n if (this.preventXScroll) {\n this.setEllipsis();\n }\n this.totalMenuPosition();\n this.checkScrollOnHover();\n this.setDynPosElements();\n\n // *** Store\n this.persistState();\n // ***\n this.oldWidth = this.rootElement.clientWidth;\n this.#kupManager.debug.logRender(this, true);\n }\n\n render() {\n this.contentRefs = [];\n\n this.sizedColumns = this.getSizedColumns();\n let wrapperClass: string = 'density-medium';\n switch (this.density) {\n case FCellPadding.DENSE:\n wrapperClass = 'density-dense';\n break;\n case FCellPadding.WIDE:\n wrapperClass = 'density-wide';\n break;\n }\n\n // Composes TreeNodes\n let treeNodes: JSX.Element[] = [];\n if (this.data && this.data.length) {\n this.data.forEach((zeroDepthNode, index) => {\n treeNodes = treeNodes.concat(\n this.renderTree(zeroDepthNode, index.toString())\n );\n });\n } else {\n // There are no TreeNodes, so we print a single cell with a caption\n treeNodes.push(\n <tr>\n <td>\n {this.#kupManager.language.translate(\n KupLanguageGeneric.EMPTY_DATA\n )}\n </td>\n </tr>\n );\n }\n\n // Calculates if header must be shown or not\n const visibleHeader = this.showHeader && this.showColumns;\n\n let filterField = null;\n if (\n this.globalFilter &&\n this.data &&\n this.data.length &&\n this.data.length > 0\n ) {\n filterField = (\n <div id=\"global-filter\">\n <kup-text-field\n fullWidth={true}\n label={this.#kupManager.language.translate(\n KupLanguageSearch.SEARCH\n )}\n icon={KupThemeIconValues.SEARCH}\n initialValue={this.globalFilterValue}\n onkup-textfield-input={(event) => {\n window.clearTimeout(this.globalFilterTimeout);\n this.globalFilterTimeout = window.setTimeout(\n () => this.onGlobalFilterChange(event),\n 600\n );\n }}\n ></kup-text-field>\n </div>\n );\n }\n\n return (\n <Host>\n <style>\n {this.#kupManager.theme.setKupStyle(\n this.rootElement as KupComponent\n )}\n </style>\n <div id={componentWrapperId} class={wrapperClass}>\n {filterField}\n <div\n class=\"wrapper\"\n ref={(el: HTMLElement) =>\n (this.treeWrapperRef =\n el as KupScrollOnHoverElement)\n }\n >\n <table\n class=\"kup-tree\"\n data-show-columns={this.showColumns}\n onContextMenu={(e: MouseEvent) => {\n e.preventDefault();\n }}\n >\n <thead\n class={{\n 'header--is-visible': visibleHeader,\n }}\n >\n <tr>\n {visibleHeader ? this.renderHeader() : null}\n </tr>\n </thead>\n <tbody>{treeNodes}</tbody>\n {(this.showFooter || this.hasTotals()) &&\n this.columns\n ? this.renderFooter()\n : null}\n </table>\n </div>\n </div>\n </Host>\n );\n }\n\n disconnectedCallback() {\n this.#kupManager.language.register(this);\n this.#kupManager.resize.unobserve(this.rootElement);\n this.#kupManager.theme.unregister(this);\n const dynamicPositionElements: NodeListOf<KupDynamicPositionElement> =\n this.rootElement.shadowRoot.querySelectorAll(\n '[' + kupDynamicPositionAttribute + ']'\n );\n if (dynamicPositionElements.length > 0) {\n this.#kupManager.dynamicPosition.unregister(\n Array.prototype.slice.call(dynamicPositionElements)\n );\n }\n if (this.columnMenuCard) {\n this.columnMenuCard.remove();\n }\n if (this.scrollOnHover) {\n this.#kupManager.scrollOnHover.unregister(this.treeWrapperRef);\n }\n this.kupDidUnload.emit({ comp: this, id: this.rootElement.id });\n }\n}\n"],"mappings":"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","ignoreList":[]}