@dnncommunity/dnn-elements 0.15.1 → 0.15.2

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.
Files changed (102) hide show
  1. package/dist/cjs/dnn-button_17.cjs.entry.js +3 -3
  2. package/dist/cjs/dnn-button_17.cjs.entry.js.map +1 -1
  3. package/dist/cjs/dnn.cjs.js +2 -2
  4. package/dist/cjs/dnn.cjs.js.map +1 -1
  5. package/dist/cjs/{index-514ef6dd.js → index-81382452.js} +404 -239
  6. package/dist/cjs/index-81382452.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/cjs/loader.cjs.js.map +1 -1
  9. package/dist/collection/collection-manifest.json +2 -2
  10. package/dist/collection/components/dnn-button/dnn-button.js +195 -192
  11. package/dist/collection/components/dnn-button/dnn-button.stories.js +1 -1
  12. package/dist/collection/components/dnn-checkbox/dnn-checkbox.js +85 -99
  13. package/dist/collection/components/dnn-checkbox/dnn-checkbox.stories.js +1 -1
  14. package/dist/collection/components/dnn-chevron/dnn-chevron.js +92 -87
  15. package/dist/collection/components/dnn-chevron/dnn-chevron.stories.js +1 -1
  16. package/dist/collection/components/dnn-collapsible/dnn-collapsible.js +102 -90
  17. package/dist/collection/components/dnn-collapsible/dnn-collapsible.stories.js +1 -1
  18. package/dist/collection/components/dnn-color-picker/dnn-color-picker.js +105 -141
  19. package/dist/collection/components/dnn-color-picker/dnn-color-picker.stories.js +1 -1
  20. package/dist/collection/components/dnn-dropzone/dnn-dropzone.js +122 -137
  21. package/dist/collection/components/dnn-dropzone/dnn-dropzone.stories.js +1 -1
  22. package/dist/collection/components/dnn-image-cropper/CornerType.js +1 -1
  23. package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.js +129 -133
  24. package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.stories.js +1 -1
  25. package/dist/collection/components/dnn-modal/dnn-modal.css +5 -0
  26. package/dist/collection/components/dnn-modal/dnn-modal.js +136 -133
  27. package/dist/collection/components/dnn-modal/dnn-modal.js.map +1 -1
  28. package/dist/collection/components/dnn-modal/dnn-modal.stories.js +1 -1
  29. package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.js +164 -223
  30. package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.stories.js +1 -1
  31. package/dist/collection/components/dnn-permissions-grid/localization-interface.js +1 -1
  32. package/dist/collection/components/dnn-permissions-grid/permissions-interface.js +1 -1
  33. package/dist/collection/components/dnn-permissions-grid/role-group-interface.js +1 -1
  34. package/dist/collection/components/dnn-permissions-grid/role-interface.js +1 -1
  35. package/dist/collection/components/dnn-permissions-grid/searched-user-interface.js +1 -1
  36. package/dist/collection/components/dnn-searchbox/dnn-searchbox.js +101 -94
  37. package/dist/collection/components/dnn-searchbox/dnn-searchbox.stories.js +1 -1
  38. package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.js +55 -54
  39. package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.stories.js +1 -1
  40. package/dist/collection/components/dnn-tab/dnn-tab.js +69 -59
  41. package/dist/collection/components/dnn-tab/dnn-tab.stories.js +1 -1
  42. package/dist/collection/components/dnn-tabs/dnn-tabs.js +19 -16
  43. package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js +1 -1
  44. package/dist/collection/components/dnn-toggle/dnn-toggle.js +83 -75
  45. package/dist/collection/components/dnn-toggle/dnn-toggle.stories.js +1 -1
  46. package/dist/collection/components/dnn-toggle/toggle-interface.js +1 -1
  47. package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.js +79 -77
  48. package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.stories.js +1 -1
  49. package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.js +20 -24
  50. package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.stories.js +1 -1
  51. package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.js +117 -111
  52. package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.stories.js +1 -1
  53. package/dist/collection/index.js +1 -1
  54. package/dist/collection/utilities/colorInfo.js +1 -1
  55. package/dist/collection/utilities/debounce.js +1 -1
  56. package/dist/collection/utilities/dnnServicesFramework.js +1 -1
  57. package/dist/collection/utilities/mouseUtilities.js +1 -1
  58. package/dist/dnn/dnn.esm.js +1 -1
  59. package/dist/dnn/dnn.esm.js.map +1 -1
  60. package/dist/dnn/dnn.js +2 -1
  61. package/dist/dnn/p-21f18e37.system.js +3 -0
  62. package/dist/dnn/p-21f18e37.system.js.map +1 -0
  63. package/dist/dnn/p-2a79ad5b.system.entry.js +11 -0
  64. package/dist/dnn/p-2a79ad5b.system.entry.js.map +1 -0
  65. package/dist/dnn/{p-5bcf3629.system.js → p-52139080.system.js} +2 -2
  66. package/dist/dnn/{p-5bcf3629.system.js.map → p-52139080.system.js.map} +1 -1
  67. package/dist/dnn/{p-909f2db9.entry.js → p-6cc227ab.entry.js} +3 -3
  68. package/dist/dnn/p-6cc227ab.entry.js.map +1 -0
  69. package/dist/dnn/p-97d752ed.js +3 -0
  70. package/dist/dnn/p-97d752ed.js.map +1 -0
  71. package/dist/esm/dnn-button_17.entry.js +3 -3
  72. package/dist/esm/dnn-button_17.entry.js.map +1 -1
  73. package/dist/esm/dnn.js +2 -2
  74. package/dist/esm/dnn.js.map +1 -1
  75. package/dist/esm/{index-59e0950f.js → index-e9a3fcad.js} +404 -239
  76. package/dist/esm/index-e9a3fcad.js.map +1 -0
  77. package/dist/esm/loader.js +2 -2
  78. package/dist/esm/loader.js.map +1 -1
  79. package/dist/esm/polyfills/css-shim.js +1 -1
  80. package/dist/esm-es5/dnn-button_17.entry.js +2 -2
  81. package/dist/esm-es5/dnn-button_17.entry.js.map +1 -1
  82. package/dist/esm-es5/dnn.js +1 -1
  83. package/dist/esm-es5/dnn.js.map +1 -1
  84. package/dist/esm-es5/index-e9a3fcad.js +3 -0
  85. package/dist/esm-es5/index-e9a3fcad.js.map +1 -0
  86. package/dist/esm-es5/loader.js +1 -1
  87. package/dist/esm-es5/loader.js.map +1 -1
  88. package/dist/types/components.d.ts +73 -17
  89. package/dist/types/stencil-public-runtime.d.ts +15 -4
  90. package/loader/package.json +1 -0
  91. package/package.json +14 -14
  92. package/dist/cjs/index-514ef6dd.js.map +0 -1
  93. package/dist/dnn/p-3155c8a8.system.entry.js +0 -11
  94. package/dist/dnn/p-3155c8a8.system.entry.js.map +0 -1
  95. package/dist/dnn/p-7ffdbed1.js +0 -2
  96. package/dist/dnn/p-7ffdbed1.js.map +0 -1
  97. package/dist/dnn/p-909f2db9.entry.js.map +0 -1
  98. package/dist/dnn/p-b8064287.system.js +0 -2
  99. package/dist/dnn/p-b8064287.system.js.map +0 -1
  100. package/dist/esm/index-59e0950f.js.map +0 -1
  101. package/dist/esm-es5/index-59e0950f.js +0 -2
  102. package/dist/esm-es5/index-59e0950f.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/dnn-button/dnn-button.scss?tag=dnn-button&encapsulation=shadow","src/components/dnn-button/dnn-button.tsx","src/components/dnn-checkbox/dnn-checkbox.scss?tag=dnn-checkbox&encapsulation=shadow","src/components/dnn-checkbox/dnn-checkbox.tsx","src/components/dnn-chevron/dnn-chevron.scss?tag=dnn-chevron&encapsulation=shadow","src/components/dnn-chevron/dnn-chevron.tsx","src/components/dnn-collapsible/dnn-collapsible.scss?tag=dnn-collapsible&encapsulation=shadow","src/components/dnn-collapsible/dnn-collapsible.tsx","src/utilities/colorInfo.ts","src/components/dnn-color-picker/dnn-color-picker.scss?tag=dnn-color-picker&encapsulation=shadow","src/components/dnn-color-picker/dnn-color-picker.tsx","src/components/dnn-dropzone/dnn-dropzone.scss?tag=dnn-dropzone&encapsulation=shadow","src/components/dnn-dropzone/dnn-dropzone.tsx","src/components/dnn-image-cropper/CornerType.ts","src/utilities/mouseUtilities.ts","src/components/dnn-image-cropper/dnn-image-cropper.scss?tag=dnn-image-cropper&encapsulation=shadow","src/components/dnn-image-cropper/dnn-image-cropper.tsx","src/components/dnn-modal/dnn-modal.scss?tag=dnn-modal&encapsulation=shadow","src/components/dnn-modal/dnn-modal.tsx","src/components/dnn-permissions-grid/dnn-permissions-grid.scss?tag=dnn-permissions-grid&encapsulation=shadow","src/components/dnn-permissions-grid/dnn-permissions-grid.tsx","src/components/dnn-searchbox/dnn-searchbox.scss?tag=dnn-searchbox&encapsulation=shadow","src/components/dnn-searchbox/dnn-searchbox.tsx","src/components/dnn-sort-icon/dnn-sort-icon.scss?tag=dnn-sort-icon&encapsulation=shadow","src/components/dnn-sort-icon/dnn-sort-icon.tsx","src/components/dnn-tab/dnn-tab.scss?tag=dnn-tab&encapsulation=shadow","src/components/dnn-tab/dnn-tab.tsx","src/components/dnn-tabs/dnn-tabs.scss?tag=dnn-tabs&encapsulation=shadow","src/components/dnn-tabs/dnn-tabs.tsx","src/components/dnn-toggle/dnn-toggle.scss?tag=dnn-toggle&encapsulation=shadow","src/components/dnn-toggle/dnn-toggle.tsx","src/components/dnn-treeview-item/dnn-treeview-item.scss?tag=dnn-treeview-item&encapsulation=shadow","src/components/dnn-treeview-item/dnn-treeview-item.tsx","src/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.scss?tag=dnn-vertical-overflow-menu&encapsulation=shadow","src/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.tsx","src/components/dnn-vertical-splitview/dnn-vertical-splitview.scss?tag=dnn-vertical-splitview&encapsulation=shadow","src/components/dnn-vertical-splitview/dnn-vertical-splitview.tsx"],"names":["dnnButtonCss","DnnButton","exports","class_1","hostRef","this","type","reversed","size","confirm","confirmYesText","confirmNoText","confirmMessage","disabled","modalVisible","prototype","componentDidLoad","modal","el","shadowRoot","querySelector","handleConfirm","hide","confirmed","emit","handleCancel","canceled","handleClick","show","getElementClasses","classes","push","join","render","_this","h","Host","class","style","pointer-events","onClick","showCloseButton","backdropDismiss","display","justifyContent","margin","dnnCheckboxCss","DnnCheckbox","class_2","checked","useIntermediate","changeState","checkedchange","concat","name","xmlns","height","viewBox","width","fill","d","enable-background","htmlFor","id","dnnChevronCss","DnnChevron","class_3","expandText","collapseText","expanded","handleExpandedChanged","newValue","changed","aria-label","dnnCollapsibleCss","DnnCollapsible","class_4","transitionDuration","handleHeightChanged","requestAnimationFrame","updateSize","container","maxHeight","scrollHeight","setTimeout","handledExpandedChanged","dnnCollapsibleHeightChanged","transition","ref","ColorInfo","_hue","_saturation","_lightness","Object","defineProperty","value","getRGB","red","setHSL","green","blue","r","getHex","g","b","parseInt","substr","brightness","chroma","Math","abs","saturation","quadrant","offset","bias","round","min","max","diff","s","l","hex","toString","length","dnnColorPickerCss","DnnColorPicker","class_5","color","colorBoxHeight","rgbDisplay","hslDisplay","hexDisplay","handleSaturationLightnessMouseDown","e","preventDefault","handleDragLightnessSaturation","window","addEventListener","handleSaturationLightnessMouseUp","rect","saturationLightnessBox","getBoundingClientRect","x","clientX","left","y","clientY","top","newColor","hue","currentColor","lightness","removeEventListener","handleHueMouseDown","handleDragHue","handleHueMouseUp","hueRange","handleComponentValueChange","channel","target","isNaN","handleHSLChange","component","h_1","handleSaturationLightnessKeyDown","shiftKey","key","handleHueKeyDown","colorChangedHandler","colorChanged","handeCurrentColorChanged","componentWillLoad","handleHexChange","setProperty","getDoublet","getContrast","contrastColor","valueString","toUpperCase","match","switchColorMode","element","backgroundColor","onMouseDown","bind","role","aria-valuemin","aria-valuemax","aria-valuetext","bottom","onKeyDown","boxShadow","aria-valuenow","step","onChange","__decorate","Debounce","dnnDropzoneCss","DnnDropzone","class_6","resx","dragAndDropFile","capture","or","takePicture","uploadFile","allowCameraMode","captureQuality","canTakeSnapshots","takingPicture","handleDragOver","event","stopPropagation","dataTransfer","dropEffect","dropzone","classList","add","handleDrop","dropEvent","files","hasInvalidExtensions","fileList","getFilesFromFileList","filesSelected","checkIfBrowserCanTakeSnapshots","then","result","allowedExtensions","undefined","extensionsWithDots","map","extensionsList","fileInput","accept","Promise","resolve","mediaDevices","navigator","enumerateDevices","devices","some","device","kind","index","file","handleUploadButton","hasInvalid","fileIndex","regex","fileExtension","exec","includes","takeSnapshot","getUserMedia","video","audio","stream","videoPreview","srcObject","play","videoSettings","getVideoTracks","getSettings","catch","error","alert","applySnapshot","canvas","document","createElement","context","getContext","drawImage","toBlob","blob","File","onDragOver","onDrop","onDragLeave","remove","_a","_b","_c","_d","cx","cy","_e","_f","CornerType","getMovementFromEvent","previousTouch","movementX","movementY","MouseEvent","TouchEvent","touch","touches","pageX","pageY","dnnImageCropperCss","DnnImageCropper","class_7","imageTooSmall","modalCloseText","quality","preventUndersized","handleCropMouseDown","className","handleImageCropFinished","handleCropDrag","handleNwMouseMove","handleNeMouseMove","handleSeMouseMove","handleSwMouseMove","_ev","emitImage","handleCornerDrag","nw","ne","se","sw","corner","isMouseStillInTarget","_g","getCornerLeftTop","newWidth","newHeight","orientation","wantedRatio","cropRect","crop","imageRect","image","_h","topOffset","offsetTop","leftOffset","offsetLeft","zoomRatio","naturalWidth","ev","newLeft","newTop","setView","newView","views","host","querySelectorAll","forEach","v","noPictureView","hasPictureView","view","initCrop","imageRatio","wantedHeight","wantedWidth","setImage","src","toDataURL","handleNewFile","split","reader","FileReader","onload","readerLoadEvent","img","Image","imageTooSmallModal","ctx","readAsDataURL","naturalHeight","dataUrl","generateCroppedImage","imageCropChanged","desiredWidth","desiredHeight","clearRect","inside","mouseX","mouseY","corners","cornerRect","onTouchStart","onFilesSelected","detail","close-text","replace","dnnModalCss","DnnModal","class_8","closeText","visible","handleDismiss","dismissed","handleBackdropClick","dnnPermissionsGridCss","DnnPermissionsGrid","class_9","Add","AllRoles","FilterByGroup","GlobalRoles","Role","RolePermissions","SelectRole","User","UserPermissions","foundUsers","selectedRoleGroupId","handleFoundUsersChanged","userCollapsible","dismissUserResults","disconnectedCallback","dropdownRect","roleDropDown","right","handleRoleGroupChanged","dropdown","selectedIndex","Number","options","addRole","roleId","roles","filter","RoleId","permissions","assign","rolePermissions","__spreadArray","default","locked","roleName","RoleName","permissionsChanged","addUser","pickedUser","userPermissions","displayName","userId","userQuery","getRoles","filteredRoles","rp","IsSystemRole","RoleGroupId","renderRoleCheckBox","rolePermission","permissionDefinition","item","permission","permissionId","opacity","allowAccess","use-intermediate","onCheckedchange","handleRoleChanged","slot","permissionName","renderUserCheckBox","userPermission","handleUserChanged","newRolePermission","p","fullControl","permissionCode","permissionKey","u","newUserPermission","removeRole","removeUser","up","handleQueryChanged","query","userSearchQueryChanged","handleSearchUserFieldKeyDown","firstButton","focus","handleSearchedUserKeyDown","button","nextButton","nextElementSibling","previousButton","previousElementSibling","handleUserPicked","searchedUser","getFilteredUsers","fu","selected","roleGroups","roleGroup","permissionDefinitions","placeholder","debounced","onQueryChanged","dnnSearchboxCss","DnnSearchbox","class_10","fireQueryChanged","debouncedHandleQueryChanged","queryChanged","onInput","dnnSortIconCss","DnnSortIcon","class_11","sortDirection","changeSort","sortChanged","active","dnnTabCss","DnnTab","class_12","dnnTabsCss","DnnTabs","class_13","tabTitles","selectedTabTitle","updateTitles","showFirstTab","getTabs","assignedElements","tabs","tab","tabTitle","showTab","dnnToggleCss","DnnToggle","class_14","checkedChanged","isChecked","checkChanged","dnnTreeviewItemCss","DnnTreeviewItem","class_15","hasChildren","watchExpanded","expander","collapsible","child","childElement","children","count","toggleCollapse","userExpanded","userCollapsed","dnnVerticalOverflowMenuCss","DnnVerticalOverflowMenu","class_16","showDropdownButton","showDropdownMenu","previousMenuWidth","componentDidRender","moveItemsToDropDownIfNecessery","resizeObserver","ResizeObserver","entries","_i","entries_1","entry","contentRect","moveItemsToMenuIfPossible","observe","menuItems","Array","from","menu","availableWidth","neededWidth","parseFloat","getComputedStyle","fontSize","getFullWidth","lastItem","hasChildNodes","firstItem","styles","marginLeft","marginRight","paddingLeft","paddingRight","toggleOverflowMenu","contentHeight_1","items","emHeight","gapsHeight","marginHeight","dismissMenu_1","buttonRect","dnnVerticalSplitviewCss","DnnVerticalSplitview","class_17","splitterWidth","splitWidthPercentage","leftWidth","rightWidth","setSplitWidthPercentage","panes","pane","splitter","fullWidth","getSplitWidthPercentage","widthChanged","handleMouseDown","handleDrag","handleDragFinished","newPercentage","handleKeyDown","minWidth"],"mappings":"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","sourcesContent":[":host {\n --background-color: transparent;\n --color: #333;\n --border-size: 1px;\n --border-color: var(--backround-color);\n --border-radius: var(--dnn-controls-radius, 5px);\n --padding: var(--dnn-controls-padding, 5px);\n display: inline-block;\n width: auto;\n}\n\n:host(.disabled){\n pointer-events: none;\n}\n\n:host(.primary){\n --background-color: var(--dnn-color-primary, blue);\n --color: var(--dnn-color-primary-contrast, white);\n --focus-color: var(--background-color);\n}\n\n:host(.primary.reversed){\n --background-color: var(--dnn-color-primary-contrast, white);\n --color: var(--dnn-color-primary, blue);\n --border-color: var(--dnn-color-primary, blue);\n --focus-color: var(--color);\n}\n\n:host(.secondary){\n --background-color: var(--dnn-color-secondary, green);\n --color: var(--dnn-color-secondary-contrast, white);\n --focus-color: var(--background-color);\n}\n\n:host(.secondary.reversed){\n --background-color: var(--dnn-color-secondary-contrast, white);\n --color: var(--dnn-color-secondary, blue);\n --border-color: var(--dnn-color-secondary, blue);\n --focus-color: var(--color);\n}\n\n:host(.tertiary){\n --background-color: var(--dnn-color-tertiary, yellow);\n --color: var(--dnn-color-tertiary-contrast, black);\n --focus-color: var(--background-color);\n}\n\n:host(.tertiary.reversed){\n --background-color: var(--dnn-color-tertiary-contrast, white);\n --color: var(--dnn-color-tertiary, blue);\n --border-color: var(--dnn-color-tertiary, blue);\n --focus-color: var(--color);\n}\n\n:host(.hydrated){\n button{\n border: var(--border-size) solid var(--border-color);\n border-radius: var(--border-radius);\n padding: var(--padding) calc(var(--padding) * 2);\n background-color: transparent;\n background-color: var(--background-color);\n color: var(--color);\n outline: none;\n &:focus, &:hover{\n box-shadow: 0 0 2px 2px var(--focus-color);\n }\n }\n}\n\n:host(:disabled, [disabled]){\n button{\n pointer-events: none;\n opacity: 0.5;\n }\n}\n\n:host(.small){\n button{\n padding: calc(var(--padding) / 2) var(--padding);\n font-size: 0.7em;\n }\n}\n\n:host(.large){\n button{\n padding: calc(var(--padding) * 1.5) calc(var(--padding) * 3);\n font-size: 1.2em;\n }\n}\n\nbutton{\n height: 100%;\n width: 100%;\n cursor: pointer;\n}","import { Component, Element, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\n\n/**\n * @slot Content of the button\n */\n@Component({\n tag: 'dnn-button',\n styleUrl: 'dnn-button.scss',\n shadow: true\n})\nexport class DnnButton {\n\n /**\n * Optional button style,\n * can be either primary, secondary or tertiary and defaults to primary if not specified\n */\n @Prop() type: 'primary' | 'secondary' | 'tertiary' = 'primary';\n\n /**\n * Optionally reverses the button style.\n */\n @Prop() reversed: boolean = false;\n\n /**\n * Optionally sets the button size, small normal or large, defaults to normal\n */\n @Prop() size?: 'small' | 'normal' | 'large' = 'normal';\n\n /**\n * Optionally add a confirmation dialog before firing the action.\n */\n @Prop() confirm?: boolean = false;\n\n /**\n * The text of the yes button for confirmation.\n */\n @Prop() confirmYesText?: string = \"Yes\";\n\n /**\n * The text of the no button for confirmation.\n */\n @Prop() confirmNoText?: string = \"No\";\n\n /**\n * The text of the confirmation message;\n */\n @Prop() confirmMessage?: string = \"Are you sure ?\";\n \n /**\n * Disables the button\n */\n @Prop() disabled: boolean = false;\n\n @State() modalVisible: boolean = false;\n\n @Element() el!: HTMLDnnButtonElement;\n\n private modal!: HTMLDnnModalElement;\n\n /** \n * Fires when confirm is true and the user confirms the action.\n */\n @Event({\n bubbles: true,\n cancelable: true,\n composed: true\n }) confirmed: EventEmitter;\n\n /**\n * Fires when confirm is true and the user cancels the action.\n */\n @Event({bubbles: true}) canceled: EventEmitter;\n\n componentDidLoad(){\n this.modal = this.el.shadowRoot.querySelector('dnn-modal');\n }\n\n private handleConfirm(){\n this.modal.hide();\n this.modalVisible = false;\n this.confirmed.emit();\n }\n\n private handleCancel(){\n this.modal.hide();\n this.modalVisible = false;\n this.canceled.emit();\n }\n \n private handleClick(): void {\n if (this.confirm && !this.modalVisible){\n this.modal.show();\n this.modalVisible = true;\n }\n }\n\n private getElementClasses(): string | { [className: string]: boolean; } {\n const classes: string[] = [];\n classes.push(this.type);\n if (this.reversed){\n classes.push('reversed');\n }\n if (this.size !== 'normal'){\n classes.push(this.size);\n }\n return classes.join(' ');\n }\n\n render() {\n return (\n <Host class={this.getElementClasses()} disabled={this.disabled} style={{'pointer-events': this.disabled ? 'none' : 'all'}}>\n <button class=\"button\" onClick={() => this.handleClick()} disabled={this.disabled}>\n <slot></slot>\n </button>\n {this.confirm &&\n <dnn-modal showCloseButton={false} backdropDismiss={false}>\n <p>{this.confirmMessage}</p>\n <div style={\n {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n }>\n <dnn-button type='primary' style={{margin: '5px'}} onClick={() => this.handleConfirm()}>{this.confirmYesText}</dnn-button>\n <dnn-button type='secondary' style={{margin: '5px'}} onClick={() => this.handleCancel()}>{this.confirmNoText}</dnn-button>\n </div>\n </dnn-modal>\n }\n </Host>\n );\n }\n}\n",":host {\n /**\n * @prop --focus-color: The color to outline the checkbox when hovered or focused, default to the dnn primary color.\n */\n --focus-color: var(--dnn-color-primary, #3792ED);\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n margin: 3px;\n}\nbutton{\n background-color: transparent;\n border: 0;\n padding: 0;\n margin: 0;\n outline: none;\n display: flex;\n justify-content: center;\n align-items: center;\n .unchecked, .checked, .intermediate{\n display: none;\n }\n &.checked .checked, &.unchecked .unchecked, &.intermediate .intermediate{\n display: block;\n }\n svg.undefined{\n opacity: 0.45;\n }\n &:focus{\n box-shadow: 0 0 2px 2px var(--focus-color);\n }\n}","import { Component, Element, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n/**\n * @slot - The label for the checkbox.\n * @slot checkedicon - Allows overriding the default checked icon.\n * @slot uncheckedicon - Allows overriding the unchecked icon.\n * @slot intermediateicon - If intermadiate state is used, allows overriding its icon.\n */\n@Component({\n tag: 'dnn-checkbox',\n styleUrl: 'dnn-checkbox.scss',\n shadow: true,\n})\nexport class DnnCheckbox {\n @Element() el: HTMLDnnCheckboxElement;\n\n /** Defines if the checkbox is checked (true) or unchecked (false) or in an intermediate state (undefined) */\n @Prop({mutable: true}) checked: \"checked\" | \"unchecked\" | \"intermediate\" = \"unchecked\";\n\n /** Defines if clicking the checkbox will go through the intermediate state between checked and unchecked (tri-state) */\n @Prop() useIntermediate: boolean = false;\n\n /** The value for this checkbox (not to be confused with its checked state). */\n @Prop() value: string;\n\n /** Fires up when the checkbox checked property changes. */\n @Event() checkedchange: EventEmitter<\"checked\" | \"unchecked\" | \"intermediate\">;\n\n private changeState(): void {\n if (!this.useIntermediate){\n switch (this.checked) {\n case \"checked\":\n this.checked = \"unchecked\";\n break;\n case \"unchecked\":\n case \"intermediate\":\n this.checked = \"checked\";\n break;\n default:\n break;\n }\n this.checkedchange.emit(this.checked);\n return;\n }\n switch (this.checked) {\n case \"checked\":\n this.checked = \"intermediate\";\n break;\n case \"intermediate\":\n this.checked = \"unchecked\";\n break;\n case \"unchecked\":\n this.checked = \"checked\";\n break;\n default:\n break;\n }\n this.checkedchange.emit(this.checked);\n }\n\n render() {\n return (\n <Host>\n <button\n class={`icon ${this.checked}`}\n onClick={() => this.changeState()}\n >\n <div class=\"unchecked\">\n <slot name=\"uncheckedicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"/></svg>\n </slot>\n </div>\n <div class=\"checked\">\n <slot name=\"checkedicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>\n </slot>\n </div>\n <div class=\"intermediate\">\n <slot name=\"intermediateicon\">\n <svg class=\"undefined\" xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><g><g><path d=\"M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M17,13H7v-2h10V13z\"/></g></g></g></svg>\n </slot>\n </div>\n </button>\n <label htmlFor={this.el.id} onClick={() => this.changeState()}><slot></slot></label>\n </Host>\n );\n }\n}\n",":host {\n display: inline-block;\n}\nbutton{\n border: none;\n padding: 0px;\n margin: 0px;\n min-width: 15px;\n min-height: 15px;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: transparent;\n outline: none;\n}\nsvg{\n height:2em;\n width:2em;\n transition: all 300ms ease-in-out;\n}\n\n// FOCUS\nbutton:focus, button:hover{\n svg{\n color: var(--dnn-color-primary);\n }\n}\n\n// EXPANDED\n:host([expanded]){\n svg{\n transform: rotate(90deg);\n }\n}","import { Component, Host, h, Prop, Event } from '@stencil/core';\nimport { EventEmitter } from '@stencil/core';\nimport { Watch } from '@stencil/core';\n\n@Component({\n tag: 'dnn-chevron',\n styleUrl: 'dnn-chevron.scss',\n shadow: true\n})\nexport class DnnChevron {\n\n /** Expand text for screen readers */\n @Prop() expandText?: string = \"expand\";\n\n /** Collapse text for screen readers */\n @Prop() collapseText?: string = \"collapse\";\n\n /** Is the chevron expanded */\n @Prop({mutable: true, reflect: true}) expanded?: boolean = false;\n\n /** Fires up when the expanded status changes */\n @Event() changed: EventEmitter;\n\n @Watch('expanded')\n handleExpandedChanged(newValue: boolean) {\n this.changed.emit(newValue);\n }\n\n render() {\n return (\n <Host>\n <button aria-label={this.expanded ? this.collapseText : this.expandText}\n onClick={() => this.expanded = !this.expanded}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\n </button>\n </Host>\n );\n }\n\n}\n",":host {\n display: block;\n}\n#container{\n max-height:0;\n overflow: hidden;\n transition: max-height 300ms ease-in-out;\n}","import { Component, Host, h, Prop, Element, Event, EventEmitter, Watch, Listen, Method } from '@stencil/core';\n\n@Component({\n tag: \"dnn-collapsible\",\n styleUrl: \"dnn-collapsible.scss\",\n shadow: true\n})\nexport class DnnCollapsible {\n\n @Element() el: HTMLDnnCollapsibleElement;\n\n /** Defines if the panel is expanded or not. */\n @Prop({reflect: true}) expanded: boolean = false;\n\n /** Defines the transition time in ms, defaults to 150ms */\n @Prop() transitionDuration?: number = 150;\n\n /** Fires whenever the collapsible height has changed */\n @Event({bubbles: true, composed: true}) dnnCollapsibleHeightChanged: EventEmitter<void>;\n\n @Listen(\"dnnCollapsibleHeightChanged\")\n handleHeightChanged(){\n requestAnimationFrame(() => {\n this.updateSize();\n })\n }\n\n /**\n * Updates the component height, use to update after a slot content changes.\n */\n @Method()\n async updateSize() {\n if (this.expanded){\n requestAnimationFrame(() => {\n this.container.style.maxHeight = `${this.container.scrollHeight}px`;\n });\n setTimeout(() => {\n this.container.style.maxHeight = \"none\";\n }, this.transitionDuration);\n }\n }\n \n @Watch(\"expanded\")\n handledExpandedChanged(expanded: boolean){\n if (expanded){\n this.updateSize();\n }\n else{\n requestAnimationFrame(() => {\n this.container.style.maxHeight = `${this.container.scrollHeight}px`;\n requestAnimationFrame(() => {\n this.container.style.maxHeight = \"0px\";\n });\n });\n }\n setTimeout(() => {\n requestAnimationFrame(() => {\n this.dnnCollapsibleHeightChanged.emit();\n });\n }, this.transitionDuration);\n }\n \n private container: HTMLDivElement;\n\n componentDidLoad() {\n this.container.style.transition = `max-height ${this.transitionDuration}ms ease-in-out`;\n }\n\n render() {\n return (\n <Host>\n <div\n id=\"container\"\n class={this.expanded && \"expanded\"}\n ref={el => this.container = el}\n style={{transition: `max-height ${this.transitionDuration}ms ease-in-out`}}\n >\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n}\n","/** Color utility class with hsl and rgb converters\r\n * based on math at https://en.wikipedia.org/wiki/HSL_and_HSV\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nexport class ColorInfo{\r\n\r\n private _hue: number = 0;\r\n /** gets the color hue\r\n * @returns a number between 0 and 359, could contain decimals\r\n */\r\n get hue() { return this._hue; }\r\n set hue(value: number){\r\n if (value < 0) { value = 0; }\r\n if (value > 359) { value = 359; }\r\n this._hue = value;\r\n }\r\n\r\n private _saturation: number = 0;\r\n /** gets the color saturation\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get saturation() { return this._saturation; }\r\n set saturation(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._saturation = value;\r\n }\r\n\r\n private _lightness: number = 0;\r\n /** gets the color lightness\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get lightness() { return this._lightness; }\r\n set lightness(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._lightness = value;\r\n }\r\n\r\n /** gets or sets the red component \r\n * @returns an integer between 0 and 255\r\n */\r\n get red() {\r\n return this.getRGB().red;\r\n }\r\n set red(value) {\r\n this.setHSL(value, this.green, this.blue);\r\n }\r\n\r\n /** gets or sets the green component\r\n * @returns an integer between 0 and 255\r\n */\r\n get green() {\r\n return this.getRGB().green;\r\n }\r\n set green(value: number) {\r\n this.setHSL(this.red, value, this.blue);\r\n }\r\n\r\n /** gets or sets the blue component\r\n * @returns an integer between 0 and 255\r\n */\r\n get blue() {\r\n return this.getRGB().blue;\r\n }\r\n set blue(value: number) {\r\n this.setHSL(this.red, this.green, value);\r\n }\r\n\r\n /** gets or sets the hex color value, expresses as 6 hexadecimal characters.\r\n * @returns hex representation of the color\r\n */\r\n get hex() {\r\n var r = this.getHex(this.red);\r\n var g = this.getHex(this.green);\r\n var b = this.getHex(this.blue);\r\n return r + g + b;\r\n }\r\n set hex(value: string){\r\n this.red = parseInt(value.substr(0,2));\r\n this.green = parseInt(value.substr(2,2));\r\n this.blue = parseInt(value.substr(4,2));\r\n }\r\n\r\n /** gets white or black color that is a good oposite to the current color\r\n * @returns - \"000000\" or \"FFFFFF\"\r\n */\r\n get contrastColor() {\r\n const brightness = (this.red*299 + this.green*587 + this.blue*114) / 1000\r\n if (brightness > 127){\r\n return \"000000\";\r\n }\r\n return \"FFFFFF\";\r\n }\r\n\r\n private getRGB() {\r\n const chroma = (1 - Math.abs((2 * this._lightness) - 1)) * this.saturation;\r\n // find the quandrant of the hue\r\n const quadrant = this._hue / 60;\r\n // calculate the offset from the quandrant center\r\n const offset = chroma * (1 - Math.abs(quadrant % 2 - 1));\r\n\r\n // Apply the chroma to the primary component and the offset to the 2nd most important component\r\n let r = 0, g = 0, b = 0;\r\n if (0 <= quadrant && quadrant <= 1) {\r\n r = chroma; g = offset; // red to yellow\r\n } else if (1 <= quadrant && quadrant <= 2) {\r\n g = chroma; r = offset; // yellow to green\r\n } else if (2 <= quadrant && quadrant <= 3) {\r\n g = chroma; b = offset; // green to cyan\r\n } else if (3 <= quadrant && quadrant <= 4) {\r\n b = chroma; g = offset; // cyan to blue\r\n } else if (4 <= quadrant && quadrant <= 5) {\r\n b = chroma; r = offset; // blue to magenta\r\n } else if (5 <= quadrant && quadrant <= 6) {\r\n r = chroma; b = offset; // magenta to red\r\n }\r\n // calculate the bias to add to all channels to match the lightness\r\n const bias = this._lightness - (chroma / 2);\r\n\r\n return {\r\n red: Math.round((r + bias) * 255),\r\n green: Math.round((g + bias) * 255),\r\n blue: Math.round((b + bias) * 255)\r\n }\r\n }\r\n\r\n private setHSL(red: number, green: number, blue: number) {\r\n // GENERAL DATA\r\n // all math is based on values from 0 to 1\r\n const r = red/255, g = green/255, b = blue/255;\r\n // we need to max, min and the difference between them to derive hsl\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const diff = max - min;\r\n let h = 0, s = 0, l = 0;\r\n\r\n // HUE\r\n if (diff === 0) { // neutral\r\n h = 0;\r\n } else if (max === r) { // red (magenta to yellow range)\r\n h = 60 * ((g - b) / diff);\r\n } else if (max === g) { // green (yellow to cyan range)\r\n h = 60 * (2 + ((b - r) / diff));\r\n } else if (max === b) { // blue (cyan to magenta range)\r\n h = 60 * (4 + ((r - g) / diff));\r\n }\r\n if (h < 0) { h = h + 360} // ensures positive hues only\r\n if (h > 359) { h = 359} // ensures we never return 360 for simplicity since it is the same as 0\r\n\r\n // LIGHTNESS\r\n l = (max + min) / 2;\r\n\r\n // SATURATION\r\n if (max === 0 || min === 1) { // pure black or white have no saturation\r\n s = 0;\r\n } else {\r\n s = (max - l) / (Math.min(l, 1 - l));\r\n }\r\n\r\n this._hue = h;\r\n this._saturation = s;\r\n this._lightness = l;\r\n }\r\n\r\n private getHex(value: number){\r\n var hex = value.toString(16);\r\n if (hex.length < 2){\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n }\r\n} ",".dnn-color-picker{\r\n padding: 15px;\r\n max-width: 400px;\r\n .dnn-color-sliders{\r\n display:flex;\r\n flex-direction: column;\r\n min-width: 200px;\r\n .dnn-color-s-b{\r\n border: 1px solid #ccc;\r\n padding-bottom: var(--color-box-height, 50%);\r\n position: relative;\r\n background-color: red;\r\n &:before{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:1;\r\n background: linear-gradient(to right, white, red);\r\n mix-blend-mode: saturation;\r\n }\r\n &:after{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:2;\r\n background: linear-gradient(to bottom, white, black);\r\n mix-blend-mode: luminosity;\r\n }\r\n button{\r\n position: absolute;\r\n bottom: calc(50% - 4px);\r\n left: calc(50% - 4px);\r\n width: 8px;\r\n height: 8px;\r\n z-index: 3;\r\n display: block;\r\n background: none;\r\n border: none;\r\n margin-left: -4px;\r\n margin-bottom: -4px;\r\n padding: 7px;\r\n background-color: #fff;\r\n border-radius: 50%;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -1px;\r\n left: -1px;\r\n border-radius: 50%;\r\n }\r\n &:after{\r\n content:'';\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n border-radius: 50%;\r\n width: 10px;\r\n height: 10px;\r\n border: 2px solid #ccc;\r\n }\r\n } \r\n }\r\n .dnn-color-bar {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 15px;\r\n .dnn-color-result {\r\n flex-direction: column;\r\n width: 50px;\r\n height: 50px;\r\n border-radius: 50%;\r\n background: red;\r\n }\r\n .dnn-color-hue{\r\n flex: auto;\r\n margin-left: 10px;\r\n height: 16px;\r\n border: 1px solid #ccc;\r\n position: relative;\r\n background: linear-gradient(\r\n to right, \r\n #f00 0, \r\n #ff0 17%,\r\n #0f0 33%,\r\n #0ff 50%,\r\n #00f 67%,\r\n #f0f 84%,\r\n #f00 100%\r\n );\r\n button{\r\n width: 10px;\r\n height: 20px;\r\n position: absolute;\r\n top: -2px;\r\n left: calc(50% - 4px);\r\n border: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n padding-left: -8px;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -2px;\r\n left: 0px;\r\n border-radius: 3px;\r\n width: 100%;\r\n height: 100%;\r\n border: 1px solid #ccc;\r\n background-color: #fff;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n .dnn-color-fields{\r\n display:flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n .dnn-color-mode-switch {\r\n display: flex;\r\n align-items: flex-end;\r\n padding: .5em;\r\n button {\r\n background-color: transparent;\r\n border: none;\r\n svg {\r\n width: 3em;\r\n height: 3em;\r\n pointer-events: none;\r\n outline: none;\r\n }\r\n }\r\n }\r\n .dnn-rgb-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-rgb-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n &.red{\r\n border-color: red;\r\n }\r\n &.green{\r\n border-color: green; \r\n }\r\n &.blue{\r\n border-color: blue;\r\n } \r\n }\r\n }\r\n }\r\n .dnn-hsl-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hsl-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n }\r\n }\r\n }\r\n .dnn-hex-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hex-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n .hex-input{\r\n position: relative;\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.323em;\r\n text-align: center;\r\n input{\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n width:100%;\r\n height:100%;\r\n text-align:center;\r\n }\r\n button{\r\n position: absolute;\r\n height: 100%;\r\n top: 0;\r\n right: 1em;\r\n background-color: transparent;\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n svg{\r\n min-width: 1em;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n} ","/** Reusable DNN UI component to pick a color\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nimport { Component, h, State, Element, Prop, EventEmitter, Event, Watch } from \"@stencil/core\";\r\nimport { ColorInfo } from '../../utilities/colorInfo';\r\nimport { Debounce } from \"../../utilities/debounce\";\r\n\r\n/** Color Picker for Dnn */\r\n@Component({\r\n tag: 'dnn-color-picker',\r\n styleUrl: 'dnn-color-picker.scss',\r\n shadow: true\r\n})\r\nexport class DnnColorPicker {\r\n\r\n @Element() el: HTMLDnnColorPickerElement;\r\n\r\n /** Sets the initial color, must be a valid 8 character hexadecimal string without the # sign. */\r\n @Prop() color: string = \"FFFFFF\";\r\n\r\n /** Sets the width-height ratio of the color picker saturation-lightness box.\r\n * @example 100% renders a perfect square\r\n */\r\n @Prop() colorBoxHeight: string = \"50%\";\r\n \r\n @State() currentColor: ColorInfo;\r\n @State() rgbDisplay: string = \"flex\";\r\n @State() hslDisplay: string = \"none\";\r\n @State() hexDisplay: string = \"none\";\r\n\r\n /** Fires up when the color is changed and emits a ColorInfo object\r\n * @see ../../utilities/colorInfo.ts\r\n */\r\n @Event() colorChanged: EventEmitter<ColorInfo>;\r\n\r\n @Debounce(100)\r\n private colorChangedHandler(color: ColorInfo) {\r\n this.colorChanged.emit(color);\r\n }\r\n\r\n @Watch(\"currentColor\")\r\n handeCurrentColorChanged(newValue: ColorInfo){\r\n this.colorChangedHandler(newValue);\r\n }\r\n \r\n private saturationLightnessBox?: HTMLDivElement;\r\n private hueRange?: HTMLDivElement;\r\n\r\n\r\n componentWillLoad() {\r\n this.handleHexChange(this.color);\r\n }\r\n\r\n componentDidLoad() {\r\n (this.el as unknown as HTMLElement).style.setProperty(\"--color-box-height\", this.colorBoxHeight.toString());\r\n }\r\n \r\n private getHex() {\r\n return this.getDoublet(this.currentColor.red) + this.getDoublet(this.currentColor.green) + this.getDoublet(this.currentColor.blue);\r\n }\r\n\r\n private getContrast() {\r\n return this.currentColor.contrastColor;\r\n }\r\n\r\n private getDoublet(value: number){\r\n const valueString = value.toString(16).toUpperCase();\r\n if (valueString.length === 1){\r\n return '0' + valueString;\r\n }\r\n return valueString;\r\n }\r\n\r\n private handleSaturationLightnessMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragLightnessSaturation(e);\r\n window.addEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.addEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleDragLightnessSaturation = (e) => {\r\n const rect = this.saturationLightnessBox.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left; \r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width;\r\n\r\n let y = e.clientY - rect.top;\r\n if (y < 0) { y = 0}\r\n if (y > rect.height) { y = rect.height}\r\n y = 1 - (y/rect.height);\r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = x;\r\n newColor.lightness = y;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleSaturationLightnessMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.removeEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleHueMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragHue(e);\r\n window.addEventListener('mousemove', this.handleDragHue);\r\n window.addEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleHueMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragHue);\r\n window.removeEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleDragHue = (e) => {\r\n const rect = this.hueRange.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left;\r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width*360; \r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = x;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleComponentValueChange = (e, channel) => {\r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) { return }\r\n const newColor = new ColorInfo();\r\n if (value < 0) { value = 0; }\r\n if (value > 255) { value = 255; }\r\n let r = this.currentColor.red;\r\n let g = this.currentColor.green;\r\n let b = this.currentColor.blue;\r\n switch (channel) {\r\n case 'red':\r\n r = value;\r\n break;\r\n case 'green':\r\n g = value;\r\n break;\r\n case 'blue':\r\n b = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n newColor.green = g;\r\n newColor.red = r;\r\n newColor.blue = b;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHSLChange = (e, component) => { \r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) {return}\r\n const newColor = new ColorInfo();\r\n if (value != null) { \r\n let h = this.currentColor.hue;\r\n let s = this.currentColor.saturation;\r\n let l = this.currentColor.lightness;\r\n switch (component) {\r\n case \"hue\":\r\n if (value < 0) { value = 0}\r\n if (value > 359) { value = 0}\r\n h = value;\r\n break;\r\n case \"saturation\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n s = value / 100;\r\n break;\r\n case \"lightness\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n l = value / 100;\r\n break; \r\n default:\r\n break; \r\n }\r\n newColor.hue = h;\r\n newColor.saturation = s;\r\n newColor.lightness = l;\r\n this.currentColor = newColor;\r\n }\r\n }\r\n\r\n private handleHexChange(value: string){\r\n const newColor = new ColorInfo();\r\n if (value.match(/^(?:[\\da-f]{3}|[\\da-f]{6})$/i).length > 0) {\r\n if (value.length === 3){\r\n let expanded = value[0] + value[0] + value[1] + value[1] + value[2] + value [2];\r\n value = expanded;\r\n }\r\n newColor.red = parseInt(value.substr(0,2), 16);\r\n newColor.green = parseInt(value.substr(2,2), 16);\r\n newColor.blue = parseInt(value.substr(4,2), 16);\r\n }\r\n else{\r\n newColor.red = this.currentColor.red;\r\n newColor.green = this.currentColor.green;\r\n newColor.blue = this.currentColor.blue;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private switchColorMode(e) {\r\n switch(e.target.id) {\r\n case \"rgb-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"flex\";\r\n break;\r\n case \"hex-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"flex\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n case \"hsl-switch\":\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n default:\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n }\r\n }\r\n\r\n private handleSaturationLightnessKeyDown = (e) => { \r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 0.01;\r\n if (e.shiftKey) { value = 0.1 ;}\r\n\r\n switch (e.key) {\r\n case \"ArrowUp\":\r\n newColor.lightness += value;\r\n break;\r\n case \"ArrowDown\":\r\n newColor.lightness -= value;\r\n break;\r\n case \"ArrowLeft\":\r\n newColor.saturation -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.saturation += value;\r\n default:\r\n break; \r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHueKeyDown = (e) => {\r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 1;\r\n if (e.shiftKey) { value = 10}\r\n\r\n switch (e.key) {\r\n case \"ArrowLeft\":\r\n newColor.hue -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.hue += value;\r\n default:\r\n break;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n render() {\r\n const hue = this.currentColor.hue;\r\n const saturation = this.currentColor.saturation;\r\n const lightness = this.currentColor.lightness;\r\n const red = this.currentColor.red;\r\n const green = this.currentColor.green;\r\n const blue = this.currentColor.blue;\r\n\r\n return (\r\n <div class=\"dnn-color-picker\">\r\n <div class=\"dnn-color-sliders\">\r\n <div class=\"dnn-color-s-b\" ref={(element) => this.saturationLightnessBox = element as HTMLDivElement}\r\n style={{backgroundColor: `hsl(${hue},100%,50%)`}}\r\n onMouseDown={this.handleSaturationLightnessMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-s-b-picker\"\r\n aria-label=\"Press up or down to adjust lightness, left or right to adjust saturation, hold shift to move by 10%\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n aria-valuetext={`Saturation: ${Math.round(this.currentColor.saturation*100)}%, Lightness: ${Math.round(this.currentColor.lightness*100)}%`}\r\n style={{\r\n left: Math.round(saturation * 100) + \"%\",\r\n bottom: Math.round(lightness * 100) + \"%\"\r\n }}\r\n onKeyDown={(e) => this.handleSaturationLightnessKeyDown(e)}\r\n />\r\n </div>\r\n <div class=\"dnn-color-bar\">\r\n <div class=\"dnn-color-result\" style={{\r\n backgroundColor: '#' + this.getHex(),\r\n boxShadow: \"0 0 2px 1px \" + \"#\" + this.getContrast()\r\n }} \r\n />\r\n <div class=\"dnn-color-hue\"\r\n ref={(element) => this.hueRange = element as HTMLDivElement}\r\n onMouseDown={this.handleHueMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-hue-picker\"\r\n aria-label=\"Press left or right to adjust hue, hold shift to move by 10 degrees\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"359\"\r\n aria-valuenow={Math.round(hue)}\r\n style={{left: (hue/359*100).toString() + \"%\"}}\r\n onKeyDown={(e) => this.handleHueKeyDown(e)}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-fields\">\r\n <div class=\"dnn-rgb-color-fields\" style={{display: this.rgbDisplay}}>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>R</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" step=\"1\" class=\"red\" value={red} aria-label=\"red value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'red')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>G</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"green\" value={green} aria-label=\"green value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'green')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>B</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"blue\" value={blue} aria-label=\"blue value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'blue')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"rgb-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"switch to hexadecimal value entry\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hsl-color-fields\" style={{display: this.hslDisplay}}>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>H</label>\r\n <input type=\"number\" min=\"0\" max=\"359\" step={1} value={Math.round(hue)} aria-label=\"Hue\"\r\n onChange={(e) => this.handleHSLChange(e, 'hue')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>S</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(saturation*100)} aria-label=\"Saturation\"\r\n onChange={(e) => this.handleHSLChange(e, 'saturation')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>L</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(lightness*100)} aria-label=\"Lightness\"\r\n onChange={(e) => this.handleHSLChange(e, 'lightness')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hsl-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to red, green, blue entry mode\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hex-color-fields\" style={{display: this.hexDisplay}}>\r\n <div class=\"dnn-hex-color-field\">\r\n <label>HEX</label>\r\n <div class=\"hex-input\">\r\n <input type=\"text\" aria-label=\"Hexadecimal value\"\r\n value={this.getHex()}\r\n onChange={e => this.handleHexChange((e.target as HTMLInputElement).value)}\r\n />\r\n <button\r\n class=\"copy\"\r\n aria-label=\"copy value\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hex-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to hue saturation lightness values\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}","\n:host {\n /** \n * @prop --border-color: The color of the border.\n * @prop --border-radius: The radius of the controls borders.\n * @prop --drop-background-color: The color of the background when a file is dropping.\n */\n --border-color: var(--dnn-color-tertiary-contrast, lightgray);\n --border-radius: var(--dnn-controls-radius, 5px);\n --drop-background-color: var(--dnn-color-tertiary, lightblue);\n\n display: flex;\n flex-direction: column;\n gap: 1rem;\n text-align: center;\n border: 2px dashed var(--border-color);\n border-radius: var(--border-radius);\n padding: 1rem;\n transition: all 300ms ease-in-out;\n}\n\n:host(.dropping){\n background-color: var(--drop-background-color);\n}\np{\n margin: 0;\n padding: 0;\n}\nbutton{\n display: flex;\n justify-content: center;\n align-items: center;\n border: 0px;\n margin: 0;\n padding: 0;\n background-color: transparent;\n &:hover{\n cursor: pointer;\n }\n svg{\n margin-right: 0.5rem;\n }\n}\nlabel.upload-file{\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n input{\n display: none;\n }\n}\n.video-preview{\n display: flex;\n flex-direction: column;\n align-items: center;\n button{\n margin: 1rem;\n }\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'dnn-dropzone',\n styleUrl: 'dnn-dropzone.scss',\n shadow: true,\n})\nexport class DnnDropzone {\n /** Localization strings */\n @Prop() resx:{\n dragAndDropFile: string;\n capture: string;\n or: string;\n takePicture: string;\n uploadFile: string;\n } = {\n dragAndDropFile: \"Drag and drop a file\",\n capture: \"Capture\",\n or: \"or\",\n takePicture: \"Take a picture\",\n uploadFile: \"Upload a file\",\n }\n\n /** A list of allowed file extensions.\n * If not specified, any file is allowed.\n * Ex: [\"jpg\", \"jped\", \"gif\", \"png\"]\n */\n @Prop() allowedExtensions: string[];\n\n /**\n * If true, will allow the user to take a snapshot\n * using the device camera. (only works over https).\n */\n @Prop() allowCameraMode: boolean = false;\n\n /**\n * Specifies the jpeg quality for when the device\n * camera is used to generate a picture.\n * Needs to be a number between 0 and 1 and defaults to 0.8\n */\n @Prop() captureQuality: number = 0.8;\n\n /** Fires when file were selected. */\n @Event() filesSelected: EventEmitter<File[]>;\n \n @State() canTakeSnapshots: boolean = false;\n\n @State() takingPicture: boolean = false;\n \n private dropzone: HTMLElement;\n private fileInput: HTMLInputElement;\n private videoPreview: HTMLVideoElement;\n private videoSettings!: MediaTrackSettings;\n\n\n componentDidLoad() {\n if (this.allowCameraMode){\n this.checkIfBrowserCanTakeSnapshots()\n .then(result => this.canTakeSnapshots = result);\n }\n if (this.allowedExtensions != undefined && this.allowedExtensions.length > 0){\n var extensionsWithDots = this.allowedExtensions.map(e => `.${e}`);\n var extensionsList = extensionsWithDots.join(\",\");\n this.fileInput.accept = extensionsList;\n }\n }\n\n private checkIfBrowserCanTakeSnapshots(): Promise<boolean> {\n return new Promise((resolve) => {\n const mediaDevices = navigator.mediaDevices;\n if (mediaDevices == undefined || mediaDevices.enumerateDevices == undefined) {\n resolve(false);\n }\n mediaDevices.enumerateDevices()\n .then(devices => {\n var result = devices.some(device => device.kind == \"videoinput\");\n resolve(result);\n });\n });\n }\n\n private getFilesFromFileList(files: FileList) : File[] {\n var fileList: File[] = [];\n for (let index = 0; index < files.length; index++) {\n const file = files[index];\n fileList.push(file);\n }\n\n return fileList;\n }\n\n private handleUploadButton(element: HTMLInputElement): void {\n let files = this.getFilesFromFileList(element.files);\n\n this.filesSelected.emit(files);\n }\n\n private handleDragOver = (event: DragEvent) => \n {\n event.stopPropagation();\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n this.dropzone.classList.add(\"dropping\");\n };\n\n private hasInvalidExtensions(files: FileList): boolean{\n var hasInvalid = false;\n for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {\n const file = files[fileIndex];\n var regex = /(?:\\.([^.]+))?$/;\n const fileExtension = regex.exec(file.name)[1];\n if (fileExtension == undefined){\n hasInvalid = true;\n }\n\n if (this.allowedExtensions != undefined && !this.allowedExtensions.includes(fileExtension)){\n hasInvalid = true;\n }\n\n return hasInvalid;\n }\n }\n\n private handleDrop = (dropEvent: DragEvent) => {\n dropEvent.stopPropagation();\n dropEvent.preventDefault();\n const files = dropEvent.dataTransfer.files;\n\n if (this.hasInvalidExtensions(files)){\n return;\n }\n var fileList = this.getFilesFromFileList(files);\n this.filesSelected.emit(fileList);\n };\n\n private takeSnapshot(): void {\n this.takingPicture = true;\n navigator.mediaDevices.getUserMedia({video: true, audio: false})\n .then(stream => {\n stream\n this.videoPreview.srcObject = stream;\n this.videoPreview.play()\n .then(() => {\n this.videoSettings = stream.getVideoTracks()[0].getSettings();\n });\n })\n .catch(error => alert(error));\n }\n\n private applySnapshot(): void {\n var canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = this.videoSettings.width;\n canvas.height = this.videoSettings.height;\n context.drawImage(this.videoPreview, 0, 0);\n canvas.toBlob(blob => {\n var file = new File([blob], \"image.jpeg\", {type:\"image/jpeg\"});\n this.takingPicture = false;\n \n var fileList = [file];\n this.filesSelected.emit(fileList)\n }, \"image/jpeg\", this.captureQuality);\n }\n \n render() {\n return (\n <Host\n ref={e => this.dropzone = e}\n class=\"dropzone\"\n onDragOver={this.handleDragOver}\n onDrop={this.handleDrop}\n onDragLeave={() => this.dropzone.classList.remove(\"dropping\")}\n >\n {!this.takingPicture &&\n [\n <p>{this.resx?.dragAndDropFile}</p>\n ,\n <p>- {this.resx?.or} -</p>\n ,\n <label class=\"upload-file\">\n <input\n type=\"file\"\n ref={el => this.fileInput = el}\n onChange={e => this.handleUploadButton(e.target as HTMLInputElement)}\n >\n </input>\n <span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><path d=\"M5,20h14v-2H5V20z M5,10h4v6h6v-6h4l-7-7L5,10z\"/></g></svg>\n </span>\n &nbsp;\n {this.resx?.uploadFile}\n </label>\n ,\n this.canTakeSnapshots &&\n [\n <p>- {this.resx?.or} -</p>\n ,\n <button\n onClick={() => this.takeSnapshot()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg>\n {this.resx?.takePicture}\n </button>\n ]\n ]\n }\n {this.takingPicture &&\n <div class=\"video-preview\">\n <video ref={e => this.videoPreview = e} />\n <button\n onClick={() => this.applySnapshot()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg>&nbsp;\n {this.resx?.capture}\n </button>\n </div>\n }\n </Host>\n );\n }\n\n}\n","export enum CornerType {\r\n \"nw\",\r\n \"ne\",\r\n \"se\",\r\n \"sw\",\r\n};","export function getMovementFromEvent(\r\n event: MouseEvent | TouchEvent,\r\n previousTouch: Touch\r\n) {\r\n let movementX = 0;\r\n let movementY = 0;\r\n if (event instanceof MouseEvent) {\r\n movementX = event.movementX;\r\n movementY = event.movementY;\r\n }\r\n if (typeof TouchEvent !== \"undefined\"){\r\n if (event instanceof TouchEvent) {\r\n let touch = event.touches[0];\r\n if (previousTouch != undefined) {\r\n movementX = touch.pageX - this.previousTouch.pageX;\r\n movementY = touch.pageY - this.previousTouch.pageY;\r\n }\r\n previousTouch = touch;\r\n }\r\n }\r\n return { movementX, movementY };\r\n }",":host {\n display: block;\n}\ncanvas {\n display: none;\n}\n.view{\n visibility: hidden;\n opacity: 0;\n height: 0;\n overflow: hidden;\n transition: all 300ms ease-in-out;\n &.visible{\n visibility: visible;\n opacity: 1;\n height: initial;\n overflow: visible;\n }\n .cropper{\n position: relative;\n width: 100%;\n img{\n width: 100%;\n display: block;\n margin: 0 auto;\n }\n .backdrop{\n backdrop-filter: saturate(0.5);\n backdrop-filter: brightness(0.5);\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n .crop{\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n outline: 2px dashed white;\n box-shadow: black 0 0 0px 2px;\n backdrop-filter: saturate(2);\n backdrop-filter: brightness(2);\n cursor: move;\n >div{\n width: 20px;\n height: 20px;\n background-color: white;\n border: 2px solid rgba(0,0,0,0.5);\n position: absolute;\n &.nw, &.ne{\n top: -17px;\n }\n &.ne, &.se{\n right: -17px;\n }\n &.se, &.sw{\n bottom: -17px;\n }\n &.sw, &.nw{\n left: -17px;\n }\n &.nw, &.se{\n cursor: nwse-resize;\n }\n &.ne, &.sw{\n cursor: nesw-resize;\n }\n }\n }\n }\n}\ndnn-modal{\n --max-width: 512px;\n}","import { Component, Host, h, State, Prop, Event, EventEmitter } from '@stencil/core';\nimport { CornerType } from './CornerType';\nimport { getMovementFromEvent } from \"../../utilities/mouseUtilities\";\n\n/**\n * Allows cropping an image in-browser with the option to enforce a specific final size.\n * All computation happens in the browser and the final image is emmited\n * in an event that has a data-url of the image.\n */\n@Component({\n tag: 'dnn-image-cropper',\n styleUrl: 'dnn-image-cropper.scss',\n shadow: true,\n})\nexport class DnnImageCropper {\n /** Sets the desired final image width. */\n @Prop() width: number = 600;\n\n /** Sets the desired final image height. */\n @Prop() height: number = 600;\n\n /** Can be used to customize controls text.\n * Some values support tokens, see default values for examples.\n */\n @Prop() resx: {\n capture: string;\n dragAndDropFile: string;\n or: string;\n takePicture: string;\n uploadFile: string;\n imageTooSmall: string;\n modalCloseText: string;\n } = {\n capture: \"Capture\",\n dragAndDropFile: \"Drag and drop an image\",\n or: \"or\",\n takePicture: \"Take a picture\",\n uploadFile: \"Upload an image\",\n imageTooSmall: \"The image you are attempting to upload does not meet the minimum size requirement of {width} pixels by {height} pixels. Please upload a larger image.\",\n modalCloseText: \"Close\",\n }\n\n /** Sets the output quality of the corpped image (number between 0 and 1). */\n @Prop() quality: number = 0.8;\n\n /** When set to true, prevents cropping an image smaller than the required size, which would blow pixel and make the final picture look blurry. */\n @Prop() preventUndersized: boolean = false;\n\n /** When the image crop changes, emits the dataurl for the new cropped image. */\n @Event() imageCropChanged: EventEmitter<string>;\n\n @State() view: IComponentInterfaces[\"View\"];\n \n private host: HTMLElement;\n private hasPictureView: HTMLDivElement;\n private noPictureView: HTMLDivElement;\n private canvas: HTMLCanvasElement;\n private image: HTMLImageElement;\n private crop: HTMLDivElement;\n private previousTouch: Touch;\n private imageTooSmallModal!: HTMLDnnModalElement;\n\n componentDidLoad() {\n requestAnimationFrame(() => {\n this.setView(\"noPictureView\");\n })\n }\n\n private setView(newView: IComponentInterfaces[\"View\"]){\n const views = this.host.shadowRoot.querySelectorAll(\".view\");\n views.forEach(v =>\n v.classList.remove(\"visible\"));\n switch (newView) {\n case \"noPictureView\":\n this.noPictureView.classList.add(\"visible\");\n break;\n case \"hasPictureView\":\n this.hasPictureView.classList.add(\"visible\");\n break;\n default:\n break;\n }\n this.view = newView;\n }\n\n private initCrop(){\n var wantedRatio = this.width / this.height;\n var imageRect = this.image.getBoundingClientRect();\n var imageRatio = imageRect.width / imageRect.height;\n \n if (wantedRatio > imageRatio){\n var wantedHeight = imageRect.width / wantedRatio;\n var diff = imageRect.height - wantedHeight;\n this.crop.style.top = Math.round(diff/2).toString() + \"px\";\n this.crop.style.height = Math.round(wantedHeight).toString() + \"px\";\n }\n else{\n var wantedWidth = imageRect.height * wantedRatio;\n var diff = imageRect.width - wantedWidth;\n this.crop.style.left = Math.round(diff/2).toString() + \"px\";\n this.crop.style.width = Math.round(wantedWidth).toString() + \"px\";\n }\n }\n\n private setImage(){\n this.image.addEventListener('load', () => {\n this.initCrop();\n this.emitImage();\n })\n this.image.src = this.canvas.toDataURL();\n }\n\n private handleNewFile(file: File): void {\n if (file.type.split('/')[0] != \"image\"){\n return;\n }\n \n var reader = new FileReader();\n reader.onload = readerLoadEvent => {\n var img = new Image();\n img.onload = () => {\n this.canvas.width = img.width;\n this.canvas.height = img.height;\n if (this.preventUndersized && (img.width < this.width || img.height< this.height)){\n this.imageTooSmallModal.show();\n return;\n }\n var ctx = this.canvas.getContext(\"2d\");\n ctx.drawImage(img,0,0);\n this.setView(\"hasPictureView\");\n this.setImage();\n }\n img.src = readerLoadEvent.target.result.toString();\n }\n reader.readAsDataURL(file);\n }\n\n private handleCropMouseDown = (event: MouseEvent | TouchEvent) => {\n event.stopPropagation();\n event.preventDefault();\n const element = event.target as HTMLElement;\n const className = element.classList[0];\n\n document.addEventListener(\"mouseup\", this.handleImageCropFinished, false);\n document.addEventListener(\"touchend\", this.handleImageCropFinished, false);\n switch (className) {\n case \"crop\":\n document.addEventListener(\"mousemove\", this.handleCropDrag, false);\n document.addEventListener(\"touchmove\", this.handleCropDrag, false)\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleCropDrag));\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleCropDrag));\n break;\n case \"nw\":\n document.addEventListener(\"mousemove\", this.handleNwMouseMove, false);\n document.addEventListener(\"touchmove\", this.handleNwMouseMove, false)\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleNwMouseMove));\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleNwMouseMove));\n break;\n case \"ne\":\n document.addEventListener(\"mousemove\", this.handleNeMouseMove, false);\n document.addEventListener(\"touchmove\", this.handleNeMouseMove, false)\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleNeMouseMove));\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleNeMouseMove));\n break\n case \"se\":\n document.addEventListener(\"mousemove\", this.handleSeMouseMove, false);\n document.addEventListener(\"touchmove\", this.handleSeMouseMove, false)\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleSeMouseMove));\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleSeMouseMove));\n break;\n case \"sw\":\n document.addEventListener(\"mousemove\", this.handleSwMouseMove, false);\n document.addEventListener(\"touchmove\", this.handleSwMouseMove, false)\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleSwMouseMove));\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleSwMouseMove));\n break;\n default:\n break;\n }\n };\n\n private handleImageCropFinished = (_ev: MouseEvent) => {\n this.emitImage();\n document.removeEventListener(\"mouseup\", this.handleImageCropFinished);\n this.previousTouch = undefined;\n }\n\n private emitImage() {\n var x = this.crop.offsetLeft / this.image.width * this.image.naturalWidth;\n var y = this.crop.offsetTop / this.image.height * this.image.naturalHeight;\n\n var cropRect = this.crop.getBoundingClientRect();\n var width = cropRect.width / this.image.width * this.image.naturalWidth;\n var height = cropRect.height / this.image.height * this.image.naturalHeight;\n\n if (x < 0)\n x = 0;\n if (x > this.image.naturalWidth)\n x = this.image.naturalWidth;\n if (y < 0)\n y = 0;\n if (y > this.image.naturalWidth)\n y = this.image.naturalWidth;\n if (width > this.image.naturalWidth)\n width = this.image.naturalWidth;\n if (height > this.image.naturalHeight)\n height = this.image.naturalHeight;\n\n var dataUrl = this.generateCroppedImage(x, y, width, height, this.width, this.height);\n this.imageCropChanged.emit(dataUrl);\n }\n\n private generateCroppedImage(x: number, y: number, width: number, height: number, desiredWidth: number, desiredHeight: number) {\n this.canvas.width = desiredWidth;\n this.canvas.height = desiredHeight;\n const context = this.canvas.getContext(\"2d\");\n context.clearRect(0, 0, desiredWidth, desiredHeight);\n context.drawImage(this.image, x, y, width, height, 0, 0, desiredWidth, desiredHeight);\n\n return this.canvas.toDataURL(\"image/jpeg\", this.quality);\n }\n\n private handleNwMouseMove = (event: MouseEvent | TouchEvent) => {\n this.handleCornerDrag(event, CornerType.nw);\n }\n\n private handleNeMouseMove = (event: MouseEvent | TouchEvent) => {\n this.handleCornerDrag(event, CornerType.ne);\n }\n\n private handleSeMouseMove = (event: MouseEvent | TouchEvent) => {\n this.handleCornerDrag(event, CornerType.se);\n }\n\n private handleSwMouseMove = (event: MouseEvent | TouchEvent) => {\n this.handleCornerDrag(event, CornerType.sw);\n }\n\n private handleCornerDrag = (event: MouseEvent | TouchEvent, corner: CornerType) => {\n if (!this.isMouseStillInTarget(event)){\n return;\n }\n \n let {left, top} = this.getCornerLeftTop(corner);\n let newWidth = 0;\n let newHeight = 0;\n let orientation: \"horizontal\" | \"vertical\" = \"horizontal\";\n const wantedRatio = this.width / this.height;\n const cropRect = this.crop.getBoundingClientRect();\n const imageRect = this.image.getBoundingClientRect();\n let { movementX, movementY } = getMovementFromEvent(event, this.previousTouch);\n if (Math.abs(movementX) < Math.abs(movementY)){\n orientation = \"vertical\";\n }\n\n if (orientation == \"horizontal\"){\n switch (corner) {\n case CornerType.nw:\n case CornerType.sw:\n newWidth = cropRect.width - movementX;\n newHeight = newWidth / wantedRatio;\n break;\n case CornerType.ne:\n case CornerType.se:\n newWidth = cropRect.width + movementX;\n newHeight = newWidth / wantedRatio;\n break;\n default:\n break;\n }\n } else{\n switch (corner) {\n case CornerType.nw:\n case CornerType.ne:\n newHeight = cropRect.height - movementY;\n newWidth = newHeight * wantedRatio;\n break;\n case CornerType.se:\n case CornerType.sw:\n newHeight = cropRect.height + movementY;\n newWidth = newHeight * wantedRatio;\n break;\n default:\n break;\n }\n }\n\n switch (corner) {\n case CornerType.ne:\n case CornerType.nw:\n const topOffset = cropRect.height - newHeight;\n top = this.crop.offsetTop + topOffset;\n default:\n break;\n }\n\n switch (corner) {\n case CornerType.nw:\n case CornerType.sw:\n const leftOffset = cropRect.width - newWidth;\n left = this.crop.offsetLeft + leftOffset;\n if (left < 0) left = 0;\n if (left > imageRect.width) left = imageRect.width;\n if (top < 0) top = 0;\n if (top > imageRect.height) top = imageRect.height;\n if (left + newWidth > imageRect.width) newWidth = imageRect.width - left;\n if (top + newHeight > imageRect.height) newHeight = imageRect.height - top;\n break;\n case CornerType.ne:\n case CornerType.se:\n if (top < 0) top = 0;\n if (top > imageRect.height) top = imageRect.height;\n if (left + newWidth > imageRect.width) newWidth = imageRect.width - left;\n if (top + newHeight > imageRect.height) newHeight = imageRect.height - top;\n break;\n default:\n break;\n }\n\n if (newWidth / newHeight != wantedRatio){\n return;\n }\n\n if (this.preventUndersized){\n const zoomRatio = this.image.width / this.image.naturalWidth;\n if (newWidth / zoomRatio < this.width || newHeight / zoomRatio < this.height){\n return;\n }\n }\n\n switch (corner) {\n case CornerType.ne:\n this.crop.style.top = `${top}px`;\n this.crop.style.width = `${newWidth}px`;\n this.crop.style.height = `${newHeight}px`;\n break;\n case CornerType.nw:\n this.crop.style.left = `${left}px`;\n this.crop.style.top = `${top}px`;\n this.crop.style.width = `${newWidth}px`;\n this.crop.style.height = `${newHeight}px`;\n break;\n case CornerType.se:\n this.crop.style.width = `${newWidth}px`;\n this.crop.style.height = `${newHeight}px`;\n break;\n case CornerType.sw:\n this.crop.style.left = `${left}px`;\n this.crop.style.width = `${newWidth}px`;\n this.crop.style.height = `${newHeight}px`;\n break;\n default:\n break;\n }\n }\n\n private getCornerLeftTop(corner: CornerType): { left: number; top: number; } {\n let left = 0;\n let top = 0;\n switch (corner) {\n case CornerType.se:\n left = this.crop.offsetLeft;\n top = this.crop.offsetTop;\n break;\n case CornerType.sw:\n top = this.crop.offsetTop;\n break;\n default:\n break;\n }\n return {top, left};\n }\n\n private handleCropDrag = (ev: MouseEvent | TouchEvent) => {\n if (!this.isMouseStillInTarget(ev)){\n return;\n }\n let {movementX, movementY} = getMovementFromEvent(ev, this.previousTouch);\n let newLeft = this.crop.offsetLeft + movementX;\n let newTop = this.crop.offsetTop + movementY;\n var imageRect = this.image.getBoundingClientRect();\n var cropRect = this.crop.getBoundingClientRect();\n if (newLeft < 0){\n newLeft = 0;\n }\n if (newTop < 0){\n newTop = 0;\n }\n if (newLeft + cropRect.width > imageRect.width){\n newLeft = this.crop.offsetLeft;\n }\n if (newTop + cropRect.height > imageRect.height){\n newTop = this.crop.offsetTop;\n }\n this.crop.style.left = newLeft + \"px\";\n this.crop.style.top = newTop + \"px\";\n };\n\n private isMouseStillInTarget(event: MouseEvent | TouchEvent) {\n var inside = false;\n let mouseX: number;\n let mouseY: number;\n const imageRect = this.image.getBoundingClientRect();\n \n if (event instanceof MouseEvent){\n mouseX = event.clientX;\n mouseY = event.clientY;\n }\n\n if (typeof TouchEvent !== \"undefined\"){\n if (event instanceof TouchEvent){\n var touch = event.touches[0];\n mouseX = touch.clientX;\n mouseY = touch.clientY;\n }\n }\n \n if (\n mouseX >= imageRect.x &&\n mouseY >= imageRect.y &&\n mouseX <= imageRect.left + imageRect.width &&\n mouseY <= imageRect.top + imageRect.height)\n {\n inside = true;\n }\n\n var corners = this.crop.querySelectorAll(\"div\");\n corners.forEach(corner =>{\n var cornerRect = corner.getBoundingClientRect();\n if (\n mouseX >= cornerRect.x &&\n mouseY >= cornerRect.y &&\n mouseX <= cornerRect.left + cornerRect.width &&\n mouseY <= cornerRect.top + cornerRect.height)\n {\n inside = true;\n }\n })\n\n return inside;\n }\n\n render() {\n return (\n <Host ref={el => this.host = el}>\n <canvas ref={el => this.canvas = el} />\n <div\n class=\"view\"\n ref={el => this.hasPictureView = el}\n >\n <div class=\"cropper\">\n <img ref={el => this.image = el} />\n <div class=\"backdrop\" />\n <div\n class=\"crop\"\n ref={e => this.crop = e}\n onMouseDown={this.handleCropMouseDown}\n onTouchStart={this.handleCropMouseDown}\n >\n <div class=\"nw\" />\n <div class=\"ne\" />\n <div class=\"se\" />\n <div class=\"sw\" />\n </div>\n </div>\n </div>\n <div\n class=\"view\"\n ref={el => this.noPictureView = el}>\n <dnn-dropzone\n allowCameraMode\n onFilesSelected={e => this.handleNewFile(e.detail[0])}\n resx={\n {\n capture: this.resx.capture,\n dragAndDropFile: this.resx.dragAndDropFile,\n or: this.resx.or,\n takePicture: this.resx.takePicture,\n uploadFile: this.resx.uploadFile,\n }\n }\n />\n </div>\n <dnn-modal ref={el => this.imageTooSmallModal = el} close-text={this.resx.modalCloseText}>\n <p>{this.resx.imageTooSmall.replace(\"{width}\", this.width.toString()).replace(\"{height}\", this.height.toString())}</p>\n </dnn-modal>\n </Host>\n );\n }\n}\n\ninterface IComponentInterfaces\n{\n View: \"noPictureView\" | \"takingPictureView\" | \"hasPictureView\" | \"hasCroppedPictureView\";\n}",":host {\n /**\n * @prop --max-width: The maximum width of the module.\n */\n display: block;\n .overlay{\n background-color: rgba(0,0,0,0.5);\n position: fixed;\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n z-index: 1002; // DNN default theme has menus on z-index 1001\n display: flex;\n justify-content: center;\n align-items: center;\n backdrop-filter: blur(2px);\n transition: all 300ms ease-in-out;\n visibility: hidden;\n opacity: 0;\n .modal{\n max-width: var(--max-width, 1200px);\n background-color: white;\n padding: 30px;\n transform: scale(2);\n transition: all 300ms ease-in-out;\n z-index: 2;\n position: relative;\n margin: 10%;\n max-height: 80%;\n border-radius: var(--dnn-controls-radius, 5px);\n box-shadow: 10px 10px 20px 0 rgba(0,0,0,0.5);\n display: block;\n .content{\n max-width: 80vw;\n max-height: 80vh;\n overflow: auto;\n }\n .close{\n position: absolute;\n background-color:white;\n border: 2px solid white;\n border-radius: 50%;\n padding: 0;\n margin: 0;\n top: -12px;\n right: -12px;\n outline: none;\n display: flex;\n justify-content: center;\n align-items: center;\n &:focus, &:hover{\n box-shadow: 0 0 2px 2px var(--dnn-color-primary, blue);\n }\n svg{\n width: 24px;\n height: 24px;\n color: grey;\n }\n }\n }\n &.visible{\n visibility: visible;\n opacity: 1;\n .modal{\n transform: scale(1);\n box-shadow: 4px 4px 10px 0px rgba(0,0,0,0.5);\n display: block;\n }\n }\n }\n}","import { Component, Element, Host, h, Prop, Event, EventEmitter, Method } from '@stencil/core';\n\n@Component({\n tag: 'dnn-modal',\n styleUrl: 'dnn-modal.scss',\n shadow: true\n})\nexport class DnnModal {\n \n @Element() el!: HTMLDnnModalElement;\n \n /**\n * Pass false to remove the backdrop click auto-dismiss feature.\n */\n @Prop() backdropDismiss: boolean = true;\n\n /**\n * Optionally pass the aria-label text for the close button.\n * Defaults to \"Close modal\" if not provided.\n */\n @Prop() closeText?: string = \"Close modal\";\n\n /**\n * Optionally you can pass false to not show the close button.\n * If you decide to do so, you should either not also prevent dismissal by clicking the backdrop\n * or provide your own dismissal logic in the modal content.\n */\n @Prop() showCloseButton?: boolean = true;\n\n /**\n * Reflects the visible state of the modal.\n */\n @Prop({mutable: true, reflect: true}) visible: boolean = false;\n\n /**\n * Shows the modal\n */\n @Method()\n async show() {\n this.visible = true;\n }\n\n /**\n * Hides the modal\n */\n @Method()\n async hide() {\n this.visible = false;\n }\n\n /**\n * Fires when the modal is dismissed.\n */\n @Event() dismissed!: EventEmitter;\n\n private handleDismiss(){\n this.visible = false;\n this.dismissed.emit();\n }\n\n private handleBackdropClick(e: MouseEvent): void {\n const element = (e.target as HTMLElement);\n if (element.id === \"backdrop\" && this.backdropDismiss){\n this.handleDismiss();\n }\n }\n\n render() {\n return (\n <Host>\n <div id=\"backdrop\"\n class={this.visible ? 'overlay visible' : 'overlay'}\n onClick={e => this.handleBackdropClick(e)}\n >\n <div class=\"modal\">\n {this.showCloseButton &&\n <button\n class=\"close\"\n aria-label={this.closeText}\n onClick={() => this.handleDismiss()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>\n </button>\n }\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.add-role-row{\n display: flex;\n gap: 1em;\n align-items: center;\n flex-wrap: wrap;\n label{\n margin-right:0.5em;\n }\n}\n.search-user{\n display: flex;\n gap: 1em;\n margin-top: 1em;\n .search-control{\n position: relative;\n dnn-collapsible{\n position: absolute;\n left: 0;\n top: calc(100% - 2px);\n width: 100%;\n box-shadow: 0px 4px 4px;\n .dropdown{\n background-color: white;\n border: 1px solid lightgray;\n display: flex;\n flex-direction: column;\n button{\n background-color: transparent;\n border: none;\n border-bottom: 1px solid lightgray;\n padding: 0.25em;\n margin: 0;\n text-align: left;\n }\n }\n }\n }\n}\ntable{\n border: 1px solid lightgray;\n border-collapse: collapse;\n margin-top: 1em;\n thead{\n text-align: center;\n tr{\n border-bottom: 1px solid lightgray;\n }\n th{\n background-color: lightgray;\n padding: 0.25em 0.5em;\n &:first-child{\n border-right: 1px solid lightgray;\n }\n }\n }\n tbody{\n tr{\n border-bottom: 1px dotted lightgray;\n th{\n text-align: left;\n border-right: 1px solid lightgray;\n padding: 0 0.5em;\n }\n td{\n text-align: center;\n dnn-checkbox{\n span{\n display: none;\n }\n }\n button{\n background-color: transparent;\n border: 0;\n padding: 0;\n margin: 0;\n margin-right: 1em;\n }\n }\n }\n }\n}","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\nimport { ILocalization } from './localization-interface';\nimport { IPermissionDefinition, IPermissions, IRolePermission, IUserPermission } from './permissions-interface';\nimport { IRoleGroup } from './role-group-interface';\nimport { IRole } from './role-interface';\nimport { ISearchedUser } from './searched-user-interface';\n\n@Component({\n tag: 'dnn-permissions-grid',\n styleUrl: 'dnn-permissions-grid.scss',\n shadow: true,\n})\nexport class DnnPermissionsGrid {\n\n /** The list of permissions. */\n @Prop({mutable: true}) permissions!: IPermissions;\n\n /** The list of role groups. */\n @Prop() roleGroups!: IRoleGroup[];\n\n /** The list of possible roles. */\n @Prop() roles!: IRole[];\n\n /** Optionally allows localizing the component strings. */\n @Prop() resx: ILocalization = {\n Add: \"Add\",\n AllRoles: \"All Roles\",\n FilterByGroup: \"Filter By Group\",\n GlobalRoles: \"Global Roles\",\n Role: \"Role\",\n RolePermissions: \"Role Permissions\",\n SelectRole: \"Select Role\",\n User: \"User\",\n UserPermissions: \"User Permissions\",\n }\n\n /** The list of users to show under the search users field when a search is performed. */\n @Prop() foundUsers: ISearchedUser[] = [];\n\n /** Fires when searching for users to add to the permissions. Emits the search query. */\n @Event() userSearchQueryChanged: EventEmitter<string>;\n \n /** Fires when any permissions have changed, can be used for instance to have linked permissions. */\n @Event() permissionsChanged: EventEmitter<IPermissions>;\n\n @State() selectedRoleGroupId = -1;\n @State() userQuery: string;\n @State() pickedUser: ISearchedUser;\n \n \n @Watch(\"foundUsers\")\n handleFoundUsersChanged(newValue: ISearchedUser[]){\n if (newValue?.length > 0){\n setTimeout(() => {\n this.userCollapsible.expanded = true;\n }, 100);\n }\n }\n \n componentWillLoad() {\n document.addEventListener(\"click\", this.dismissUserResults.bind(this));\n }\n \n disconnectedCallback() {\n document.removeEventListener(\"click\", this.disconnectedCallback.bind(this));\n }\n \n private roleDropDown: HTMLSelectElement;\n private userCollapsible: HTMLDnnCollapsibleElement;\n\n private dismissUserResults(e: MouseEvent){\n const dropdownRect = this.roleDropDown.getBoundingClientRect();\n if (\n e.pageX > dropdownRect.right ||\n e.pageX < dropdownRect.left ||\n e.pageY > dropdownRect.bottom ||\n e.pageY < dropdownRect.top){\n this.userCollapsible.expanded = false;\n }\n } \n\n private handleRoleGroupChanged(dropdown: HTMLSelectElement): void {\n const index = dropdown.selectedIndex;\n const value = Number.parseInt(dropdown.options[index].value);\n this.selectedRoleGroupId = value;\n }\n\n private addRole(): void {\n const roleId = Number.parseInt(this.roleDropDown.options[this.roleDropDown.selectedIndex].value);\n const role = this.roles.filter(r => r.RoleId == roleId)[0];\n this.permissions = {\n ...this.permissions,\n rolePermissions: [\n ...this.permissions.rolePermissions,\n {\n default: false,\n locked: false,\n permissions: [],\n roleId: role.RoleId,\n roleName: role.RoleName,\n }\n ]\n }\n this.permissionsChanged.emit(this.permissions);\n }\n\n private addUser(): void {\n if (this.pickedUser != undefined){\n this.permissions = {\n ...this.permissions,\n userPermissions: [\n ...this.permissions.userPermissions,\n {\n displayName: this.pickedUser.displayName,\n permissions: [],\n userId: this.pickedUser.userId,\n },\n ],\n };\n this.pickedUser = undefined;\n this.userQuery = \"\";\n this.permissionsChanged.emit(this.permissions);\n }\n }\n\n private getRoles(){\n const filteredRoles = this.roles.filter(role => \n !this.permissions.rolePermissions.some(rp => rp.roleId == role.RoleId))\n if (this.selectedRoleGroupId == -2){\n // All Roles\n return filteredRoles;\n }\n\n if (this.selectedRoleGroupId == -1){\n // Global Roles\n return filteredRoles.filter(role => role.IsSystemRole);\n }\n \n return filteredRoles.filter(role => role.RoleGroupId == this.selectedRoleGroupId);\n }\n\n private renderRoleCheckBox(rolePermission: IRolePermission, permissionDefinition: IPermissionDefinition) {\n const item = rolePermission.permissions.filter(permission => permission.permissionId == permissionDefinition.permissionId)[0];\n if (rolePermission.locked){\n return(\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g fill=\"none\"><path d=\"M0 0h24v24H0V0z\"/><path d=\"M0 0h24v24H0V0z\" opacity=\".87\"/></g><path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z\"/></svg>\n )\n }\n\n const checked = item == undefined ? \"intermediate\" : item.allowAccess ? \"checked\" : \"unchecked\";\n return(\n <dnn-checkbox\n use-intermediate\n checked={checked}\n onCheckedchange={e => this.handleRoleChanged(e.detail, rolePermission, permissionDefinition)}\n >\n <div slot=\"intermediateicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"/></svg>\n </div>\n <div slot=\"uncheckedicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z\"/></svg>\n </div>\n <span>{permissionDefinition.permissionName}</span>\n </dnn-checkbox>\n )\n }\n\n private renderUserCheckBox(userPermission: IUserPermission, permissionDefinition: IPermissionDefinition) {\n const item = userPermission.permissions.filter(permission => permission.permissionId == permissionDefinition.permissionId)[0];\n\n const checked = item == undefined ? \"intermediate\" : item.allowAccess ? \"checked\" : \"unchecked\";\n return(\n <dnn-checkbox\n use-intermediate\n checked={checked}\n onCheckedchange={e => this.handleUserChanged(e.detail, userPermission, permissionDefinition)}\n >\n <div slot=\"intermediateicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"/></svg>\n </div>\n <div slot=\"uncheckedicon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z\"/></svg>\n </div>\n <span>{permissionDefinition.permissionName}</span>\n </dnn-checkbox>\n )\n }\n \n private handleRoleChanged(\n checked: \"checked\" | \"unchecked\" | \"intermediate\",\n rolePermission: IRolePermission,\n permissionDefinition: IPermissionDefinition\n ): void {\n switch (checked) {\n case \"unchecked\":\n this.permissions = {\n ...this.permissions,\n rolePermissions: [\n ...this.permissions.rolePermissions.map(r => {\n if (r.roleId != rolePermission.roleId){\n return r;\n }\n\n const newRolePermission = Object.assign({}, r);\n newRolePermission.permissions = [\n ...newRolePermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n {\n allowAccess: false,\n fullControl: false,\n permissionCode: permissionDefinition.permissionCode,\n permissionId: permissionDefinition.permissionId,\n permissionKey: permissionDefinition.permissionKey,\n permissionName: permissionDefinition.permissionName,\n view: false,\n },\n ];\n return newRolePermission;\n }),\n ],\n };\n break;\n case \"checked\":\n this.permissions = {\n ...this.permissions,\n rolePermissions: [\n ...this.permissions.rolePermissions.map(r => {\n if (r.roleId != rolePermission.roleId){\n return r;\n }\n\n const newRolePermission = Object.assign({}, r);\n newRolePermission.permissions = [\n ...newRolePermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n {\n allowAccess: true,\n fullControl: false,\n permissionCode: permissionDefinition.permissionCode,\n permissionId: permissionDefinition.permissionId,\n permissionKey: permissionDefinition.permissionKey,\n permissionName: permissionDefinition.permissionName,\n view: false,\n },\n ];\n return newRolePermission;\n }),\n ],\n };\n break;\n case \"intermediate\":\n this.permissions = {\n ...this.permissions,\n rolePermissions: [\n ...this.permissions.rolePermissions.map(r => {\n if (r.roleId != rolePermission.roleId){\n return r;\n }\n\n const newRolePermission = Object.assign({}, r);\n newRolePermission.permissions = [\n ...newRolePermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n ];\n return newRolePermission;\n }),\n ],\n };\n break;\n default:\n break;\n }\n this.permissionsChanged.emit(this.permissions);\n }\n\n private handleUserChanged(\n checked: \"checked\" | \"unchecked\" | \"intermediate\",\n userPermission: IUserPermission,\n permissionDefinition: IPermissionDefinition\n ): void {\n switch (checked) {\n case \"unchecked\":\n this.permissions = {\n ...this.permissions,\n userPermissions: [\n ...this.permissions.userPermissions.map(u => {\n if (u.userId != userPermission.userId){\n return u;\n }\n\n const newUserPermission = Object.assign({}, u);\n newUserPermission.permissions = [\n ...newUserPermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n {\n allowAccess: false,\n fullControl: false,\n permissionCode: permissionDefinition.permissionCode,\n permissionId: permissionDefinition.permissionId,\n permissionKey: permissionDefinition.permissionKey,\n permissionName: permissionDefinition.permissionName,\n view: false,\n },\n ];\n return newUserPermission;\n }),\n ],\n };\n break;\n case \"checked\":\n this.permissions = {\n ...this.permissions,\n userPermissions: [\n ...this.permissions.userPermissions.map(u => {\n if (u.userId != userPermission.userId){\n return u;\n }\n\n const newUserPermission = Object.assign({}, u);\n newUserPermission.permissions = [\n ...newUserPermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n {\n allowAccess: true,\n fullControl: false,\n permissionCode: permissionDefinition.permissionCode,\n permissionId: permissionDefinition.permissionId,\n permissionKey: permissionDefinition.permissionKey,\n permissionName: permissionDefinition.permissionName,\n view: false,\n },\n ];\n return newUserPermission;\n }),\n ],\n };\n break;\n case \"intermediate\":\n this.permissions = {\n ...this.permissions,\n userPermissions: [\n ...this.permissions.userPermissions.map(u => {\n if (u.userId != userPermission.userId){\n return u;\n }\n\n const newUserPermission = Object.assign({}, u);\n newUserPermission.permissions = [\n ...newUserPermission.permissions.filter(p => p.permissionId != permissionDefinition.permissionId),\n ];\n return newUserPermission;\n }),\n ],\n };\n break;\n default:\n break;\n }\n this.permissionsChanged.emit(this.permissions);\n }\n\n private removeRole(rolePermission: IRolePermission): void {\n this.permissions = {\n ...this.permissions,\n rolePermissions: [\n ...this.permissions.rolePermissions.filter(rp => rp.roleId != rolePermission.roleId),\n ],\n };\n this.permissionsChanged.emit();\n }\n\n private removeUser(userPermission: IUserPermission): void {\n this.permissions = {\n ...this.permissions,\n userPermissions: [\n ...this.permissions.userPermissions.filter(up => up.userId != userPermission.userId),\n ]\n };\n this.permissionsChanged.emit(this.permissions);\n }\n\n private handleQueryChanged(query: string): void {\n this.userQuery = query;\n if (query == undefined || query.length == 0){\n this.userCollapsible.expanded = false;\n this.pickedUser = undefined;\n this.foundUsers = [];\n return;\n }\n this.userSearchQueryChanged.emit(query);\n }\n\n private handleSearchUserFieldKeyDown(e: KeyboardEvent): void {\n if (e.key != \"ArrowDown\"){\n return;\n }\n\n e.preventDefault();\n const firstButton = this.userCollapsible.querySelector(\"button\");\n if (firstButton != undefined){\n firstButton.focus();\n }\n }\n\n private handleSearchedUserKeyDown(e: KeyboardEvent): void {\n const button = e.target as HTMLButtonElement;\n \n switch(e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n const nextButton = button.nextElementSibling as HTMLButtonElement;\n nextButton?.focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n const previousButton = button.previousElementSibling as HTMLButtonElement;\n previousButton?.focus();\n break;\n default:\n break;\n }\n }\n\n private handleUserPicked(searchedUser: ISearchedUser): void {\n this.userQuery = searchedUser.displayName;\n this.pickedUser = searchedUser;\n }\n\n private getFilteredUsers() {\n return this.foundUsers.filter(fu => !this.permissions.userPermissions.some(up => up.userId == fu.userId))\n }\n \n render() {\n const filteredRoles = this.getRoles();\n return (\n <Host>\n <div class=\"add-role-row\">\n <div class=\"dropdown\">\n <label>{this.resx.FilterByGroup} :</label>\n <select\n onChange={e => this.handleRoleGroupChanged(e.target as HTMLSelectElement)}\n >\n <option\n value={-2}\n selected={this.selectedRoleGroupId == -2}\n >\n {this.resx.AllRoles}\n </option>\n <option\n value={-1}\n selected={this.selectedRoleGroupId == -1}\n >\n {this.resx.GlobalRoles}\n </option>\n {this.roleGroups.map(roleGroup =>\n <option\n value={roleGroup.id}\n selected={this.selectedRoleGroupId == roleGroup.id}\n >\n {roleGroup.name}\n </option>\n )}\n </select>\n </div>\n {filteredRoles && filteredRoles.length > 0 && [\n <div class=\"dropdown\">\n <label>{this.resx.SelectRole} :</label>\n <select ref={el => this.roleDropDown = el}>\n {this.getRoles().map(role =>\n <option value={role.RoleId}\n >\n {role.RoleName}\n </option>\n )}\n </select>\n </div>,\n <dnn-button\n type=\"primary\"\n onClick={() => this.addRole()}\n >\n {this.resx.Add}\n </dnn-button>\n ]\n }\n </div>\n <table class=\"roles-table\">\n <caption>{this.resx.RolePermissions}</caption>\n <thead>\n <tr>\n <th>{this.resx.Role}</th>\n {this.permissions.permissionDefinitions.map(permissionDefinition =>\n <th>{permissionDefinition.permissionName}</th>\n )}\n <th>&nbsp;</th>\n </tr>\n </thead>\n <tbody>\n {this.permissions.rolePermissions.map(rolePermission =>\n <tr>\n <th>{rolePermission.roleName}</th>\n {this.permissions.permissionDefinitions.map(permissionDefinition =>\n <td>\n {this.renderRoleCheckBox(rolePermission, permissionDefinition)}\n </td>\n )}\n <td>\n {!rolePermission.default &&\n <button\n onClick={() => this.removeRole(rolePermission)}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/></svg>\n </button>\n }\n </td>\n </tr>\n )}\n </tbody>\n </table>\n <div class=\"search-user\">\n <div class=\"search-control\">\n <dnn-searchbox\n placeholder={this.resx.User}\n debounced\n onQueryChanged={e => this.handleQueryChanged(e.detail)}\n onKeyDown={e => this.handleSearchUserFieldKeyDown(e)}\n query={this.userQuery}\n />\n <dnn-collapsible ref={el => this.userCollapsible = el}>\n <div class=\"dropdown\">\n {this.getFilteredUsers().map(searchedUser =>\n <button\n onKeyDown={e => this.handleSearchedUserKeyDown(e)}\n onClick={() => this.handleUserPicked(searchedUser)}\n >\n {searchedUser.displayName}\n </button>\n )}\n </div>\n </dnn-collapsible>\n </div>\n {this.pickedUser &&\n <dnn-button\n onClick={() => this.addUser()}\n >\n {this.resx.Add}\n </dnn-button>\n }\n </div>\n {this.permissions.userPermissions && this.permissions.userPermissions.length > 0 &&\n <table class=\"users-table\">\n <caption>{this.resx.UserPermissions}</caption>\n <thead>\n <tr>\n <th>{this.resx.User}</th>\n {this.permissions.permissionDefinitions.map(permissionDefinition =>\n <th>{permissionDefinition.permissionName}</th>\n )}\n <th>&nbsp;</th>\n </tr>\n </thead>\n <tbody>\n {this.permissions.userPermissions.map(userPermission =>\n <tr>\n <th>{userPermission.displayName}</th>\n {this.permissions.permissionDefinitions.map(permissionDefinition =>\n <td>\n {this.renderUserCheckBox(userPermission, permissionDefinition)}\n </td>\n )}\n <td>\n <button\n onClick={() => this.removeUser(userPermission)}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/></svg>\n </button>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n }\n </Host>\n );\n }\n}",":host {\n position: relative;\n display: flex;\n justify-content: space-between;\n --background-color: transparent;\n --color: #333;\n --border-size: 1px;\n --border-color: grey;\n --border-active-color: black;\n --border-radius: var(--dnn-controls-radius, 5px);\n --padding: var(--dnn-controls-padding, 5px);\n --focus-color: var(--dnn-color-primary, blue);\n input {\n width:100%;\n border: var(--border-size) solid var(--border-color);\n outline: none;\n border-radius: var(--border-radius);\n padding: var(--padding);\n padding-right: 32px;\n transition: all 300ms ease-in-out;\n &:focus, &:hover{\n outline: none;\n box-shadow: 0 0 2px 2px var(--focus-color);\n }\n }\n svg{\n position: absolute;\n top:0;\n right:0;\n height: 100%;\n transform: scale(0.7);\n fill: var(--color);\n outline: var(--color);\n color: var(--color);\n transition: all 300ms ease-in-out;\n }\n button{\n background: transparent;\n border: 0;\n margin: 0;\n padding: 0;\n &:focus, &:hover{\n svg{\n fill: var(--focus-color);\n outline: var(--focus-color);\n color: var(--focus-color);\n }\n }\n }\n}\n","import { Component, Host, h, Event, EventEmitter, Watch, Prop } from '@stencil/core';\nimport { Debounce } from '../../utilities/debounce';\n@Component({\n tag: 'dnn-searchbox',\n styleUrl: 'dnn-searchbox.scss',\n shadow: true\n})\nexport class DnnSearchbox {\n\n /**\n * Sets the field placeholder text.\n */\n @Prop() placeholder?: string = \"\";\n\n /**\n * Debounces the queryChanged by 500ms.\n */\n @Prop() debounced: boolean = true;\n\n /** Sets the query */\n @Prop({mutable: true}) query: string = \"\";\n\n /**\n * Fires up each time the search query changes.\n * The data passed is the new query.\n */\n @Event() queryChanged: EventEmitter<string>;\n\n @Watch('query')\n fireQueryChanged(){\n if (this.debounced){\n this.debouncedHandleQueryChanged();\n }\n else{\n this.handleQueryChanged();\n }\n }\n \n private handleQueryChanged(){\n this.queryChanged.emit(this.query);\n }\n\n @Debounce(500)\n private debouncedHandleQueryChanged(){\n this.handleQueryChanged();\n }\n\n render() {\n return (\n <Host>\n <input type=\"text\" value={this.query}\n placeholder={this.placeholder}\n onInput={e => this.query = (e.target as HTMLInputElement).value}\n />\n {this.query !== \"\" ?\n <button class=\"svg clear\"\n onClick={() => this.query = \"\"}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>\n </button>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/></svg>\n }\n </Host>\n );\n }\n\n}\n",":host {\n /**\n * @prop --color: Normal Color of the inactive sort icon.\n * @prop --color-sorted: Color of the sorted sort icon.\n * @prop --color-hover: Color of the icons when hovered.\n */\n --color: #888;\n --color-sorted: var(--dnn-color-primary, rgb(2,139,255));\n --color-hover: var(--dnn-color-primary-light, #36a1ff);\n \n display: inline-block;\n}\n\nbutton {\n outline: none;\n border: none;\n margin: 0;\n padding: 0;\n background-color: transparent;\n outline: none;\n display: inline-block;\n line-height: 1em;\n position: relative;\n top: 0.25em;\n svg{\n height: 1.5em;\n width: auto;\n fill: var(--color);\n }\n &.active{\n svg{\n fill: var(--color-sorted);\n }\n }\n &:hover, &:focus{\n svg{\n fill: var(--color-hover);\n }\n }\n}","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'dnn-sort-icon',\n styleUrl: 'dnn-sort-icon.scss',\n shadow: true\n})\nexport class DnnSortIcon {\n /** Defines the current sort direction */\n @Prop() sortDirection: \"asc\" | \"desc\" | \"none\" = \"none\";\n\n /** Emitted when the sort is changed. */\n @Event() sortChanged!: EventEmitter<\"asc\"|\"desc\"|\"none\">;\n \n private changeSort(): void {\n switch (this.sortDirection) {\n case \"asc\":\n this.sortDirection = \"desc\";\n break;\n case \"desc\":\n this.sortDirection = \"asc\";\n break;\n case \"none\":\n this.sortDirection = \"asc\";\n break;\n default:\n break;\n }\n\n this.sortChanged.emit(this.sortDirection);\n }\n\n render() {\n return (\n <Host>\n <button\n class={{\"active\": this.sortDirection != \"none\"}}\n onClick={() => this.changeSort()}\n >\n {this.sortDirection == \"none\" &&\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 7 H 12 L 6 0 Z M 0 9 H 12 L 6 16 Z\"></path></svg>\n }\n {this.sortDirection == \"asc\" &&\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 7 H 12 L 6 0 Z\"></path></svg>\n }\n {this.sortDirection == \"desc\" &&\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 9 H 12 L 6 16 Z\"></path></svg>\n }\n </button>\n </Host>\n );\n }\n}\n",null,"import { Component, Host, h, Prop, State, Method } from \"@stencil/core\";\r\n\r\n/** Represents a single tab and must be used inside a dnn-tabs element. */\r\n@Component({\r\n tag: 'dnn-tab',\r\n styleUrl: 'dnn-tab.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTab {\r\n /** Defines the tab title. */\r\n @Prop() tabTitle!: string;\r\n\r\n @State() visible: boolean = false;\r\n\r\n /** Shows the tab. */\r\n @Method()\r\n async show(){\r\n this.visible = true;\r\n }\r\n\r\n /** Hides the modal */\r\n @Method()\r\n async hide(){\r\n this.visible = false;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.visible &&\r\n <slot></slot>\r\n }\r\n </Host>\r\n );\r\n }\r\n}",":host {\r\n /**\r\n * @prop --color-background: The color of the inactive tabs.\r\n * @prop --color-text: The color of the text for inactive tabs.\r\n * @prop --color-visible: The color of the active tab.\r\n * @prop --color-visible-text: The color of the text for the active tab.\r\n * @prop --color-focus: outline color when hovering or pre-selecting a tab.\r\n */\r\n display: block;\r\n --color-background: var(--dnn-color-secondary-dark, lightgray);\r\n --color-text: var(--dnn-color-secondary-contrast, #333);\r\n --color-visible: var(--dnn-color-primary, #3792ED);\r\n --color-visible-text: var(--dnn-color-primary-contrast, #FFF);\r\n --color-focus: var(--dnn-color-primary, #3792ed);\r\n }\r\n\r\n .tabTitles{\r\n display: flex;\r\n background-color: var(--color-background);\r\n color: var(--color-text);\r\n button{\r\n padding: 0.5rem 1rem;\r\n border: 0;\r\n margin: 0;\r\n background-color: transparent;\r\n &.visible{\r\n background-color: var(--color-visible);\r\n color: var(--color-bisible-text);\r\n }\r\n &:focus, &:hover{\r\n outline: none;\r\n box-shadow: 0 0 2px 2px var(--color-focus);\r\n }\r\n }\r\n }\r\n\r\n .currentTab{\r\n border: 1px solid var(--color-background);\r\n }","import { Component, Host, h, State } from \"@stencil/core\";\r\n\r\n@Component({\r\n tag: 'dnn-tabs',\r\n styleUrl: 'dnn-tabs.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTabs {\r\n private component: HTMLElement;\r\n\r\n @State() tabTitles: string[] = [];\r\n @State() selectedTabTitle: string = \"\";\r\n\r\n componentDidLoad(){\r\n requestAnimationFrame(() => {\r\n this.updateTitles();\r\n this.showFirstTab();\r\n });\r\n }\r\n\r\n private getTabs() {\r\n return this.component.shadowRoot.querySelector(\"slot\").assignedElements() as HTMLDnnTabElement[];\r\n }\r\n\r\n private updateTitles(){\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => this.tabTitles = [...this.tabTitles, tab.tabTitle]);\r\n }\r\n\r\n private showFirstTab(){\r\n const tab = this.getTabs()[0];\r\n tab.show();\r\n this.selectedTabTitle = tab.tabTitle;\r\n }\r\n\r\n private showTab(tabTitle: string) {\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => {\r\n if (tab.tabTitle == tabTitle){\r\n tab.show();\r\n return;\r\n }\r\n\r\n tab.hide();\r\n });\r\n this.selectedTabTitle = tabTitle;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host ref={el => this.component = el}>\r\n <div class=\"tabTitles\">\r\n {this.tabTitles.map(tabTitle =>\r\n <button\r\n class={this.selectedTabTitle == tabTitle ? \"visible\": \"\"}\r\n onClick={() => this.showTab(tabTitle)}\r\n >\r\n {tabTitle}\r\n </button>\r\n )}\r\n </div>\r\n <div class=\"currentTab\">\r\n <slot></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}",":host {\n /**\n * @prop --background: Background of the toggle.\n * @prop --background-checked: Background of the toggle when checked.\n * @prop --handle-background: Background of the handle.\n * @prop --handle-background-checked: Background of the handle when checked.\n * @prop --border-radius: The radius of the background borders.\n * @prop --handle-border-radius: The radius of the handle.\n */\n\n display: inline-block;\n outline: none;\n cursor: pointer;\n}\n\nbutton {\n height: 1.5em;\n width: 2.5em;\n outline: none;\n background-color: var(--background, #888);\n border: 0;\n border-radius: var(--border-radius, var(--dnn-controls-radius, 0.75em));\n padding: 0.1em;\n position: relative;\n margin: 0;\n transition: background-color 300ms ease-in-out;\n position: relative;\n cursor: pointer;\n &:hover, &:focus{\n box-shadow: 0 0 2px 2px var(--dnn-color-primary);\n }\n &.checked{\n background-color: var(--background-checked, var(--dnn-color-primary, blue));\n .handle{\n left: calc(1em + 4px);\n }\n }\n &:disabled{\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n }\n .handle{\n transition: all 300ms ease-in-out;\n background-color:white;\n width: 1em;\n height: 1em;\n border-radius: var(--handle-border-radius, var(--dnn-controls-radius, 50%));\n position: absolute;\n top: calc(50% - 0.5em);\n left: 2px;\n }\n}","import { Component, h, Element, Prop, Event, EventEmitter, Watch, Host } from \"@stencil/core\";\nimport { DnnToggleChangeEventDetail } from \"./toggle-interface\";\n\n\n@Component({\n tag: \"dnn-toggle\",\n styleUrl: \"dnn-toggle.scss\",\n shadow: true\n})\nexport class DnnToggle {\n\n @Element() element: HTMLDnnToggleElement;\n\n /** If 'true' the toggle is checked (on). */\n @Prop({mutable: true}) checked = false;\n\n /** If 'true' the toggle is not be interacted with. */\n @Prop() disabled = false;\n\n /** Fires when the toggle changed */\n @Event() checkChanged!: EventEmitter<DnnToggleChangeEventDetail>;\n\n @Watch(\"checked\")\n checkedChanged(isChecked: boolean){\n this.checkChanged.emit({checked: isChecked});\n }\n\n render() {\n return (\n <Host>\n <button disabled={this.disabled} class={{'checked': this.checked}}\n onClick={() => {\n if (!this.disabled) {\n this.checked = !this.checked;\n }\n }}\n >\n <div class=\"handle\"></div>\n </button>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n overflow: visible;\n}\n.expander{\n width: 24px;\n height: 24px;\n button{\n transition: all 150ms ease-in-out;\n background-color:transparent;\n border: none;\n padding: 0;\n margin: 0;\n height: 1em;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n position: relative;\n top: 2px;\n svg{\n :first-child{\n transition: all 150ms ease-in-out;\n fill: white;\n stroke: black\n }\n }\n }\n &.expanded{\n button{\n transform: rotate(45deg);\n svg{\n :first-child{\n fill: black;\n stroke: black;\n }\n }\n }\n }\n}\ndiv.item{\n .item-slot{\n display: flex;\n align-items: center;\n gap: 0.25em;\n min-height: 24px;\n }\n div.children{\n overflow: hidden;\n height:0;\n transition: all 150ms ease-in-out;\n }\n}","import { Component, Host, h, Prop, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\n\n/** \n * @slot - The content of this node.\n * @slot children - The content nested under this node.\n*/\n@Component({\n tag: 'dnn-treeview-item',\n styleUrl: 'dnn-treeview-item.scss',\n shadow: true,\n})\nexport class DnnTreeviewItem {\n \n private expander!: HTMLDivElement;\n\n @Element() el!: HTMLDnnTreeviewItemElement;\n \n /** Defines if the current node is expanded. */\n @Prop({mutable: true, reflect: true}) expanded: boolean = false;\n\n /** Fires when the user expands a node. */\n @Event({bubbles: false}) userExpanded: EventEmitter<void>;\n\n /** Fires when the user collapses a node. */\n @Event({bubbles: false}) userCollapsed: EventEmitter<void>;\n\n /** Manages state for whether or not item has children. */\n @State() hasChildren: boolean = false;\n\n /** Watch expanded Prop */\n @Watch('expanded')\n watchExpanded(expanded: boolean) {\n if (expanded) {\n this.expander.classList.add(\"expanded\");\n this.collapsible.expanded = true;\n return;\n }\n \n this.expander.classList.remove(\"expanded\");\n this.collapsible.expanded = false;\n }\n \n \n private childElement!: HTMLDivElement;\n private collapsible!: HTMLDnnCollapsibleElement;\n\n componentDidLoad() {\n requestAnimationFrame(() => {\n const child = this.childElement.children[0] as HTMLSlotElement;\n const count = child.assignedElements().length\n if (count > 0){\n this.hasChildren = true;\n }\n if (this.expanded){\n this.expander.classList.add(\"expanded\");\n this.collapsible.expanded = false;\n setTimeout(() => {\n this.collapsible.expanded = true;\n }, 300);\n }\n });\n }\n\n private toggleCollapse(): void {\n this.expanded = !this.expanded;\n if (this.expanded){\n this.expander.classList.add(\"expanded\");\n this.userExpanded.emit();\n return;\n }\n\n this.expander.classList.remove(\"expanded\");\n this.userCollapsed.emit();\n }\n\n render() {\n return (\n <Host>\n <div class=\"expander\" ref={el => this.expander = el}>\n {this.hasChildren &&\n <button\n onClick={() => this.toggleCollapse()}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M10 17l5-5-5-5v10z\"/><path d=\"M0 24V0h24v24H0z\" fill=\"none\"/></svg>\n </button>\n }\n </div>\n <div class=\"item\">\n <div class=\"item-slot\">\n <slot></slot>\n </div>\n <dnn-collapsible ref={el => this.collapsible = el} expanded={this.expanded}>\n <div ref={el => this.childElement = el}>\n <slot name=\"children\"></slot>\n </div>\n </dnn-collapsible>\n </div>\n </Host>\n );\n }\n}\n\nexport interface ExpandedToggledEvent{\n state: \"expanded\" | \"collapsed\";\n height: number;\n}",":host {\n /**\n * @prop --background-color: Defines the menu background color.\n * @prop --foreground-color: A color that contrasts with the background color.\n */\n --background-color: var(--dnn-color-primary-contrast, white);\n --foreground-color: var(--dnn-color-primary, #3792ED);\n\n display: block;\n}\n\n.menu-container{\n display: flex;\n justify-content: flex-start;\n align-items: center;\n background-color: var(--background-color);\n .menu{\n margin: 0.5em;\n display: flex;\n gap: 1em;\n justify-content: flex-start;\n align-items: center;\n white-space: nowrap;\n width: 100%;\n }\n .overflow {\n margin-left: auto;\n position: relative;\n button{\n cursor: pointer;\n svg{\n fill: var(--foreground-color);\n }\n padding: 0;\n margin: 0;\n background-color: transparent;\n border: none;\n }\n .dropdown{\n position:absolute;\n display: flex;\n flex-direction: column;\n white-space: nowrap;\n right: 0;\n transition: 100ms ease-in-out;\n height: 0;\n overflow: hidden;\n &.visible{\n padding: 1em;\n gap: 0.5em;\n background-color: var(--background-color);\n box-shadow: 2px 2px 4px rgba(0,0,0,0.7);\n }\n }\n }\n}\n","import { Component, Element, Host, h, State } from '@stencil/core';\n\n@Component({\n tag: 'dnn-vertical-overflow-menu',\n styleUrl: 'dnn-vertical-overflow-menu.scss',\n shadow: true,\n})\nexport class DnnVerticalOverflowMenu {\n\n @Element() element!: HTMLDnnVerticalOverflowMenuElement;\n \n @State() showDropdownButton = false;\n @State() showDropdownMenu = false;\n\n private menu!: HTMLDivElement;\n private dropdown: HTMLDivElement;\n private resizeObserver: ResizeObserver;\n private button!: HTMLButtonElement;\n private previousMenuWidth = 0;\n\n componentDidRender() {\n requestAnimationFrame(() => {\n this.moveItemsToDropDownIfNecessery();\n this.resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries){\n if (entry.contentRect.width < this.previousMenuWidth){\n this.moveItemsToDropDownIfNecessery()\n }\n if (this.previousMenuWidth > 0 && entry.contentRect.width > this.previousMenuWidth){\n this.moveItemsToMenuIfPossible();\n }\n this.previousMenuWidth = entry.contentRect.width;\n }\n });\n this.resizeObserver.observe(this.element);\n });\n }\n\n private moveItemsToDropDownIfNecessery(){\n const menuItems = Array.from(this.menu.querySelector(\"slot\").assignedElements());\n const availableWidth = this.menu.getBoundingClientRect().width;\n let neededWidth = parseFloat(getComputedStyle(this.element).fontSize)*2;\n menuItems.forEach(item => neededWidth += this.getFullWidth(item));\n neededWidth += (menuItems.length - 1) * parseFloat(getComputedStyle(this.element).fontSize);\n if (neededWidth > availableWidth){\n this.showDropdownButton = true;\n var lastItem = menuItems[menuItems.length -1];\n if (this.dropdown == undefined){\n return;\n }\n lastItem.slot = \"dropdown\";\n this.moveItemsToDropDownIfNecessery();\n }\n }\n \n private moveItemsToMenuIfPossible(){\n if (this.dropdown == undefined || !this.dropdown.hasChildNodes()){\n return;\n }\n const menuItems = Array.from(this.menu.querySelector(\"slot\").assignedElements());\n const availableWidth = this.menu.getBoundingClientRect().width;\n let neededWidth = parseFloat(getComputedStyle(this.element).fontSize)*2;\n neededWidth += (menuItems.length - 1) * parseFloat(getComputedStyle(this.element).fontSize);\n menuItems.forEach(item => neededWidth += this.getFullWidth(item));\n const firstItem = this.dropdown.querySelector(\"slot\").assignedElements()[0];\n if (firstItem != undefined){\n neededWidth += this.getFullWidth(firstItem);\n }\n\n if (neededWidth < availableWidth){\n if (firstItem != undefined){\n firstItem.slot = \"\";\n }\n if(firstItem == undefined){\n this.dropdown.classList.remove(\"visible\");\n this.showDropdownMenu = false;\n this.showDropdownButton = false;\n }\n } \n }\n\n private getFullWidth(item: Element) {\n var width = item.getBoundingClientRect().width;\n var styles = getComputedStyle(item);\n width += parseFloat(styles.marginLeft);\n width += parseFloat(styles.marginRight);\n width += parseFloat(styles.paddingLeft);\n width += parseFloat(styles.paddingRight);\n return width;\n }\n\n private toggleOverflowMenu(): void {\n this.showDropdownMenu = !this.showDropdownMenu;\n if (this.showDropdownMenu){\n this.dropdown.classList.add(\"visible\");\n let contentHeight = 0;\n const items = Array.from(this.dropdown.querySelector(\"slot\").assignedElements());\n items.forEach(item => contentHeight += item.getBoundingClientRect().height);\n const emHeight = parseFloat(getComputedStyle(this.dropdown).fontSize);\n const gapsHeight = emHeight * (this.dropdown.children.length - 1) / 2;\n contentHeight += gapsHeight;\n const marginHeight = emHeight * 2;\n contentHeight += marginHeight;\n this.dropdown.style.height = `${contentHeight}px`;\n const dismissMenu = (e: MouseEvent) => {\n const buttonRect = this.button.getBoundingClientRect();\n if (\n e.clientX < buttonRect.left ||\n e.clientX > buttonRect.right ||\n e.clientY < buttonRect.top ||\n e.clientY > buttonRect.bottom){\n this.toggleOverflowMenu();\n }\n document.removeEventListener(\"click\", dismissMenu);\n };\n setTimeout(() => {\n document.addEventListener(\"click\", dismissMenu, false);\n }, 100);\n }\n else{\n this.dropdown.classList.remove(\"visible\");\n this.dropdown.style.height = \"0px\";\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"menu-container\">\n <div class=\"menu\" ref={el => this.menu = el}>\n <slot></slot>\n </div>\n {this.showDropdownButton &&\n <div class=\"overflow\">\n <button\n ref={el => this.button = el}\n class=\"icon\"\n onClick={() => this.toggleOverflowMenu()}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>\n </button>\n <div class=\"dropdown\" ref={el => this.dropdown = el}>\n <slot name=\"dropdown\"></slot>\n </div>\n </div>\n }\n </div>\n </Host>\n );\n }\n}\n",":host {\n /**\n * @prop --left-pane-background-color: Allows customizing the left pane background-color\n * @prop --right-pane-background-color: Allows customizing the right pane background-color\n */\n\n display: flex;\n align-items: stretch;\n margin: 0 auto;\n position: relative;\n\n --left-pane-background-color: transparent;\n --right-pane-background-color: transparent;\n}\n\nbutton{\n border: none;\n margin:0;\n padding:0;\n cursor: ew-resize;\n position: absolute;\n height: 100%;\n background-color: transparent;\n &.transition{\n transition: all 300ms ease-in-out;\n }\n}\n\n\n.pane{\n overflow-y: auto;\n &.transition{\n transition: all 300ms ease-in-out;\n }\n &.left{\n background-color: var(--left-pane-background-color);\n }\n &.right{\n background-color: var(--right-pane-background-color);\n flex-grow: 1;\n }\n}","import { Component, Host, h, Prop, Element, State, Method, Event, EventEmitter } from '@stencil/core';\nimport { getMovementFromEvent } from \"../../utilities/mouseUtilities\";\n\n/**\n * @slot default - The split divider control you want to use.\n * @slot left - The content of the left pane.\n * @slot right - The content of the right pane.\n */\n@Component({\n tag: 'dnn-vertical-splitview',\n styleUrl: 'dnn-vertical-splitview.scss',\n shadow: true,\n})\nexport class DnnVerticalSplitview {\n\n /** The width of the splitter area. */\n @Prop() splitterWidth = 16;\n\n /** The percentage position of the splitter in the container. */\n @Prop({mutable: true}) splitWidthPercentage = 30;\n \n private splitter!: HTMLButtonElement;\n\n private resizeObserver: ResizeObserver;\n\n /** Sets the width percentage of the divider */\n @Method()\n async setSplitWidthPercentage(newWidth: number) {\n const panes = this.element.shadowRoot.querySelectorAll(\".pane\");\n requestAnimationFrame(() => {\n panes.forEach(pane => pane.classList.add(\"transition\"));\n this.splitter.classList.add(\"transition\");\n requestAnimationFrame(() => {\n const fullWidth = this.element.getBoundingClientRect().width;\n let newLeft = fullWidth * newWidth / 100;\n if (newLeft < 0){\n newLeft = 0;\n }\n if (newLeft > fullWidth){\n newLeft = fullWidth;\n }\n this.leftWidth = newLeft;\n this.rightWidth = fullWidth - newLeft;\n setTimeout(() => {\n panes.forEach(pane => pane.classList.remove(\"transition\"));\n this.splitter.classList.remove(\"transition\");\n }, 300);\n });\n });\n }\n\n /** Gets the current divider position percentage. */\n @Method()\n async getSplitWidthPercentage(){\n const fullWidth = this.element.getBoundingClientRect().width;\n return this.leftWidth / fullWidth;\n }\n\n /** Fires when the width of the divider changes. */\n @Event() widthChanged: EventEmitter<number>;\n\n @State() leftWidth = 0;\n @State() rightWidth = 0;\n\n @Element() element : HTMLDnnVerticalSplitviewElement;\n \n componentDidLoad() {\n requestAnimationFrame(() => {\n this.resizeObserver = new ResizeObserver(() => {\n const fullWidth = this.element.getBoundingClientRect().width;\n this.leftWidth = fullWidth * this.splitWidthPercentage / 100;\n this.rightWidth = fullWidth - this.leftWidth;\n this.widthChanged.emit(this.splitWidthPercentage);\n });\n this.resizeObserver.observe(this.element);\n });\n }\n \n private previousTouch: Touch;\n\n private handleMouseDown(event: MouseEvent | TouchEvent) {\n event.preventDefault();\n const handleDrag = (ev: MouseEvent | TouchEvent) => {\n requestAnimationFrame(() => {\n let fullWidth = this.element.getBoundingClientRect().width;\n let {movementX} = getMovementFromEvent(ev, this.previousTouch);\n let newLeft = this.leftWidth + movementX;\n if (newLeft < 0){\n newLeft = 0;\n }\n if (newLeft > fullWidth){\n newLeft = fullWidth;\n }\n this.leftWidth = newLeft;\n this.rightWidth = fullWidth - newLeft;\n this.splitWidthPercentage = this.leftWidth / fullWidth * 100;\n });\n }\n const handleDragFinished = () => {\n document.removeEventListener(\"mousemove\", handleDrag);\n document.removeEventListener(\"touchmove\", handleDrag);\n const fullWidth = this.element.getBoundingClientRect().width;\n const newPercentage = this.leftWidth / fullWidth * 100;\n this.widthChanged.emit(newPercentage);\n };\n document.addEventListener(\"mouseup\", handleDragFinished);\n document.addEventListener(\"touchend\", handleDragFinished);\n document.addEventListener(\"mousemove\", handleDrag);\n document.addEventListener(\"touchmove\", handleDrag);\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n let movementX = 0;\n switch (e.key) {\n case \"ArrowLeft\":\n movementX = -10;\n break;\n case \"ArrowRight\":\n movementX = 10;\n break;\n default:\n return;\n }\n if (e.shiftKey){\n movementX = movementX * 10;\n }\n const fullWidth = this.element.getBoundingClientRect().width;\n let newLeft = this.leftWidth + movementX;\n if (newLeft < 0){\n newLeft = 0;\n }\n if (newLeft > fullWidth){\n newLeft = fullWidth;\n }\n this.leftWidth = newLeft;\n this.rightWidth = fullWidth - this.leftWidth;\n }\n\n render() {\n return (\n <Host>\n <div class=\"left pane\" style={{\n width: `${this.leftWidth}px`,\n }}>\n <slot name=\"left\"></slot>\n </div>\n <button\n onMouseDown={e => this.handleMouseDown(e)}\n onTouchStart={e => this.handleMouseDown(e)}\n onKeyDown={e => this.handleKeyDown(e)}\n ref={el => this.splitter = el}\n style={{\n minWidth: `${this.splitterWidth.toString()}px`,\n left: `${this.leftWidth - 2}px`,\n }}\n >\n <slot></slot>\n </button>\n <div\n class=\"right pane\"\n style={{\n width: `${this.rightWidth}px`,\n }}>\n <slot name=\"right\"></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- System.register(["./p-b8064287.system.js"],(function(e,t){"use strict";var n,i;return{setters:[function(e){n=e.p;i=e.b}],execute:function(){var e=function(){var e=t.meta.url;var i={};if(e!==""){i.resourcesUrl=new URL(".",e).href}return n(i)};e().then((function(e){return i([["p-3155c8a8.system",[[1,"dnn-permissions-grid",{permissions:[1040],roleGroups:[16],roles:[16],resx:[16],foundUsers:[16],selectedRoleGroupId:[32],userQuery:[32],pickedUser:[32]}],[1,"dnn-image-cropper",{width:[2],height:[2],resx:[16],quality:[2],preventUndersized:[4,"prevent-undersized"],view:[32]}],[1,"dnn-treeview-item",{expanded:[1540],hasChildren:[32]}],[1,"dnn-chevron",{expandText:[1,"expand-text"],collapseText:[1,"collapse-text"],expanded:[1540]}],[1,"dnn-color-picker",{color:[1],colorBoxHeight:[1,"color-box-height"],currentColor:[32],rgbDisplay:[32],hslDisplay:[32],hexDisplay:[32]}],[1,"dnn-sort-icon",{sortDirection:[1,"sort-direction"]}],[1,"dnn-tab",{tabTitle:[1,"tab-title"],visible:[32],show:[64],hide:[64]}],[1,"dnn-tabs",{tabTitles:[32],selectedTabTitle:[32]}],[1,"dnn-toggle",{checked:[1028],disabled:[4]}],[1,"dnn-vertical-overflow-menu",{showDropdownButton:[32],showDropdownMenu:[32]}],[1,"dnn-vertical-splitview",{splitterWidth:[2,"splitter-width"],splitWidthPercentage:[1026,"split-width-percentage"],leftWidth:[32],rightWidth:[32],setSplitWidthPercentage:[64],getSplitWidthPercentage:[64]}],[1,"dnn-checkbox",{checked:[1025],useIntermediate:[4,"use-intermediate"],value:[1]}],[1,"dnn-dropzone",{resx:[16],allowedExtensions:[16],allowCameraMode:[4,"allow-camera-mode"],captureQuality:[2,"capture-quality"],canTakeSnapshots:[32],takingPicture:[32]}],[1,"dnn-searchbox",{placeholder:[1],debounced:[4],query:[1025]}],[1,"dnn-button",{type:[1],reversed:[4],size:[1],confirm:[4],confirmYesText:[1,"confirm-yes-text"],confirmNoText:[1,"confirm-no-text"],confirmMessage:[1,"confirm-message"],disabled:[4],modalVisible:[32]}],[1,"dnn-collapsible",{expanded:[516],transitionDuration:[2,"transition-duration"],updateSize:[64]},[[0,"dnnCollapsibleHeightChanged","handleHeightChanged"]]],[1,"dnn-modal",{backdropDismiss:[4,"backdrop-dismiss"],closeText:[1,"close-text"],showCloseButton:[4,"show-close-button"],visible:[1540],show:[64],hide:[64]}]]]],e)}))}}}));
2
- //# sourceMappingURL=p-5bcf3629.system.js.map
1
+ System.register(["./p-21f18e37.system.js"],(function(e,t){"use strict";var n,i;return{setters:[function(e){n=e.p;i=e.b}],execute:function(){var e=function(){var e=t.meta.url;var i={};if(e!==""){i.resourcesUrl=new URL(".",e).href}return n(i)};e().then((function(e){return i([["p-2a79ad5b.system",[[1,"dnn-permissions-grid",{permissions:[1040],roleGroups:[16],roles:[16],resx:[16],foundUsers:[16],selectedRoleGroupId:[32],userQuery:[32],pickedUser:[32]}],[1,"dnn-image-cropper",{width:[2],height:[2],resx:[16],quality:[2],preventUndersized:[4,"prevent-undersized"],view:[32]}],[1,"dnn-treeview-item",{expanded:[1540],hasChildren:[32]}],[1,"dnn-chevron",{expandText:[1,"expand-text"],collapseText:[1,"collapse-text"],expanded:[1540]}],[1,"dnn-color-picker",{color:[1],colorBoxHeight:[1,"color-box-height"],currentColor:[32],rgbDisplay:[32],hslDisplay:[32],hexDisplay:[32]}],[1,"dnn-sort-icon",{sortDirection:[1,"sort-direction"]}],[1,"dnn-tab",{tabTitle:[1,"tab-title"],visible:[32],show:[64],hide:[64]}],[1,"dnn-tabs",{tabTitles:[32],selectedTabTitle:[32]}],[1,"dnn-toggle",{checked:[1028],disabled:[4]}],[1,"dnn-vertical-overflow-menu",{showDropdownButton:[32],showDropdownMenu:[32]}],[1,"dnn-vertical-splitview",{splitterWidth:[2,"splitter-width"],splitWidthPercentage:[1026,"split-width-percentage"],leftWidth:[32],rightWidth:[32],setSplitWidthPercentage:[64],getSplitWidthPercentage:[64]}],[1,"dnn-checkbox",{checked:[1025],useIntermediate:[4,"use-intermediate"],value:[1]}],[1,"dnn-dropzone",{resx:[16],allowedExtensions:[16],allowCameraMode:[4,"allow-camera-mode"],captureQuality:[2,"capture-quality"],canTakeSnapshots:[32],takingPicture:[32]}],[1,"dnn-searchbox",{placeholder:[1],debounced:[4],query:[1025]}],[1,"dnn-button",{type:[1],reversed:[4],size:[1],confirm:[4],confirmYesText:[1,"confirm-yes-text"],confirmNoText:[1,"confirm-no-text"],confirmMessage:[1,"confirm-message"],disabled:[4],modalVisible:[32]}],[1,"dnn-collapsible",{expanded:[516],transitionDuration:[2,"transition-duration"],updateSize:[64]},[[0,"dnnCollapsibleHeightChanged","handleHeightChanged"]]],[1,"dnn-modal",{backdropDismiss:[4,"backdrop-dismiss"],closeText:[1,"close-text"],showCloseButton:[4,"show-close-button"],visible:[1540],show:[64],hide:[64]}]]]],e)}))}}}));
2
+ //# sourceMappingURL=p-52139080.system.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"names":["patchBrowser","importMeta","module","meta","url","opts","resourcesUrl","URL","href","promiseResolve","then","options","bootstrapLazy","permissions","roleGroups","roles","resx","foundUsers","selectedRoleGroupId","userQuery","pickedUser","width","height","quality","preventUndersized","view","expanded","hasChildren","expandText","collapseText","color","colorBoxHeight","currentColor","rgbDisplay","hslDisplay","hexDisplay","sortDirection","tabTitle","visible","show","hide","tabTitles","selectedTabTitle","checked","disabled","showDropdownButton","showDropdownMenu","splitterWidth","splitWidthPercentage","leftWidth","rightWidth","setSplitWidthPercentage","getSplitWidthPercentage","useIntermediate","value","allowedExtensions","allowCameraMode","captureQuality","canTakeSnapshots","takingPicture","placeholder","debounced","query","type","reversed","size","confirm","confirmYesText","confirmNoText","confirmMessage","modalVisible","transitionDuration","updateSize","backdropDismiss","closeText","showCloseButton"],"mappings":"4IAMA,IAAMA,EAAe,WA6BjB,IAAMC,EAAaC,EAAAC,KAAAC,IACnB,IAAMC,EAA6D,GAenE,GAAuBJ,IAAe,GAAI,CACtCI,EAAKC,aAAe,IAAIC,IAAI,IAAKN,GAAYO,KAajD,OAAOC,EAAeJ,IC9D1BL,IAAeU,MAAK,SAAAC,GAElB,OAAOC,EAAc,CAAA,CAAA,oBAAA,CAAA,CAAA,EAAA,uBAAuC,CAAAC,YAAA,CAAA,MAAAC,WAAA,CAAA,IAAAC,MAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,oBAAA,CAAA,IAAAC,UAAA,CAAA,IAAAC,WAAA,CAAA,MAAA,CAAA,EAAA,oBAAA,CAAAC,MAAA,CAAA,GAAAC,OAAA,CAAA,GAAAN,KAAA,CAAA,IAAAO,QAAA,CAAA,GAAAC,kBAAA,CAAA,EAAA,sBAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,oBAAA,CAAAC,SAAA,CAAA,MAAAC,YAAA,CAAA,MAAA,CAAA,EAAA,cAAA,CAAAC,WAAA,CAAA,EAAA,eAAAC,aAAA,CAAA,EAAA,iBAAAH,SAAA,CAAA,QAAA,CAAA,EAAA,mBAAA,CAAAI,MAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,aAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAAC,cAAA,CAAA,EAAA,oBAAA,CAAA,EAAA,UAAA,CAAAC,SAAA,CAAA,EAAA,aAAAC,QAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,WAAA,CAAAC,UAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,aAAA,CAAAC,QAAA,CAAA,MAAAC,SAAA,CAAA,KAAA,CAAA,EAAA,6BAAA,CAAAC,mBAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,yBAAA,CAAAC,cAAA,CAAA,EAAA,kBAAAC,qBAAA,CAAA,KAAA,0BAAAC,UAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,wBAAA,CAAA,IAAAC,wBAAA,CAAA,MAAA,CAAA,EAAA,eAAA,CAAAT,QAAA,CAAA,MAAAU,gBAAA,CAAA,EAAA,oBAAAC,MAAA,CAAA,KAAA,CAAA,EAAA,eAAA,CAAAtC,KAAA,CAAA,IAAAuC,kBAAA,CAAA,IAAAC,gBAAA,CAAA,EAAA,qBAAAC,eAAA,CAAA,EAAA,mBAAAC,iBAAA,CAAA,IAAAC,cAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAAC,YAAA,CAAA,GAAAC,UAAA,CAAA,GAAAC,MAAA,CAAA,QAAA,CAAA,EAAA,aAAA,CAAAC,KAAA,CAAA,GAAAC,SAAA,CAAA,GAAAC,KAAA,CAAA,GAAAC,QAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,cAAA,CAAA,EAAA,mBAAAC,eAAA,CAAA,EAAA,mBAAAzB,SAAA,CAAA,GAAA0B,aAAA,CAAA,MAAA,CAAA,EAAA,kBAAA,CAAA5C,SAAA,CAAA,KAAA6C,mBAAA,CAAA,EAAA,uBAAAC,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,8BAAA,yBAAA,CAAA,EAAA,YAAA,CAAAC,gBAAA,CAAA,EAAA,oBAAAC,UAAA,CAAA,EAAA,cAAAC,gBAAA,CAAA,EAAA,qBAAArC,QAAA,CAAA,MAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,SAAA7B","sourcesContent":["/*\n Stencil Client Patch Browser v2.14.2 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n if (BUILD.cssVarShim) {\n // shim css vars\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,\n // simply stub the implementations out.\n // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)\n // @ts-ignore\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","import { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"]}
1
+ {"version":3,"sources":["node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"names":["patchBrowser","importMeta","module","meta","url","opts","resourcesUrl","URL","href","promiseResolve","then","options","bootstrapLazy","permissions","roleGroups","roles","resx","foundUsers","selectedRoleGroupId","userQuery","pickedUser","width","height","quality","preventUndersized","view","expanded","hasChildren","expandText","collapseText","color","colorBoxHeight","currentColor","rgbDisplay","hslDisplay","hexDisplay","sortDirection","tabTitle","visible","show","hide","tabTitles","selectedTabTitle","checked","disabled","showDropdownButton","showDropdownMenu","splitterWidth","splitWidthPercentage","leftWidth","rightWidth","setSplitWidthPercentage","getSplitWidthPercentage","useIntermediate","value","allowedExtensions","allowCameraMode","captureQuality","canTakeSnapshots","takingPicture","placeholder","debounced","query","type","reversed","size","confirm","confirmYesText","confirmNoText","confirmMessage","modalVisible","transitionDuration","updateSize","backdropDismiss","closeText","showCloseButton"],"mappings":"4IAMA,IAAMA,EAAe,WA6BjB,IAAMC,EAAaC,EAAAC,KAAAC,IACnB,IAAMC,EAA6D,GAenE,GAAuBJ,IAAe,GAAI,CACtCI,EAAKC,aAAe,IAAIC,IAAI,IAAKN,GAAYO,KAajD,OAAOC,EAAeJ,IC9D1BL,IAAeU,MAAK,SAAAC,GAElB,OAAOC,EAAc,CAAA,CAAA,oBAAA,CAAA,CAAA,EAAA,uBAAuC,CAAAC,YAAA,CAAA,MAAAC,WAAA,CAAA,IAAAC,MAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,oBAAA,CAAA,IAAAC,UAAA,CAAA,IAAAC,WAAA,CAAA,MAAA,CAAA,EAAA,oBAAA,CAAAC,MAAA,CAAA,GAAAC,OAAA,CAAA,GAAAN,KAAA,CAAA,IAAAO,QAAA,CAAA,GAAAC,kBAAA,CAAA,EAAA,sBAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,oBAAA,CAAAC,SAAA,CAAA,MAAAC,YAAA,CAAA,MAAA,CAAA,EAAA,cAAA,CAAAC,WAAA,CAAA,EAAA,eAAAC,aAAA,CAAA,EAAA,iBAAAH,SAAA,CAAA,QAAA,CAAA,EAAA,mBAAA,CAAAI,MAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,aAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAAC,cAAA,CAAA,EAAA,oBAAA,CAAA,EAAA,UAAA,CAAAC,SAAA,CAAA,EAAA,aAAAC,QAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,WAAA,CAAAC,UAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,aAAA,CAAAC,QAAA,CAAA,MAAAC,SAAA,CAAA,KAAA,CAAA,EAAA,6BAAA,CAAAC,mBAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,yBAAA,CAAAC,cAAA,CAAA,EAAA,kBAAAC,qBAAA,CAAA,KAAA,0BAAAC,UAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,wBAAA,CAAA,IAAAC,wBAAA,CAAA,MAAA,CAAA,EAAA,eAAA,CAAAT,QAAA,CAAA,MAAAU,gBAAA,CAAA,EAAA,oBAAAC,MAAA,CAAA,KAAA,CAAA,EAAA,eAAA,CAAAtC,KAAA,CAAA,IAAAuC,kBAAA,CAAA,IAAAC,gBAAA,CAAA,EAAA,qBAAAC,eAAA,CAAA,EAAA,mBAAAC,iBAAA,CAAA,IAAAC,cAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAAC,YAAA,CAAA,GAAAC,UAAA,CAAA,GAAAC,MAAA,CAAA,QAAA,CAAA,EAAA,aAAA,CAAAC,KAAA,CAAA,GAAAC,SAAA,CAAA,GAAAC,KAAA,CAAA,GAAAC,QAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,cAAA,CAAA,EAAA,mBAAAC,eAAA,CAAA,EAAA,mBAAAzB,SAAA,CAAA,GAAA0B,aAAA,CAAA,MAAA,CAAA,EAAA,kBAAA,CAAA5C,SAAA,CAAA,KAAA6C,mBAAA,CAAA,EAAA,uBAAAC,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,8BAAA,yBAAA,CAAA,EAAA,YAAA,CAAAC,gBAAA,CAAA,EAAA,oBAAAC,UAAA,CAAA,EAAA,cAAAC,gBAAA,CAAA,EAAA,qBAAArC,QAAA,CAAA,MAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,SAAA7B","sourcesContent":["/*\n Stencil Client Patch Browser v2.18.1 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n if (BUILD.cssVarShim) {\n // shim css vars\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,\n // simply stub the implementations out.\n // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)\n // @ts-ignore\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","import { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"]}