diff --git a/.eslintrc b/.eslintrc
index 0f2940f2..2dbf04ce 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -11,7 +11,8 @@
"globals": {
"flatpickr": true,
"Slick": true,
- "Sortable": true
+ "Sortable": true,
+ "IIFE_ONLY": true
},
"rules": {
"cypress/no-unnecessary-waiting": "off",
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 90d51dd2..89e52a0f 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -47,9 +47,14 @@ jobs:
- name: Install npm dependencies
run: npm install
+ - name: Prod Build
+ run: npm run build:prod
+
+ - name: Start HTTP Server
+ run: npm run serve:demo &
+
- name: Run Cypress E2E tests
- uses: cypress-io/github-action@v4
+ uses: cypress-io/github-action@v5
with:
- start: npm run serve
- wait-on: 'http://localhost:8080'
+ # wait-on: 'http://localhost:8080'
browser: chrome
diff --git a/.gitignore b/.gitignore
index 504bc200..617c74bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,5 @@ SlickgridRelease*
nuget*
testresult.xml
yarn-error.log
-yarn.lock
\ No newline at end of file
+yarn.lock
+tsconfig.tsbuildinfo
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
index 0350c63d..17aa9135 100644
--- a/.npmignore
+++ b/.npmignore
@@ -14,8 +14,11 @@ CODE_OF_CONDUCT.md
nuget*
cypress.json
cypress/*
+lib
+node_modules
examples
SlickgridRelease*
+scripts
tests
testresult.xml
package-lock.json
diff --git a/LICENSE b/LICENSE
index be71f9eb..95b19673 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2009-2019 Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid
+Copyright (c) 2009-present Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/css/bootstrap.css b/css/bootstrap.css
deleted file mode 100644
index 16df19dc..00000000
--- a/css/bootstrap.css
+++ /dev/null
@@ -1,6566 +0,0 @@
-/*!
- * Bootstrap v3.3.2 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- margin: .67em 0;
- font-size: 2em;
-}
-mark {
- color: #000;
- background: #ff0;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -.5em;
-}
-sub {
- bottom: -.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- height: 0;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font: inherit;
- color: inherit;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- padding: .35em .625em .75em;
- margin: 0 2px;
- border: 1px solid #c0c0c0;
-}
-legend {
- padding: 0;
- border: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-td,
-th {
- padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
- *,
- *:before,
- *:after {
- color: #000 !important;
- text-shadow: none !important;
- background: transparent !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
-
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- select {
- background: #fff !important;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before,
-.glyphicon-eur:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-.glyphicon-cd:before {
- content: "\e201";
-}
-.glyphicon-save-file:before {
- content: "\e202";
-}
-.glyphicon-open-file:before {
- content: "\e203";
-}
-.glyphicon-level-up:before {
- content: "\e204";
-}
-.glyphicon-copy:before {
- content: "\e205";
-}
-.glyphicon-paste:before {
- content: "\e206";
-}
-.glyphicon-alert:before {
- content: "\e209";
-}
-.glyphicon-equalizer:before {
- content: "\e210";
-}
-.glyphicon-king:before {
- content: "\e211";
-}
-.glyphicon-queen:before {
- content: "\e212";
-}
-.glyphicon-pawn:before {
- content: "\e213";
-}
-.glyphicon-bishop:before {
- content: "\e214";
-}
-.glyphicon-knight:before {
- content: "\e215";
-}
-.glyphicon-baby-formula:before {
- content: "\e216";
-}
-.glyphicon-tent:before {
- content: "\26fa";
-}
-.glyphicon-blackboard:before {
- content: "\e218";
-}
-.glyphicon-bed:before {
- content: "\e219";
-}
-.glyphicon-apple:before {
- content: "\f8ff";
-}
-.glyphicon-erase:before {
- content: "\e221";
-}
-.glyphicon-hourglass:before {
- content: "\231b";
-}
-.glyphicon-lamp:before {
- content: "\e223";
-}
-.glyphicon-duplicate:before {
- content: "\e224";
-}
-.glyphicon-piggy-bank:before {
- content: "\e225";
-}
-.glyphicon-scissors:before {
- content: "\e226";
-}
-.glyphicon-bitcoin:before {
- content: "\e227";
-}
-.glyphicon-yen:before {
- content: "\00a5";
-}
-.glyphicon-ruble:before {
- content: "\20bd";
-}
-.glyphicon-scale:before {
- content: "\e230";
-}
-.glyphicon-ice-lolly:before {
- content: "\e231";
-}
-.glyphicon-ice-lolly-tasted:before {
- content: "\e232";
-}
-.glyphicon-education:before {
- content: "\e233";
-}
-.glyphicon-option-horizontal:before {
- content: "\e234";
-}
-.glyphicon-option-vertical:before {
- content: "\e235";
-}
-.glyphicon-menu-hamburger:before {
- content: "\e236";
-}
-.glyphicon-modal-window:before {
- content: "\e237";
-}
-.glyphicon-oil:before {
- content: "\e238";
-}
-.glyphicon-grain:before {
- content: "\e239";
-}
-.glyphicon-sunglasses:before {
- content: "\e240";
-}
-.glyphicon-text-size:before {
- content: "\e241";
-}
-.glyphicon-text-color:before {
- content: "\e242";
-}
-.glyphicon-text-background:before {
- content: "\e243";
-}
-.glyphicon-object-align-top:before {
- content: "\e244";
-}
-.glyphicon-object-align-bottom:before {
- content: "\e245";
-}
-.glyphicon-object-align-horizontal:before {
- content: "\e246";
-}
-.glyphicon-object-align-left:before {
- content: "\e247";
-}
-.glyphicon-object-align-vertical:before {
- content: "\e248";
-}
-.glyphicon-object-align-right:before {
- content: "\e249";
-}
-.glyphicon-triangle-right:before {
- content: "\e250";
-}
-.glyphicon-triangle-left:before {
- content: "\e251";
-}
-.glyphicon-triangle-bottom:before {
- content: "\e252";
-}
-.glyphicon-triangle-top:before {
- content: "\e253";
-}
-.glyphicon-console:before {
- content: "\e254";
-}
-.glyphicon-superscript:before {
- content: "\e255";
-}
-.glyphicon-subscript:before {
- content: "\e256";
-}
-.glyphicon-menu-left:before {
- content: "\e257";
-}
-.glyphicon-menu-right:before {
- content: "\e258";
-}
-.glyphicon-menu-down:before {
- content: "\e259";
-}
-.glyphicon-menu-up:before {
- content: "\e260";
-}
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
-
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333;
- background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #337ab7;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- display: inline-block;
- max-width: 100%;
- height: auto;
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 2px;
- border: 0;
- border-top: 1px solid #eee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 36px;
-}
-h2,
-.h2 {
- font-size: 30px;
-}
-h3,
-.h3 {
- font-size: 24px;
-}
-h4,
-.h4 {
- font-size: 18px;
-}
-h5,
-.h5 {
- font-size: 14px;
-}
-h6,
-.h6 {
- font-size: 12px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-mark,
-.mark {
- padding: .2em;
- background-color: #fcf8e3;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777;
-}
-.text-primary {
- color: #337ab7;
-}
-a.text-primary:hover {
- color: #286090;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #337ab7;
-}
-a.bg-primary:hover {
- background-color: #286090;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 40px 0 20px;
- border-bottom: 1px solid #eee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- margin-left: -5px;
- list-style: none;
-}
-.list-inline > li {
- display: inline-block;
- padding-right: 5px;
- padding-left: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- text-align: right;
- border-right: 5px solid #eee;
- border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #fff;
- background-color: #333;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- padding-right: 15px;
- padding-left: 5px;
- margin-right: auto;
- margin-left: auto;
-}
-.row {
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-table {
- background-color: transparent;
-}
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777;
- text-align: left;
-}
-th {
- text-align: left;
-}
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table .table {
- background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- display: table-column;
- float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- display: table-cell;
- float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-.table-responsive {
- min-height: .01%;
- overflow-x: auto;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
-}
-.form-control {
- display: block;
- width: 100%;
- /* height: 34px; */
- padding: 1px 12px; /* mod */
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #999;
-}
-.form-control::-webkit-input-placeholder {
- color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
- background-color: #eee;
- opacity: 1;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 34px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 46px;
- }
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-top: 4px \9;
- margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- vertical-align: middle;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-right: 0;
- padding-left: 0;
-}
-.input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
- height: auto;
-}
-.form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.form-group-sm .form-control {
- height: 30px;
- line-height: 30px;
-}
-textarea.form-group-sm .form-control,
-select[multiple].form-group-sm .form-control {
- height: auto;
-}
-.form-group-sm .form-control-static {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
-}
-.input-lg {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-lg {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
- height: auto;
-}
-.form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.form-group-lg .form-control {
- height: 46px;
- line-height: 46px;
-}
-textarea.form-group-lg .form-control,
-select[multiple].form-group-lg .form-control {
- height: auto;
-}
-.form-group-lg .form-control-static {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
- pointer-events: none;
-}
-.input-lg + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #3c763d;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- background-color: #f2dede;
- border-color: #a94442;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
- top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- padding-top: 7px;
- margin-top: 0;
- margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .control-label {
- padding-top: 7px;
- margin-bottom: 0;
- text-align: right;
- }
-}
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.333333px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-.btn {
- display: inline-block;
- padding: 1px 12px; /* mod */
- margin-bottom: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- opacity: .65;
-}
-.btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-.btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary.focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success.focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
-}
-.btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info.focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
-}
-.btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning.focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
-}
-.btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger.focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
-}
-.btn-link {
- font-weight: normal;
- color: #337ab7;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity .15s linear;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
- visibility: hidden;
-}
-.collapse.in {
- display: block;
- visibility: visible;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
- -webkit-transition-duration: .35s;
- -o-transition-duration: .35s;
- transition-duration: .35s;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px solid;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- text-align: left;
- list-style: none;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #337ab7;
- outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- content: "";
- border-top: 0;
- border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- right: 0;
- left: auto;
- }
- .navbar-right .dropdown-menu-left {
- right: auto;
- left: 0;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-right: 8px;
- padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-right: 12px;
- padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- display: table-cell;
- float: none;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-right: 0;
- padding-left: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555;
- text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- margin-left: -1px;
-}
-.nav {
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.nav > li {
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.nav > li.disabled > a {
- color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777;
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eee;
- border-color: #337ab7;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555;
- cursor: default;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #337ab7;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.tab-content > .tab-pane {
- display: none;
- visibility: hidden;
-}
-.tab-content > .active {
- display: block;
- visibility: visible;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 30px; /* mod */
- margin-bottom: 0px; /* mod */
- border: 1px solid transparent;
-}
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-.navbar-collapse {
- padding-right: 15px;
- padding-left: 15px;
- overflow-x: visible;
- -webkit-overflow-scrolling: touch;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- visibility: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-right: 0;
- padding-left: 0;
- }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- height: 30px; /* mod */
- padding: 3px 5px 2px 0;
- font-size: 18px;
- line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-.navbar-brand > img {
- display: block;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- padding: 9px 10px;
- margin-top: 8px;
- margin-right: 15px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-@media (min-width: 768px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 5px; /* mod */
- padding-bottom: 5px; /* mod */
- }
-}
-.navbar-form {
- padding: 10px 15px;
- margin-top: 3px; /* mod */
- margin-right: -15px;
- margin-bottom: 3px; /* mod */
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- padding-top: 0;
- padding-bottom: 0;
- margin-right: 0;
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
-}
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-@media (min-width: 768px) {
- .navbar-text {
- float: left;
- margin-right: 15px;
- margin-left: 15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- margin-right: -15px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
-}
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777;
-}
-.navbar-default .navbar-link:hover {
- color: #333;
-}
-.navbar-default .btn-link {
- color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-.navbar-inverse {
- background-color: #222;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #080808;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-.navbar-inverse .btn-link {
- color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- padding: 0 5px;
- color: #ccc;
- content: "/\00a0";
-}
-.breadcrumb > .active {
- color: #777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- margin-left: -1px;
- line-height: 1.42857143;
- color: #337ab7;
- text-decoration: none;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- color: #23527c;
- background-color: #eee;
- border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 2;
- color: #fff;
- cursor: default;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
- border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- text-align: center;
- list-style: none;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #337ab7;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #286090;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- padding: 30px 15px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding: 48px 0;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: border .2s ease-in-out;
- -o-transition: border .2s ease-in-out;
- transition: border .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-right: auto;
- margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #337ab7;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333;
-}
-.alert {
- padding: 15px;
- margin-bottom: 20px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f5f5f5;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- -webkit-transition: width .6s ease;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media,
-.media-body {
- overflow: hidden;
- zoom: 1;
-}
-.media-body {
- width: 10000px;
-}
-.media-object {
- display: block;
-}
-.media-right,
-.media > .pull-right {
- padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
- padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-.media-middle {
- vertical-align: middle;
-}
-.media-bottom {
- vertical-align: bottom;
-}
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- padding-left: 0;
- margin-bottom: 20px;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.list-group-item:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-a.list-group-item {
- color: #555;
-}
-a.list-group-item .list-group-item-heading {
- color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
- color: #555;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a,
-.panel-title > small,
-.panel-title > .small,
-.panel-title > small > a,
-.panel-title > .small > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
- padding-right: 15px;
- padding-left: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- margin-bottom: 0;
- border: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
-}
-.panel-default {
- border-color: #ddd;
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
-}
-.panel-primary {
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
-}
-.panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-.embed-responsive.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- filter: alpha(opacity=20);
- opacity: .2;
-}
-.close:hover,
-.close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- filter: alpha(opacity=50);
- opacity: .5;
-}
-button.close {
- -webkit-appearance: none;
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- display: none;
- overflow: hidden;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out;
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- background-color: #000;
-}
-.modal-backdrop.fade {
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.modal-backdrop.in {
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.modal-header {
- min-height: 16.42857143px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 12px;
- font-weight: normal;
- line-height: 1.4;
- visibility: visible;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.tooltip.in {
- filter: alpha(opacity=90);
- opacity: .9;
-}
-.tooltip.top {
- padding: 5px 0;
- margin-top: -3px;
-}
-.tooltip.right {
- padding: 0 5px;
- margin-left: 3px;
-}
-.tooltip.bottom {
- padding: 5px 0;
- margin-top: 3px;
-}
-.tooltip.left {
- padding: 0 5px;
- margin-left: -3px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- text-decoration: none;
- background-color: #000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
- right: 5px;
- bottom: 0;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: left;
- white-space: normal;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- content: "";
- border-width: 10px;
-}
-.popover.top > .arrow {
- bottom: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, .25);
- border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- content: " ";
- border-top-color: #fff;
- border-bottom-width: 0;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, .25);
- border-left-width: 0;
-}
-.popover.right > .arrow:after {
- bottom: -10px;
- left: 1px;
- content: " ";
- border-right-color: #fff;
- border-left-width: 0;
-}
-.popover.bottom > .arrow {
- top: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
- top: 1px;
- margin-left: -10px;
- content: " ";
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
- right: 1px;
- bottom: -10px;
- content: " ";
- border-right-width: 0;
- border-left-color: #fff;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-.carousel-inner > .item {
- position: relative;
- display: none;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-@media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform .6s ease-in-out;
- -o-transition: -o-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
-
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- left: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- left: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- left: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 15%;
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control.right {
- right: 0;
- left: auto;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #fff;
- text-decoration: none;
- filter: alpha(opacity=90);
- outline: 0;
- opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
- line-height: 1;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- padding-left: 0;
- margin-left: -30%;
- text-align: center;
- list-style: none;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- border: 1px solid #fff;
- border-radius: 10px;
-}
-.carousel-indicators .active {
- width: 12px;
- height: 12px;
- margin: 0;
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
- .carousel-caption {
- right: 20%;
- left: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-right: auto;
- margin-left: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-.affix {
- position: fixed;
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 3613910b..00000000
Binary files a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100644
index ad8c5ea1..00000000
Binary files a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100644
index 58275685..00000000
Binary files a/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index a95f3cd1..00000000
Binary files a/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100644
index 3b1d985f..00000000
Binary files a/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100644
index 80dc68f7..00000000
Binary files a/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
deleted file mode 100644
index f00a5c76..00000000
Binary files a/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644
index a5d9c30e..00000000
Binary files a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ
diff --git a/css/smoothness/images/ui-icons_222222_256x240.png b/css/smoothness/images/ui-icons_222222_256x240.png
deleted file mode 100644
index 24de7955..00000000
Binary files a/css/smoothness/images/ui-icons_222222_256x240.png and /dev/null differ
diff --git a/css/smoothness/images/ui-icons_2e83ff_256x240.png b/css/smoothness/images/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index a2980c8e..00000000
Binary files a/css/smoothness/images/ui-icons_2e83ff_256x240.png and /dev/null differ
diff --git a/css/smoothness/images/ui-icons_454545_256x240.png b/css/smoothness/images/ui-icons_454545_256x240.png
deleted file mode 100644
index e7687a37..00000000
Binary files a/css/smoothness/images/ui-icons_454545_256x240.png and /dev/null differ
diff --git a/css/smoothness/images/ui-icons_888888_256x240.png b/css/smoothness/images/ui-icons_888888_256x240.png
deleted file mode 100644
index a85f2c4e..00000000
Binary files a/css/smoothness/images/ui-icons_888888_256x240.png and /dev/null differ
diff --git a/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/css/smoothness/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 7af13a60..00000000
Binary files a/css/smoothness/images/ui-icons_cd0a0a_256x240.png and /dev/null differ
diff --git a/css/smoothness/jquery-ui-1.11.3.custom.css b/css/smoothness/jquery-ui-1.11.3.custom.css
deleted file mode 100644
index 06cd80c6..00000000
--- a/css/smoothness/jquery-ui-1.11.3.custom.css
+++ /dev/null
@@ -1,1225 +0,0 @@
-/*! jQuery UI - v1.11.3 - 2015-02-27
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-clearfix {
- min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- min-height: 0; /* support: IE7 */
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
- width: 2.4em;
-}
-.ui-button-icons-only {
- width: 3.4em;
-}
-button.ui-button-icons-only {
- width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
- display: block;
- line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
- padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
- left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
- right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
- margin-right: 7px;
-}
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-.ui-dialog {
- overflow: hidden;
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: none;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- position: relative;
- margin: 0;
- padding: 3px 1em 3px .4em;
- cursor: pointer;
- min-height: 0; /* support: IE7 */
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-progressbar {
- height: 2em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,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");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- /* Support: IE7 */
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-button {
- display: inline-block;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- cursor: pointer;
-}
-.ui-selectmenu-button span.ui-icon {
- right: 0.5em;
- left: auto;
- margin-top: -8px;
- position: absolute;
- top: 50%;
-}
-.ui-selectmenu-button span.ui-selectmenu-text {
- text-align: left;
- padding: 0.4em 2.1em 0.4em 1em;
- display: block;
- line-height: 1.4;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px;
-}
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
- /* need to fix icons sprite */
- background-position: -65px -16px;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Verdana,Arial,sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Verdana,Arial,sans-serif;
- font-size: 1em;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
- color: #222222;
-}
-.ui-widget-content a {
- color: #222222;
-}
-.ui-widget-header {
- border: 1px solid #aaaaaa;
- background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
- color: #222222;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #222222;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
- border: 1px solid #d3d3d3;
- background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #555555;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
- color: #555555;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
- border: 1px solid #999999;
- background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #212121;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
- color: #212121;
- text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
- border: 1px solid #aaaaaa;
- background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #212121;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #212121;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #fcefa1;
- background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
- color: #363636;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #363636;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #cd0a0a;
- background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
- color: #cd0a0a;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #cd0a0a;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #cd0a0a;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-state-default .ui-icon {
- background-image: url("images/ui-icons_888888_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
- background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-active .ui-icon {
- background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon {
- background-image: url("images/ui-icons_2e83ff_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("images/ui-icons_cd0a0a_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 4px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .3;
- filter: Alpha(Opacity=30); /* support: IE8 */
-}
-.ui-widget-shadow {
- margin: -8px 0 0 -8px;
- padding: 8px;
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
- opacity: .3;
- filter: Alpha(Opacity=30); /* support: IE8 */
- border-radius: 8px;
-}
diff --git a/css/smoothness/jquery-ui-1.11.3.custom.min.css b/css/smoothness/jquery-ui-1.11.3.custom.min.css
deleted file mode 100644
index 208ac779..00000000
--- a/css/smoothness/jquery-ui-1.11.3.custom.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.3 - 2015-02-27
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
diff --git a/css/smoothness/jquery-ui.css b/css/smoothness/jquery-ui.css
deleted file mode 100644
index 294452f1..00000000
--- a/css/smoothness/jquery-ui.css
+++ /dev/null
@@ -1,1311 +0,0 @@
-/*! jQuery UI - v1.12.1 - 2016-09-14
-* http://jqueryui.com
-* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
- display: none;
-}
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
- clear: both;
-}
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
- z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
- cursor: default !important;
- pointer-events: none;
-}
-
-
-/* Icons
-----------------------------------*/
-.ui-icon {
- display: inline-block;
- vertical-align: middle;
- margin-top: -.25em;
- position: relative;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-.ui-widget-icon-block {
- left: 50%;
- margin-left: -8px;
- display: block;
-}
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin: 2px 0 0 0;
- padding: .5em .5em .5em .7em;
- font-size: 100%;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto;
-}
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default;
-}
-.ui-menu {
- list-style: none;
- padding: 0;
- margin: 0;
- display: block;
- outline: 0;
-}
-.ui-menu .ui-menu {
- position: absolute;
-}
-.ui-menu .ui-menu-item {
- margin: 0;
- cursor: pointer;
- /* support: IE10, see #8844 */
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-item-wrapper {
- position: relative;
- padding: 3px 1em 3px .4em;
-}
-.ui-menu .ui-menu-divider {
- margin: 5px 0;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
- margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
- position: relative;
-}
-.ui-menu-icons .ui-menu-item-wrapper {
- padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
- position: absolute;
- top: 0;
- bottom: 0;
- left: .2em;
- margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
- left: auto;
- right: 0;
-}
-.ui-button {
- padding: .4em 1em;
- display: inline-block;
- position: relative;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-
- /* Support: IE <= 11 */
- overflow: visible;
-}
-
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
- text-decoration: none;
-}
-
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
- width: 2em;
- box-sizing: border-box;
- text-indent: -9999px;
- white-space: nowrap;
-}
-
-/* no icon support for input elements */
-input.ui-button.ui-button-icon-only {
- text-indent: 0;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon {
- position: absolute;
- top: 50%;
- left: 50%;
- margin-top: -8px;
- margin-left: -8px;
-}
-
-.ui-button.ui-icon-notext .ui-icon {
- padding: 0;
- width: 2.1em;
- height: 2.1em;
- text-indent: -9999px;
- white-space: nowrap;
-
-}
-
-input.ui-button.ui-icon-notext .ui-icon {
- width: auto;
- height: auto;
- text-indent: 0;
- white-space: normal;
- padding: .4em 1em;
-}
-
-/* workarounds */
-/* Support: Firefox 5 - 40 */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-.ui-controlgroup {
- vertical-align: middle;
- display: inline-block;
-}
-.ui-controlgroup > .ui-controlgroup-item {
- float: left;
- margin-left: 0;
- margin-right: 0;
-}
-.ui-controlgroup > .ui-controlgroup-item:focus,
-.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
- z-index: 9999;
-}
-.ui-controlgroup-vertical > .ui-controlgroup-item {
- display: block;
- float: none;
- width: 100%;
- margin-top: 0;
- margin-bottom: 0;
- text-align: left;
-}
-.ui-controlgroup-vertical .ui-controlgroup-item {
- box-sizing: border-box;
-}
-.ui-controlgroup .ui-controlgroup-label {
- padding: .4em 1em;
-}
-.ui-controlgroup .ui-controlgroup-label span {
- font-size: 80%;
-}
-.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
- border-left: none;
-}
-.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
- border-top: none;
-}
-.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
- border-right: none;
-}
-.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
- border-bottom: none;
-}
-
-/* Spinner specific style fixes */
-.ui-controlgroup-vertical .ui-spinner-input {
-
- /* Support: IE8 only, Android < 4.4 only */
- width: 75%;
- width: calc( 100% - 2.4em );
-}
-.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
- border-top-style: solid;
-}
-
-.ui-checkboxradio-label .ui-icon-background {
- box-shadow: inset 1px 1px 1px #ccc;
- border-radius: .12em;
- border: none;
-}
-.ui-checkboxradio-radio-label .ui-icon-background {
- width: 16px;
- height: 16px;
- border-radius: 1em;
- overflow: visible;
- border: none;
-}
-.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
-.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
- background-image: none;
- width: 8px;
- height: 8px;
- border-width: 4px;
- border-style: solid;
-}
-.ui-checkboxradio-disabled {
- pointer-events: none;
-}
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none;
-}
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0;
-}
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
- top: 1px;
-}
-.ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-.ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
-}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 45%;
-}
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em;
-}
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0;
-}
-.ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-.ui-datepicker td span,
-.ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none;
-}
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
-}
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible;
-}
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left;
-}
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi {
- width: auto;
-}
-.ui-datepicker-multi .ui-datepicker-group {
- float: left;
-}
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em;
-}
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%;
-}
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%;
-}
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%;
-}
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0;
-}
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left;
-}
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0;
-}
-
-/* RTL support */
-.ui-datepicker-rtl {
- direction: rtl;
-}
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left;
-}
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
-.ui-datepicker-rtl .ui-datepicker-group {
- float: right;
-}
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px;
-}
-
-/* Icons */
-.ui-datepicker .ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
- left: .5em;
- top: .3em;
-}
-.ui-dialog {
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative;
-}
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 20px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px;
-}
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer;
-}
-.ui-dialog .ui-resizable-n {
- height: 2px;
- top: 0;
-}
-.ui-dialog .ui-resizable-e {
- width: 2px;
- right: 0;
-}
-.ui-dialog .ui-resizable-s {
- height: 2px;
- bottom: 0;
-}
-.ui-dialog .ui-resizable-w {
- width: 2px;
- left: 0;
-}
-.ui-dialog .ui-resizable-se,
-.ui-dialog .ui-resizable-sw,
-.ui-dialog .ui-resizable-ne,
-.ui-dialog .ui-resizable-nw {
- width: 7px;
- height: 7px;
-}
-.ui-dialog .ui-resizable-se {
- right: 0;
- bottom: 0;
-}
-.ui-dialog .ui-resizable-sw {
- left: 0;
- bottom: 0;
-}
-.ui-dialog .ui-resizable-ne {
- right: 0;
- top: 0;
-}
-.ui-dialog .ui-resizable-nw {
- left: 0;
- top: 0;
-}
-.ui-draggable .ui-dialog-titlebar {
- cursor: move;
-}
-.ui-draggable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable {
- position: relative;
-}
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
- display: none;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0;
-}
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px;
-}
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px;
-}
-.ui-progressbar {
- height: 2em;
- text-align: left;
- overflow: hidden;
-}
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%;
-}
-.ui-progressbar .ui-progressbar-overlay {
- background: url("data:image/gif;base64,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");
- height: 100%;
- filter: alpha(opacity=25); /* support: IE8 */
- opacity: 0.25;
-}
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none;
-}
-.ui-selectable {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black;
-}
-.ui-selectmenu-menu {
- padding: 0;
- margin: 0;
- position: absolute;
- top: 0;
- left: 0;
- display: none;
-}
-.ui-selectmenu-menu .ui-menu {
- overflow: auto;
- overflow-x: hidden;
- padding-bottom: 1px;
-}
-.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
- font-size: 1em;
- font-weight: bold;
- line-height: 1.5;
- padding: 2px 0.4em;
- margin: 0.5em 0 0 0;
- height: auto;
- border: 0;
-}
-.ui-selectmenu-open {
- display: block;
-}
-.ui-selectmenu-text {
- display: block;
- margin-right: 20px;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.ui-selectmenu-button.ui-button {
- text-align: left;
- white-space: nowrap;
- width: 14em;
-}
-.ui-selectmenu-icon.ui-icon {
- float: right;
- margin-top: 0;
-}
-.ui-slider {
- position: relative;
- text-align: left;
-}
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default;
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0;
-}
-
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit;
-}
-
-.ui-slider-horizontal {
- height: .8em;
-}
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em;
-}
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%;
-}
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0;
-}
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0;
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px;
-}
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em;
-}
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%;
-}
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0;
-}
-.ui-slider-vertical .ui-slider-range-max {
- top: 0;
-}
-.ui-sortable-handle {
- -ms-touch-action: none;
- touch-action: none;
-}
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle;
-}
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: .222em 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 2em;
-}
-.ui-spinner-button {
- width: 1.6em;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
- border-top-style: none;
- border-bottom-style: none;
- border-right-style: none;
-}
-.ui-spinner-up {
- top: 0;
-}
-.ui-spinner-down {
- bottom: 0;
-}
-.ui-tabs {
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
- padding: .2em;
-}
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap;
-}
-.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
- float: left;
- padding: .5em 1em;
- text-decoration: none;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
- cursor: text;
-}
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
- cursor: pointer;
-}
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none;
-}
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
-}
-body .ui-tooltip {
- border-width: 2px;
-}
-/* Component containers
-----------------------------------*/
-.ui-widget {
- font-family: Verdana,Arial,sans-serif;
- font-size: 1.1em;
-}
-.ui-widget .ui-widget {
- font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
- font-family: Verdana,Arial,sans-serif;
- font-size: 1em;
-}
-.ui-widget.ui-widget-content {
- border: 1px solid #d3d3d3;
-}
-.ui-widget-content {
- border: 1px solid #aaaaaa;
- background: #ffffff;
- color: #222222;
-}
-.ui-widget-content a {
- color: #222222;
-}
-.ui-widget-header {
- border: 1px solid #aaaaaa;
- background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
- color: #222222;
- font-weight: bold;
-}
-.ui-widget-header a {
- color: #222222;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default,
-.ui-button,
-
-/* We use html here because we need a greater specificity to make sure disabled
-works properly when clicked or hovered */
-html .ui-button.ui-state-disabled:hover,
-html .ui-button.ui-state-disabled:active {
- border: 1px solid #d3d3d3;
- background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #555555;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited,
-a.ui-button,
-a:link.ui-button,
-a:visited.ui-button,
-.ui-button {
- color: #555555;
- text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus,
-.ui-button:hover,
-.ui-button:focus {
- border: 1px solid #999999;
- background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #212121;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited,
-a.ui-button:hover,
-a.ui-button:focus {
- color: #212121;
- text-decoration: none;
-}
-
-.ui-visual-focus {
- box-shadow: 0 0 3px 1px rgb(94, 158, 214);
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active,
-a.ui-button:active,
-.ui-button:active,
-.ui-button.ui-state-active:hover {
- border: 1px solid #aaaaaa;
- background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
- font-weight: normal;
- color: #212121;
-}
-.ui-icon-background,
-.ui-state-active .ui-icon-background {
- border: #aaaaaa;
- background-color: #212121;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
- color: #212121;
- text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
- border: 1px solid #fcefa1;
- background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
- color: #363636;
-}
-.ui-state-checked {
- border: 1px solid #fcefa1;
- background: #fbf9ee;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
- color: #363636;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
- border: 1px solid #cd0a0a;
- background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
- color: #cd0a0a;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
- color: #cd0a0a;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
- color: #cd0a0a;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
- font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter:Alpha(Opacity=70); /* support: IE8 */
- font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter:Alpha(Opacity=35); /* support: IE8 */
- background-image: none;
-}
-.ui-state-disabled .ui-icon {
- filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
- width: 16px;
- height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
- background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-widget-header .ui-icon {
- background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon,
-.ui-button:hover .ui-icon,
-.ui-button:focus .ui-icon {
- background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-active .ui-icon,
-.ui-button:active .ui-icon {
- background-image: url("images/ui-icons_454545_256x240.png");
-}
-.ui-state-highlight .ui-icon,
-.ui-button .ui-state-highlight.ui-icon {
- background-image: url("images/ui-icons_2e83ff_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url("images/ui-icons_cd0a0a_256x240.png");
-}
-.ui-button .ui-icon {
- background-image: url("images/ui-icons_888888_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-caret-1-n { background-position: 0 0; }
-.ui-icon-caret-1-ne { background-position: -16px 0; }
-.ui-icon-caret-1-e { background-position: -32px 0; }
-.ui-icon-caret-1-se { background-position: -48px 0; }
-.ui-icon-caret-1-s { background-position: -65px 0; }
-.ui-icon-caret-1-sw { background-position: -80px 0; }
-.ui-icon-caret-1-w { background-position: -96px 0; }
-.ui-icon-caret-1-nw { background-position: -112px 0; }
-.ui-icon-caret-2-n-s { background-position: -128px 0; }
-.ui-icon-caret-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -65px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -65px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
- border-top-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
- border-top-right-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
- border-bottom-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
- border-bottom-right-radius: 4px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
- background: #aaaaaa;
- opacity: .3;
- filter: Alpha(Opacity=30); /* support: IE8 */
-}
-.ui-widget-shadow {
- -webkit-box-shadow: -8px -8px 8px #aaaaaa;
- box-shadow: -8px -8px 8px #aaaaaa;
-}
diff --git a/cypress.json b/cypress.json
index b43b0166..31bed083 100644
--- a/cypress.json
+++ b/cypress.json
@@ -3,5 +3,5 @@
"baseExampleUrl": "http://localhost:8080/examples",
"video": false,
"viewportWidth": 1200,
- "viewportHeight": 800
+ "viewportHeight": 900
}
\ No newline at end of file
diff --git a/cypress/integration/example-auto-scroll-when-dragging.spec.js b/cypress/integration/example-auto-scroll-when-dragging.spec.js
index d62c0f0b..f3e9def4 100644
--- a/cypress/integration/example-auto-scroll-when-dragging.spec.js
+++ b/cypress/integration/example-auto-scroll-when-dragging.spec.js
@@ -144,7 +144,7 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => {
})
})
- it('should MAX interval take effect when auto scroll: 600ms -> 200ms', { scrollBehavior: false }, function () {
+ it.skip('should MAX interval take effect when auto scroll: 600ms -> 200ms', { scrollBehavior: false }, function () {
// By default the MAX interval to show next cell is 600ms.
testInterval(0).then(defaultInterval => {
@@ -167,6 +167,8 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => {
})
it('should Delay per Px take effect when auto scroll: 5ms/px -> 50ms/px', { scrollBehavior: false }, function () {
+ const allowedDiff = 0.5;
+
// By default the Delay per Px is 5ms/px.
testInterval(scrollbarDimension).then(defaultInterval => {
@@ -180,8 +182,8 @@ describe('Example - Auto scroll when dragging', { retries: 1 }, () => {
testInterval(scrollbarDimension).then(newInterval => {
// scrolling speed is quicker than before
- expect(5 * newInterval.cell).to.be.lessThan(defaultInterval.cell);
- expect(5 * newInterval.row).to.be.lessThan(defaultInterval.row);
+ expect((5 - allowedDiff) * newInterval.cell).to.be.lessThan(defaultInterval.cell);
+ expect((5 - allowedDiff) * newInterval.row).to.be.lessThan(defaultInterval.row);
cy.get('#setDefaultOption').click();
cy.get('#accelerateInterval').should('have.value', '5');
diff --git a/cypress/integration/example-checkbox-header-row.spec.js b/cypress/integration/example-checkbox-header-row.spec.js
index 00d95ca0..08f9d666 100644
--- a/cypress/integration/example-checkbox-header-row.spec.js
+++ b/cypress/integration/example-checkbox-header-row.spec.js
@@ -101,7 +101,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should display "Showing page 1 of 6" text after changing Pagination to 25 items per page', () => {
- cy.get('.ui-icon-lightbulb')
+ cy.get('.sgi-lightbulb')
.click();
cy.get('.slick-pager-settings-expanded')
@@ -125,7 +125,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should go to next page and expect 1 row selected in that second page', () => {
- cy.get('.ui-icon-seek-next')
+ cy.get('.sgi-chevron-right')
.click();
cy.get('input[type="checkbox"]:checked').should('have.length', 1); // only 1x row in page 2
@@ -136,7 +136,7 @@ describe('Example - Checkbox Header Row', () => {
const expectedRows = '1,3,5,7,9,11,13,15,17,19,21,23';
// go back to 1st page
- cy.get('.ui-icon-seek-prev')
+ cy.get('.sgi-chevron-left')
.click();
cy.get('#filter-checkbox-selectall-container input[type=checkbox]')
@@ -153,7 +153,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should go to next page and still expect all rows selected in current page', () => {
- cy.get('.ui-icon-seek-next')
+ cy.get('.sgi-chevron-right')
.click();
cy.get('.slick-cell-checkboxsel input:checked')
@@ -161,7 +161,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should go to last page and still expect all rows selected in current page', () => {
- cy.get('.ui-icon-seek-end')
+ cy.get('.sgi-chevron-end')
.click();
cy.get('.slick-cell-checkboxsel input:checked')
@@ -198,7 +198,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should go back to first page and still expect all rows selected in current page', () => {
- cy.get('.ui-icon-seek-first')
+ cy.get('.sgi-chevron-start')
.click();
cy.get('#filter-checkbox-selectall-container input[type=checkbox]')
@@ -218,7 +218,7 @@ describe('Example - Checkbox Header Row', () => {
});
it('should go back to last page then re-select the first row and expect "Select All" to be checked', () => {
- cy.get('.ui-icon-seek-end')
+ cy.get('.sgi-chevron-end')
.click();
cy.get('.slick-row:nth(0) .slick-cell:nth(0) input[type=checkbox]')
diff --git a/cypress/integration/example-composite-editor-modal-dialog.spec.js b/cypress/integration/example-composite-editor-modal-dialog.spec.js
index 345acfc1..9d08d2ae 100644
--- a/cypress/integration/example-composite-editor-modal-dialog.spec.js
+++ b/cypress/integration/example-composite-editor-modal-dialog.spec.js
@@ -29,7 +29,7 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '5 days');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(5)`).should('contain', '01/01/2009');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(6)`).should('contain', '01/05/2009');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img');
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('exist');
});
it('should open the Edit Modal and expect same data to include "Task 0" and other specific properties', () => {
@@ -116,7 +116,7 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(5)`).should('contain', '01/01/2009');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(6)`).should('contain', '01/05/2009');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 0);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 0);
});
it('should open the Mass Update try to change "Duration" below 5 and expect it to become invalid', () => {
@@ -165,27 +165,27 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel
it('Should expect to see "Duration" of "27 days" and "Effort-Driven" to be enabled accross the entire grid', () => {
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(1)`).should('contain', 'Task 0000');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task 1');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(1)`).should('contain', 'Task 2');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(1)`).should('contain', 'Task 3');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(1)`).should('contain', 'Task 4');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(1)`).should('contain', 'Task 5');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
});
it('Should expect an Alert about missing row selection before executing Mass Selection', () => {
@@ -227,29 +227,29 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel
it('Should expect to see "Duration" of "27 days" and "Effort-Driven" to be enabled accross the entire grid', () => {
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(1)`).should('contain', 'Task 0000');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task 1');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(3)`).should('contain', '7 days');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(1)`).should('contain', 'Task 2');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(3)`).should('contain', '7 days');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(1)`).should('contain', 'Task 3');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(1)`).should('contain', 'Task 4');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(1)`).should('contain', 'Task 5');
cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(3)`).should('contain', '27 days');
- cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 5}px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
});
it('Should open a Create Modal window and click on Effort-Driven then expect 3 validation errors', () => {
@@ -327,6 +327,6 @@ describe('Example - Composite Editor Modal with Create/Edit/Mass-Update/Mass-Sel
});
cy.get(`[style="top:12500px"] > .slick-cell:nth(5)`).should('contain', '02/02/2020');
cy.get(`[style="top:12500px"] > .slick-cell:nth(6)`).should('contain', '');
- cy.get(`[style="top:12500px"] > .slick-cell:nth(7)`).find('img').should('have.length', 1);
+ cy.get(`[style="top:12500px"] > .slick-cell:nth(7)`).find('.sgi-check').should('have.length', 1);
});
});
diff --git a/cypress/integration/example-draggable-grouping.spec.js b/cypress/integration/example-draggable-grouping.spec.js
index 18061420..3f4d9125 100644
--- a/cypress/integration/example-draggable-grouping.spec.js
+++ b/cypress/integration/example-draggable-grouping.spec.js
@@ -29,12 +29,8 @@ describe('Example - Draggable Grouping', { retries: 1 }, () => {
cy.get('.slick-column-groupable')
.should('have.length', 6);
- cy.get('.slick-column-groupable')
- .each(($elm) => {
- if ($elm[0]) {
- expect($elm[0].style.background).to.eq('url("../images/column-grouping.png") center center no-repeat');
- }
- });
+ cy.get('.slick-column-groupable.sgi-drag-vertical')
+ .should('have.length', 6);
});
describe('Grouping Tests', () => {
diff --git a/cypress/integration/example-grouping-esm.spec.js b/cypress/integration/example-grouping-esm.spec.js
new file mode 100644
index 00000000..ce190ca9
--- /dev/null
+++ b/cypress/integration/example-grouping-esm.spec.js
@@ -0,0 +1,82 @@
+///
+describe('Example - Grouping & Aggregators (ESM)', { retries: 1 }, () => {
+ // NOTE: everywhere there's a * 2 is because we have a top+bottom (frozen rows) containers even after Unfreeze Columns/Rows
+ const GRID_ROW_HEIGHT = 28;
+ const fullTitles = ['#', 'Title', 'Duration', '% Complete', 'Start', 'Finish', 'Cost', 'Effort-Driven'];
+ for (let i = 0; i < 30; i++) {
+ fullTitles.push(`Mock${i}`);
+ }
+
+ it('should display Example title', () => {
+ cy.visit(`${Cypress.config('baseExampleUrl')}/example-grouping-esm.html`);
+ cy.get('h2').contains('Demonstrates');
+ cy.get('h2 + ul > li').first().contains('Grouping & Aggregator features');
+ });
+
+ it('should have exact column titles on 1st grid', () => {
+ cy.get('#myGrid')
+ .find('.slick-header-columns')
+ .children()
+ .each(($child, index) => expect($child.text()).to.eq(fullTitles[index]));
+ });
+
+ describe('Grouping Tests', () => {
+ it('should "Group by Duration & sort groups by value" then Collapse All and expect only group titles', () => {
+ cy.get('[data-test="add-50k-rows-btn"]').click();
+ cy.get('[data-test="group-duration-sort-value-btn"]').click();
+ cy.get('[data-test="collapse-all-btn"]').click();
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-toggle.collapsed`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 1');
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 2');
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 3');
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 4}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 4');
+ });
+
+ it('should click on Expand All columns and expect 1st row as grouping title and 2nd row as a regular row', () => {
+ cy.get('[data-test="add-50k-rows-btn"]').click();
+ cy.get('[data-test="group-duration-sort-value-btn"]').click();
+ cy.get('[data-test="expand-all-btn"]').click();
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(1)`).should('contain', 'Task');
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"] > .slick-cell:nth(2)`).should('contain', '0');
+ });
+
+ it('should "Group by Duration then Effort-Driven" and expect 1st row to be expanded, 2nd row to be collapsed and 3rd row to have group totals', () => {
+ cy.get('[data-test="group-duration-effort-btn"]').click();
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-toggle.collapsed`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: False');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-1 .slick-group-toggle.collapsed`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: True');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-0 .slick-cell:nth(2)`).should('contain', 'total: 0');
+ });
+
+ it('should "Group by Duration then Effort-Driven then Percent" and expect fist 2 rows to be expanded, 3rd row to be collapsed then 4th row to have group total', () => {
+ cy.get('[data-test="group-duration-effort-percent-btn"]').click();
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-toggle.expanded`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"].slick-group-level-0 > .slick-cell:nth(0) .slick-group-title`).should('contain', 'Duration: 0');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-toggle.expanded`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 1}px"].slick-group-level-1 .slick-group-title`).should('contain', 'Effort-Driven: False');
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-2 .slick-group-toggle.collapsed`).should('have.length', 1);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 2}px"].slick-group-level-2 .slick-group-title`).contains(/^% Complete: [0-9]/);
+
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-2 .slick-cell:nth(3)`).contains(/^avg: [0-9]\%$/);
+ cy.get(`[style="top:${GRID_ROW_HEIGHT * 3}px"].slick-group-totals.slick-group-level-2`)
+ .find('.slick-cell:nth(3)').contains('avg: ');
+ });
+ });
+});
diff --git a/cypress/integration/example-grouping.spec.js b/cypress/integration/example-grouping.spec.js
index fd85b7b3..a566ce66 100644
--- a/cypress/integration/example-grouping.spec.js
+++ b/cypress/integration/example-grouping.spec.js
@@ -20,12 +20,6 @@ describe('Example - Grouping & Aggregators', { retries: 1 }, () => {
.each(($child, index) => expect($child.text()).to.eq(fullTitles[index]));
});
- it('should show a custom text in the grid footer left portion', () => {
- cy.get('#pager')
- .find('.slick-pager-status')
- .contains('Showing all 50 rows');
- });
-
describe('Grouping Tests', () => {
it('should "Group by Duration & sort groups by value" then Collapse All and expect only group titles', () => {
cy.get('[data-test="add-50k-rows-btn"]').click();
diff --git a/cypress/integration/example-optimizing-updates.spec.js b/cypress/integration/example-optimizing-updates.spec.js
index 1d22d275..2fdfb03e 100644
--- a/cypress/integration/example-optimizing-updates.spec.js
+++ b/cypress/integration/example-optimizing-updates.spec.js
@@ -12,7 +12,7 @@ describe('Example - Optimizing Updates', () => {
it('should display Example Multi-grid Basic', () => {
cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`);
- cy.get('.options-panel > b').should('contain', 'Description:');
+ cy.get('h2').should('contain', 'Demonstrates:');
cy.contains('This page demonstrates how the bulk update operations ');
});
@@ -24,27 +24,27 @@ describe('Example - Optimizing Updates', () => {
});
it('should show initial rows', () => {
- cy.get('#pager')
+ cy.get('#pager')
.find('.slick-pager-status')
- .should('contain', 'Showing all 300 rows');
+ .should('contain', 'Showing all 300 rows');
});
it('should update the rows on inefficient click', () => {
cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`);
-
- cy.get('#myGrid')
+
+ cy.get('#myGrid')
.find('.slick-row')
.each(($child, index) => {
const message = $child.find('.cell-message').text();
const number = parseInt(message.substring("Log Entry ".length));
expect(number).to.be.lessThan(1000)
});
-
- cy.get('.options-panel button')
+
+ cy.get('.options-panel button')
.contains('inefficient')
.click();
-
- cy.get('#myGrid')
+
+ cy.get('#myGrid')
.find('.slick-row')
.each(($child, index) => {
const message = $child.find('.cell-message').text();
@@ -52,23 +52,23 @@ describe('Example - Optimizing Updates', () => {
expect(number).to.be.greaterThan(90000)
});
});
-
+
it('should update the rows on efficient click', () => {
cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`);
-
- cy.get('#myGrid')
+
+ cy.get('#myGrid')
.find('.slick-row')
.each(($child, index) => {
const message = $child.find('.cell-message').text();
const number = parseInt(message.substring("Log Entry ".length));
expect(number).to.be.lessThan(1000)
});
-
- cy.get('.options-panel button')
+
+ cy.get('.options-panel button')
.contains('efficient')
.click();
- cy.get('#myGrid')
+ cy.get('#myGrid')
.find('.slick-row')
.each(($child, index) => {
const message = $child.find('.cell-message').text();
@@ -76,19 +76,19 @@ describe('Example - Optimizing Updates', () => {
expect(number).to.be.greaterThan(90000)
});
});
-
+
it('should need less time on efficient than inefficient', () => {
cy.visit(`${Cypress.config('baseExampleUrl')}/example-optimizing-updates.html`);
cy.get('#duration').invoke('text', '').should('be.empty');
- cy.get('.options-panel button')
+ cy.get('.options-panel button')
.contains('(inefficient)')
.click();
cy.get('#duration').should('not.be.empty').then($duration => {
let inEfficientTime = parseInt($duration.text());
-
+
cy.get('#duration').invoke('text', '').should('be.empty');
- cy.get('.options-panel button')
+ cy.get('.options-panel button')
.contains('(efficient)')
.click();
cy.get('#duration').should('not.be.empty').then($duration2 => {
diff --git a/cypress/integration/example-plugin-contextmenu.spec.js b/cypress/integration/example-plugin-contextmenu.spec.js
index a99eeded..a1e9c16a 100644
--- a/cypress/integration/example-plugin-contextmenu.spec.js
+++ b/cypress/integration/example-plugin-contextmenu.spec.js
@@ -33,11 +33,8 @@ describe('Example - Context Menu & Cell Menu', () => {
.contains('Low');
cy.get('#myGrid')
- .find('.slick-row .slick-cell:nth(6) img')
- .invoke('attr', 'src')
- .then(src => {
- expect(src).to.contain('tick.png')
- });
+ .find('.slick-row .slick-cell:nth(6) .sgi-check')
+ .should('exist');
cy.get('#myGrid')
.find('.slick-row .slick-cell:nth(7) .disabled')
diff --git a/cypress/integration/example-plugin-custom-tooltip.spec.js b/cypress/integration/example-plugin-custom-tooltip.spec.js
index 202bc931..23289f24 100644
--- a/cypress/integration/example-plugin-custom-tooltip.spec.js
+++ b/cypress/integration/example-plugin-custom-tooltip.spec.js
@@ -115,8 +115,7 @@ describe('Example - Custom Tooltip', () => {
cy.get('.tooltip-2cols-row:nth(2)').find('div:nth(1)').find('.percent-complete-bar').should('exist');
cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(0)').contains('Effort Driven:');
- cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(1)')
- .find('img').invoke('attr', 'src').then(src => expect(src).to.contain('tick.png'));
+ cy.get('.tooltip-2cols-row:nth(3)').find('div:nth(1)').find('.sgi-check').should('exist');
cy.get('@duration5-cell').trigger('mouseout');
});
diff --git a/cypress/integration/example-plugin-headerbuttons.spec.js b/cypress/integration/example-plugin-headerbuttons.spec.js
index f23a383a..45603941 100644
--- a/cypress/integration/example-plugin-headerbuttons.spec.js
+++ b/cypress/integration/example-plugin-headerbuttons.spec.js
@@ -22,14 +22,14 @@ describe('Example - Header Button', () => {
.each(($child, index) => expect($child.text()).to.eq(titles[index]));
});
- it('should go over the 3rd column "C" and expect to see negative number in red after clicking on the blue header button', () => {
+ it('should go over the 3rd column "C" and expect to see negative number in red after clicking on the orange header button', () => {
cy.get('.slick-header-columns')
.children('.slick-header-column:nth(2)')
.should('contain', 'C');
cy.get('.slick-header-columns')
.children('.slick-header-column:nth(2)')
- .find('.slick-header-button.icon-highlight-off')
+ .find('.slick-header-button.sgi-lightbulb.color-orange')
.should('exist')
.click();
@@ -57,7 +57,7 @@ describe('Example - Header Button', () => {
});
});
- it('should go over the 5th column "E" and not find the blue header button', () => {
+ it('should go over the 5th column "E" and not find the orange header button', () => {
cy.get('.slick-header-columns')
.children('.slick-header-column:nth(4)')
.should('contain', 'E');
@@ -69,7 +69,7 @@ describe('Example - Header Button', () => {
.should('not.exist');
});
- it('should go over the last column "J" and expect to find the blue header button, however it should be usable and number should not display as red', () => {
+ it('should go over the last column "J" and expect to find the orange header button, however it should be unusable and number should not display as red', () => {
cy.get('.slick-viewport-top.slick-viewport-left')
.scrollTo('right')
.wait(50);
@@ -80,7 +80,7 @@ describe('Example - Header Button', () => {
cy.get('.slick-header-columns')
.children('.slick-header-column:nth(9)')
- .find('.slick-header-button.icon-highlight-off')
+ .find('.slick-header-button.sgi-lightbulb.color-orange')
.should('exist')
.click();
@@ -139,7 +139,7 @@ describe('Example - Header Button', () => {
done();
});
- // header buttons are displayed in inverse mode by default,
+ // header buttons are displayed in inverse mode by default,
// so we need to start at the end
cy.get('.slick-header-columns')
.children('.slick-header-column:nth(0)')
diff --git a/cypress/integration/example15-auto-resize.spec.js b/cypress/integration/example15-auto-resize.spec.js
index 8b1795c0..d35b84f1 100644
--- a/cypress/integration/example15-auto-resize.spec.js
+++ b/cypress/integration/example15-auto-resize.spec.js
@@ -28,8 +28,10 @@ describe('Example 0070 - Grid State using Local Storage', () => {
cy.get('#myGrid')
.should($el => {
- expect(parseInt(`${$el.width()}`, 10)).to.eq(800);
- expect(parseInt(`${$el.height()}`, 10)).to.eq(600);
+ expect(parseInt(`${$el.width()}`, 10)).to.gte(797);
+ expect(parseInt(`${$el.width()}`, 10)).to.lte(802);
+ expect(parseInt(`${$el.height()}`, 10)).to.gte(598);
+ expect(parseInt(`${$el.height()}`, 10)).to.lte(602);
});
});
diff --git a/cypress/integration/example3-editing.spec.js b/cypress/integration/example3-editing.spec.js
index 5a862e58..d07c6f3d 100644
--- a/cypress/integration/example3-editing.spec.js
+++ b/cypress/integration/example3-editing.spec.js
@@ -2,7 +2,7 @@
describe('Example3 Editing', () => {
const titles = ['Title', 'Description', 'Duration', '% Complete', 'Start', 'Finish', 'Effort Driven'];
- const GRID_ROW_HEIGHT = 25;
+ const GRID_ROW_HEIGHT = 28;
beforeEach(() => {
// create a console.log spy for later use
diff --git a/cypress/integration/example4-model-esm.spec.js b/cypress/integration/example4-model-esm.spec.js
new file mode 100644
index 00000000..69c1112c
--- /dev/null
+++ b/cypress/integration/example4-model-esm.spec.js
@@ -0,0 +1,121 @@
+///
+
+describe('Example 4 - Model (ESM)', () => {
+ const titles = ['#', 'Title', 'Duration', '% Complete', 'Start', 'Finish', 'Effort Driven'];
+
+ beforeEach(() => {
+ // create a console.log spy for later use
+ cy.window().then((win) => {
+ cy.spy(win.console, "log");
+ });
+ });
+
+ it('should display Example title', () => {
+ cy.visit(`${Cypress.config('baseExampleUrl')}/example4-model-esm.html`);
+ cy.get('h2').contains('Demonstrates');
+ cy.get('h2 + ul > li').first().contains('a filtered Model (DataView) as a data source instead of a simple array');
+ });
+
+ it('should have exact Column Titles in the grid', () => {
+ cy.get('#myGrid')
+ .find('.slick-header-columns')
+ .children()
+ .each(($child, index) => expect($child.text()).to.eq(titles[index]));
+ });
+
+ it('should display the text "Showing all 50000 rows" without Pagination', () => {
+ const expectedRows = ['Task 0', 'Task 1', 'Task 2', 'Task 3', 'Task 4'];
+
+ cy.get('.slick-pager-status')
+ .contains('Showing all 50000 rows');
+
+ cy.get('#myGrid')
+ .find('.slick-row')
+ .each(($row, index) => {
+ if (index > expectedRows.length - 1) {
+ return;
+ }
+ cy.wrap($row).children('.slick-cell:nth(1)')
+ .first()
+ .should('contain', expectedRows[index]);
+ });
+ });
+
+ it('Should display "Showing page 1 of 1000" text after changing Pagination to 50 items per page', () => {
+ cy.get('.sgi-lightbulb')
+ .click();
+
+ cy.get('.slick-pager-settings-expanded')
+ .should('be.visible');
+
+ cy.get('.slick-pager-settings-expanded')
+ .contains('50')
+ .click();
+
+ cy.get('.slick-pager-status')
+ .contains('Showing page 1 of 1000');
+
+ cy.window().then((win) => {
+ expect(win.console.log).to.have.callCount(2);
+ expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 0, pageNum: 0, totalRows: 50000, totalPages: 1 });
+ expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 0, totalRows: 50000, totalPages: 1000 });
+ });
+ });
+
+ it('Should display "Showing page 2 of 1000" text after clicking on next page', () => {
+ const expectedRows = ['Task 50', 'Task 51', 'Task 52', 'Task 53', 'Task 54'];
+
+ cy.get('.sgi-chevron-start.sgi-state-disabled');
+ cy.get('.sgi-chevron-left.sgi-state-disabled');
+
+ cy.get('.sgi-chevron-right')
+ .click();
+
+ cy.get('.slick-pager-status')
+ .contains('Showing page 2 of 1000');
+
+ cy.get('#myGrid')
+ .find('.slick-row')
+ .each(($row, index) => {
+ if (index > expectedRows.length - 1) {
+ return;
+ }
+ cy.wrap($row).children('.slick-cell:nth(1)')
+ .first()
+ .should('contain', expectedRows[index]);
+ });
+
+ cy.window().then((win) => {
+ expect(win.console.log).to.have.callCount(2);
+ expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 50, pageNum: 0, totalRows: 50000, totalPages: 1000 });
+ expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 1, totalRows: 50000, totalPages: 1000 });
+ });
+ });
+
+ it('Should display "Showing page 1000 of 1000" text after clicking on last page', () => {
+ const expectedRows = ['Task 49950', 'Task 49951', 'Task 49952', 'Task 49953', 'Task 49954'];
+
+ cy.get('.sgi-chevron-end')
+ .click();
+
+ cy.get('.slick-pager-status')
+ .contains('Showing page 1000 of 1000');
+
+ cy.get('#myGrid')
+ .find('.slick-row')
+ .each(($row, index) => {
+ if (index > expectedRows.length - 1) {
+ return;
+ }
+ cy.wrap($row).children('.slick-cell:nth(1)')
+ .first()
+ .should('contain', expectedRows[index]);
+ });
+
+ cy.window().then((win) => {
+ expect(win.console.log).to.have.callCount(2);
+ expect(win.console.log).to.be.calledWith('on Before Paging Info Changed - Previous Paging:: ', { pageSize: 50, pageNum: 1, totalRows: 50000, totalPages: 1000 });
+ expect(win.console.log).to.be.calledWith('on After Paging Info Changed - New Paging:: ', { pageSize: 50, pageNum: 999, totalRows: 50000, totalPages: 1000 });
+ });
+ });
+});
diff --git a/cypress/integration/example4-model.spec.js b/cypress/integration/example4-model.spec.js
index 277abd9e..c01e6a83 100644
--- a/cypress/integration/example4-model.spec.js
+++ b/cypress/integration/example4-model.spec.js
@@ -42,7 +42,7 @@ describe('Example 4 - Model', () => {
});
it('Should display "Showing page 1 of 1000" text after changing Pagination to 50 items per page', () => {
- cy.get('.slick-icon-lightbulb')
+ cy.get('.sgi-lightbulb')
.click();
cy.get('.slick-pager-settings-expanded')
@@ -65,10 +65,10 @@ describe('Example 4 - Model', () => {
it('Should display "Showing page 2 of 1000" text after clicking on next page', () => {
const expectedRows = ['Task 50', 'Task 51', 'Task 52', 'Task 53', 'Task 54'];
- cy.get('.slick-icon-seek-first.ui-state-disabled');
- cy.get('.slick-icon-seek-prev.ui-state-disabled');
+ cy.get('.sgi-chevron-start.sgi-state-disabled');
+ cy.get('.sgi-chevron-left.sgi-state-disabled');
- cy.get('.slick-icon-seek-next')
+ cy.get('.sgi-chevron-right')
.click();
cy.get('.slick-pager-status')
@@ -95,7 +95,7 @@ describe('Example 4 - Model', () => {
it('Should display "Showing page 1000 of 1000" text after clicking on last page', () => {
const expectedRows = ['Task 49950', 'Task 49951', 'Task 49952', 'Task 49953', 'Task 49954'];
- cy.get('.slick-icon-seek-end')
+ cy.get('.sgi-chevron-end')
.click();
cy.get('.slick-pager-status')
diff --git a/dist/browser/controls/slick.columnmenu.js b/dist/browser/controls/slick.columnmenu.js
new file mode 100644
index 00000000..8a85e43c
--- /dev/null
+++ b/dist/browser/controls/slick.columnmenu.js
@@ -0,0 +1,143 @@
+"use strict";
+(() => {
+ // src/controls/slick.columnmenu.js
+ (function(window2) {
+ "use strict";
+ function SlickColumnPicker(columns, grid, options) {
+ var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new Slick.Event(), _bindingEventService = new Slick.BindingEventService(), defaults = {
+ fadeSpeed: 250,
+ // the last 2 checkboxes titles
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ syncResizeTitle: "Synchronous resize",
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ };
+ function init(grid2) {
+ grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Slick.Utils.extend({}, defaults, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) {
+ var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle;
+ _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm);
+ }
+ _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none");
+ }
+ function handleHeaderContextMenu(e) {
+ e.preventDefault(), Slick.Utils.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = [];
+ let columnId, columnLabel, excludeCssClass;
+ for (var i = 0; i < columns.length; i++) {
+ columnId = columns[i].id, excludeCssClass = columns[i].excludeFromColumnPicker ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i], _options) : columnLabel = defaults.headerColumnValueExtractor(columns[i], _options);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) {
+ let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ repositionMenu(e);
+ }
+ function repositionMenu(event) {
+ let targetEvent = event && event.touches && event.touches[0] || event;
+ _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window2.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm);
+ }
+ function updateColumnOrder() {
+ let current = _grid.getColumns().slice(0), ordered = new Array(columns.length);
+ for (let i = 0; i < ordered.length; i++)
+ _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift();
+ columns = ordered;
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]);
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ }
+ function setColumnVisibiliy(idxOrId, show) {
+ var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx];
+ if (show)
+ col.hidden = !1, visibleColumns.splice(idx, 0, col);
+ else {
+ let newVisibleColumns = [];
+ for (let i = 0; i < visibleColumns.length; i++)
+ visibleColumns[i].id !== col.id && newVisibleColumns.push(visibleColumns[i]);
+ visibleColumns = newVisibleColumns;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ function getAllColumns() {
+ return columns;
+ }
+ function getColumnbyId(id) {
+ for (let i = 0; i < columns.length; i++)
+ if (columns[i].id === id)
+ return columns[i];
+ return null;
+ }
+ function getColumnIndexbyId(id) {
+ for (let i = 0; i < columns.length; i++)
+ if (columns[i].id === id)
+ return i;
+ return -1;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ return init(_grid), {
+ init,
+ getAllColumns,
+ getColumnbyId,
+ getColumnIndexbyId,
+ getVisibleColumns,
+ destroy,
+ updateAllTitles,
+ onColumnsChanged,
+ setColumnVisibiliy
+ };
+ }
+ Slick.Utils.extend(!0, window2, { Slick: { Controls: { ColumnPicker: SlickColumnPicker } } });
+ })(window);
+})();
diff --git a/dist/browser/controls/slick.columnpicker.js b/dist/browser/controls/slick.columnpicker.js
new file mode 100644
index 00000000..555faa5c
--- /dev/null
+++ b/dist/browser/controls/slick.columnpicker.js
@@ -0,0 +1,141 @@
+"use strict";
+(() => {
+ // src/controls/slick.columnpicker.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils;
+ function SlickColumnPicker(columns, grid, options) {
+ var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new SlickEvent(), _bindingEventService = new BindingEventService(), defaults = {
+ fadeSpeed: 250,
+ // the last 2 checkboxes titles
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ syncResizeTitle: "Synchronous resize",
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ };
+ function init(grid2) {
+ grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils.extend({}, defaults, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) {
+ var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle;
+ _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm);
+ }
+ _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none");
+ }
+ function handleHeaderContextMenu(e) {
+ e.preventDefault(), Utils.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = [];
+ let columnId, columnLabel, excludeCssClass;
+ for (var i = 0; i < columns.length; i++) {
+ columnId = columns[i].id, excludeCssClass = columns[i].excludeFromColumnPicker ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i], _options) : columnLabel = defaults.headerColumnValueExtractor(columns[i], _options);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) {
+ let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ repositionMenu(e);
+ }
+ function repositionMenu(event) {
+ let targetEvent = event && event.touches && event.touches[0] || event;
+ _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm);
+ }
+ function updateColumnOrder() {
+ let current = _grid.getColumns().slice(0), ordered = new Array(columns.length);
+ for (let i = 0; i < ordered.length; i++)
+ _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift();
+ columns = ordered;
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]);
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ }
+ function setColumnVisibiliy(idxOrId, show) {
+ var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx];
+ if (show)
+ col.hidden = !1, visibleColumns.splice(idx, 0, col);
+ else {
+ let newVisibleColumns = [];
+ for (let i = 0; i < visibleColumns.length; i++)
+ visibleColumns[i].id !== col.id && newVisibleColumns.push(visibleColumns[i]);
+ visibleColumns = newVisibleColumns;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ function getAllColumns() {
+ return columns;
+ }
+ function getColumnbyId(id) {
+ for (let i = 0; i < columns.length; i++)
+ if (columns[i].id === id)
+ return columns[i];
+ return null;
+ }
+ function getColumnIndexbyId(id) {
+ for (let i = 0; i < columns.length; i++)
+ if (columns[i].id === id)
+ return i;
+ return -1;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ return init(_grid), {
+ init,
+ getAllColumns,
+ getColumnbyId,
+ getColumnIndexbyId,
+ getVisibleColumns,
+ destroy,
+ updateAllTitles,
+ onColumnsChanged,
+ setColumnVisibiliy
+ };
+ }
+ window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.ColumnPicker = SlickColumnPicker);
+})();
diff --git a/dist/browser/controls/slick.gridmenu.js b/dist/browser/controls/slick.gridmenu.js
new file mode 100644
index 00000000..b6585c16
--- /dev/null
+++ b/dist/browser/controls/slick.gridmenu.js
@@ -0,0 +1,232 @@
+"use strict";
+(() => {
+ // src/controls/slick.gridmenu.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils;
+ function SlickGridMenu(columns, grid, options) {
+ var _grid = grid, _gridOptions, _gridUid = grid && grid.getUID ? grid.getUID() : "", _isMenuOpen = !1, _options = options, _self = this, _columnTitleElm, _customTitleElm, _customMenuElm, _headerElm, _listElm, _buttonElm, _menuElm, columnCheckboxes, _defaults = {
+ showButton: !0,
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ marginBottom: 15,
+ menuWidth: 18,
+ contentMinWidth: 0,
+ resizeOnShowHeaderRow: !1,
+ syncResizeTitle: "Synchronous resize",
+ useClickToRepositionMenu: !0,
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ }, _bindingEventService = new BindingEventService();
+ grid.onSetOptions.subscribe(function(e, args) {
+ if (args && args.optionsBefore && args.optionsAfter) {
+ var switchedFromRegularToFrozen = args.optionsBefore.frozenColumn >= 0 && args.optionsAfter.frozenColumn === -1, switchedFromFrozenToRegular = args.optionsBefore.frozenColumn === -1 && args.optionsAfter.frozenColumn >= 0;
+ (switchedFromRegularToFrozen || switchedFromFrozenToRegular) && recreateGridMenu();
+ }
+ });
+ function init(grid2) {
+ _gridOptions = grid2.getOptions(), createGridMenu(), grid2.onBeforeDestroy.subscribe(destroy);
+ }
+ function setOptions(newOptions) {
+ options = Utils.extend({}, options, newOptions);
+ }
+ function createGridMenu() {
+ var gridMenuWidth = _options.gridMenu && _options.gridMenu.menuWidth || _defaults.menuWidth;
+ _gridOptions && _gridOptions.hasOwnProperty("frozenColumn") && _gridOptions.frozenColumn >= 0 ? _headerElm = document.querySelector(`.${_gridUid} .slick-header-right`) : _headerElm = document.querySelector(`.${_gridUid} .slick-header-left`), _headerElm.style.width = `calc(100% - ${gridMenuWidth}px)`;
+ var enableResizeHeaderRow = _options.gridMenu && _options.gridMenu.resizeOnShowHeaderRow != null ? _options.gridMenu.resizeOnShowHeaderRow : _defaults.resizeOnShowHeaderRow;
+ if (enableResizeHeaderRow && _options.showHeaderRow) {
+ let headerRow = document.querySelector(`.${_gridUid}.slick-headerrow`);
+ headerRow && (headerRow.style.width = `calc(100% - ${gridMenuWidth}px)`);
+ }
+ var showButton = _options.gridMenu && _options.gridMenu.showButton !== void 0 ? _options.gridMenu.showButton : _defaults.showButton;
+ if (showButton) {
+ if (_buttonElm = document.createElement("button"), _buttonElm.className = "slick-gridmenu-button", _buttonElm.ariaLabel = "Grid Menu", _options.gridMenu && _options.gridMenu.iconImage) {
+ let iconImageElm = document.createElement("img");
+ iconImageElm.src = _options.gridMenu.iconImage, _buttonElm.appendChild(iconImageElm);
+ } else
+ _options.gridMenu && _options.gridMenu.iconCssClass ? _buttonElm.classList.add(..._options.gridMenu.iconCssClass.split(" ")) : _buttonElm.classList.add("sgi", "sgi-menu");
+ options.iconCssClass && _buttonElm.classList.add(...options.iconCssClass.split(" ")), _headerElm.parentElement.insertBefore(_buttonElm, _headerElm.parentElement.firstChild), _bindingEventService.bind(_buttonElm, "click", showGridMenu);
+ }
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-gridmenu ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-gridmenu", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _customMenuElm = document.createElement("div"), _customMenuElm.className = "slick-gridmenu-custom", _customMenuElm.role = "menu", _menuElm.appendChild(_customMenuElm), populateCustomMenus(_options, _customMenuElm), populateColumnPicker(), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onColumnsChanged.unsubscribe(), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _grid.onBeforeDestroy.unsubscribe(), _grid.onSetOptions.unsubscribe(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), deleteMenu();
+ }
+ function deleteMenu() {
+ _bindingEventService.unbindAll();
+ let gridMenuElm = document.querySelector(`div.slick-gridmenu.${_gridUid}`);
+ gridMenuElm && (gridMenuElm.style.display = "none"), _headerElm && (_headerElm.style.width = "100%"), _buttonElm && _buttonElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function populateCustomMenus(options2, customMenuElm) {
+ if (!(!options2.gridMenu || !options2.gridMenu.customItems)) {
+ _options.gridMenu && _options.gridMenu.customTitle && (_customTitleElm = document.createElement("div"), _customTitleElm.className = "title", _customTitleElm.innerHTML = _options.gridMenu.customTitle, customMenuElm.appendChild(_customTitleElm));
+ for (let i = 0, ln = options2.gridMenu.customItems.length; i < ln; i++) {
+ let addClickListener = !0, item = options2.gridMenu.customItems[i], callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ columns,
+ visibleColumns: getVisibleColumns()
+ }, isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-gridmenu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-gridmenu-item-divider"), addClickListener = !1), item.disabled && liElm.classList.add("slick-gridmenu-item-disabled"), item.hidden && liElm.classList.add("slick-gridmenu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-gridmenu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-gridmenu-content", textElm.innerHTML = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), customMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemClick.bind(this, item));
+ }
+ }
+ }
+ function populateColumnPicker() {
+ _grid.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils.extend({}, _defaults, _options), _options.gridMenu && _options.gridMenu.columnTitle && (_columnTitleElm = document.createElement("div"), _columnTitleElm.className = "title", _columnTitleElm.innerHTML = _options.gridMenu.columnTitle, _menuElm.appendChild(_columnTitleElm)), _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-gridmenu-list", _listElm.role = "menu";
+ }
+ function recreateGridMenu() {
+ deleteMenu(), init(_grid);
+ }
+ function showGridMenu(e) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ e.preventDefault(), Utils.emptyElement(_listElm), Utils.emptyElement(_customMenuElm), populateCustomMenus(_options, _customMenuElm), updateColumnOrder(), columnCheckboxes = [];
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_options && _options.gridMenu && !runOverrideFunctionWhenExists(_options.gridMenu.menuUsabilityOverride, callbackArgs) || typeof e.stopPropagation == "function" && _self.onBeforeMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ let columnId, columnLabel, excludeCssClass;
+ for (let i = 0; i < columns.length; i++) {
+ columnId = columns[i].id, excludeCssClass = columns[i].excludeFromGridMenu ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i] && columns[i].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}-gridmenu-colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i].id, liElm.appendChild(checkboxElm), _grid.getColumnIndex(columns[i].id) != null && !columns[i].hidden && (checkboxElm.checked = !0), columnCheckboxes.push(checkboxElm), _options && _options.gridMenu && _options.gridMenu.headerColumnValueExtractor ? columnLabel = _options.gridMenu.headerColumnValueExtractor(columns[i], _gridOptions) : columnLabel = _defaults.headerColumnValueExtractor(columns[i], _gridOptions);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.gridMenu && (!_options.gridMenu.hideForceFitButton || !_options.gridMenu.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.gridMenu && _options.gridMenu.hideForceFitButton)) {
+ let forceFitTitle = _options.gridMenu && _options.gridMenu.forceFitTitle || _defaults.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, liElm.role = "menuitem", _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.gridMenu && _options.gridMenu.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.gridMenu && _options.gridMenu.syncResizeTitle || _defaults.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ let buttonElm = e.target.nodeName === "BUTTON" ? e.target : e.target.querySelector("button");
+ buttonElm || (buttonElm = e.target.parentElement), _menuElm.style.display = "block", _menuElm.style.opacity = "0";
+ let menuIconOffset = Utils.offset(buttonElm), menuWidth = _menuElm.offsetWidth, useClickToRepositionMenu = _options.gridMenu && _options.gridMenu.useClickToRepositionMenu !== void 0 ? _options.gridMenu.useClickToRepositionMenu : _defaults.useClickToRepositionMenu, contentMinWidth = _options.gridMenu && _options.gridMenu.contentMinWidth ? _options.gridMenu.contentMinWidth : _defaults.contentMinWidth, currentMenuWidth = contentMinWidth > menuWidth ? contentMinWidth : menuWidth + 5, nextPositionTop = useClickToRepositionMenu && targetEvent.pageY > 0 ? targetEvent.pageY : menuIconOffset.top + 10, nextPositionLeft = useClickToRepositionMenu && targetEvent.pageX > 0 ? targetEvent.pageX : menuIconOffset.left + 10, menuMarginBottom = _options.gridMenu && _options.gridMenu.marginBottom !== void 0 ? _options.gridMenu.marginBottom : _defaults.marginBottom;
+ _menuElm.style.top = `${nextPositionTop + 10}px`, _menuElm.style.left = `${nextPositionLeft - currentMenuWidth + 10}px`, contentMinWidth > 0 && (_menuElm.style.minWidth = `${contentMinWidth}px`), _options.gridMenu && _options.gridMenu.height !== void 0 ? _menuElm.style.height = `${_options.gridMenu.height}px` : _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY - menuMarginBottom}px`, _menuElm.style.display = "block", _menuElm.style.opacity = "1", _menuElm.appendChild(_listElm), _isMenuOpen = !0, typeof e.stopPropagation == "function" && _self.onAfterMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1;
+ }
+ function handleBodyMouseDown(event) {
+ (_menuElm !== event.target && !(_menuElm && _menuElm.contains(event.target)) && _isMenuOpen || event.target.className === "close") && hideMenu(event);
+ }
+ function handleMenuItemClick(item, e) {
+ let command = item.command || "";
+ if (!(item.disabled || item.divider || item === "divider")) {
+ if (command != null && command != "") {
+ var callbackArgs = {
+ grid: _grid,
+ command,
+ item,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ var leaveOpen = !!(_options.gridMenu && _options.gridMenu.leaveOpen);
+ !leaveOpen && !e.defaultPrevented && hideMenu(e), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function hideMenu(e) {
+ if (_menuElm) {
+ Utils.hide(_menuElm), _isMenuOpen = !1;
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_self.onMenuClose.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ }
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _customTitleElm && _customTitleElm.innerHTML && (_customTitleElm.innerHTML = gridMenuOptions.customTitle), _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumnOrder() {
+ for (var current = _grid.getColumns().slice(0), ordered = new Array(columns.length), i = 0; i < ordered.length; i++)
+ _grid.getColumnIndex(columns[i].id) === void 0 ? ordered[i] = columns[i] : ordered[i] = current.shift();
+ columns = ordered;
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ _grid.setOptions({ syncColumnCellResize: !!e.target.checked });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columnCheckbox.checked && (columns[idx].hidden && (columns[idx].hidden = !1), visibleColumns.push(columns[idx]));
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ let callbackArgs = {
+ columnId,
+ showing: isChecked2,
+ grid: _grid,
+ allColumns: columns,
+ columns: visibleColumns
+ };
+ _grid.setColumns(visibleColumns), _self.onColumnsChanged.notify(callbackArgs, e, _self);
+ }
+ }
+ init(_grid);
+ function getAllColumns() {
+ return columns;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils.extend(this, {
+ init,
+ getAllColumns,
+ getVisibleColumns,
+ destroy,
+ deleteMenu,
+ recreateGridMenu,
+ showGridMenu,
+ setOptions,
+ updateAllTitles,
+ hideMenu,
+ onAfterMenuShow: new SlickEvent(),
+ onBeforeMenuShow: new SlickEvent(),
+ onMenuClose: new SlickEvent(),
+ onCommand: new SlickEvent(),
+ onColumnsChanged: new SlickEvent()
+ });
+ }
+ window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.GridMenu = SlickGridMenu);
+})();
diff --git a/dist/browser/controls/slick.pager.js b/dist/browser/controls/slick.pager.js
new file mode 100644
index 00000000..8a554655
--- /dev/null
+++ b/dist/browser/controls/slick.pager.js
@@ -0,0 +1,118 @@
+"use strict";
+(() => {
+ // src/controls/slick.pager.js
+ var BindingEventService = Slick.BindingEventService, GlobalEditorLock = Slick.GlobalEditorLock, Utils = Slick.Utils;
+ function SlickGridPager(dataView, grid, selectorOrElm, options) {
+ let container = getContainerElement(selectorOrElm), statusElm, _options, _defaults = {
+ showAllText: "Showing all {rowCount} rows",
+ showPageText: "Showing page {pageNum} of {pageCount}",
+ showCountText: "From {countBegin} to {countEnd} of {rowCount} rows",
+ showCount: !1,
+ pagingOptions: [
+ { data: 0, name: "All", ariaLabel: "Show All Pages" },
+ { data: -1, name: "Auto", ariaLabel: "Auto Page Size" },
+ { data: 25, name: "25", ariaLabel: "Show 25 rows per page" },
+ { data: 50, name: "50", ariaLabel: "Show 50 rows per page" },
+ { data: 100, name: "100", ariaLabel: "Show 100 rows per page" }
+ ],
+ showPageSizes: !1
+ };
+ var _bindingEventService = new BindingEventService();
+ function init() {
+ _options = Utils.extend(!0, {}, _defaults, options), dataView.onPagingInfoChanged.subscribe(function(e, pagingInfo) {
+ updatePager(pagingInfo);
+ }), constructPagerUI(), updatePager(dataView.getPagingInfo());
+ }
+ function destroy() {
+ setPageSize(0), _bindingEventService.unbindAll(), container.innerHTML = "";
+ }
+ function getNavState() {
+ let cannotLeaveEditMode = !GlobalEditorLock.commitCurrentEdit(), pagingInfo = dataView.getPagingInfo(), lastPage = pagingInfo.totalPages - 1;
+ return {
+ canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,
+ canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,
+ pagingInfo
+ };
+ }
+ function setPageSize(n) {
+ dataView.setRefreshHints({
+ isFilterUnchanged: !0
+ }), dataView.setPagingOptions({ pageSize: n });
+ }
+ function gotoFirst() {
+ getNavState().canGotoFirst && dataView.setPagingOptions({ pageNum: 0 });
+ }
+ function gotoLast() {
+ let state = getNavState();
+ state.canGotoLast && dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 });
+ }
+ function gotoPrev() {
+ let state = getNavState();
+ state.canGotoPrev && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 });
+ }
+ function gotoNext() {
+ let state = getNavState();
+ state.canGotoNext && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 });
+ }
+ function getContainerElement(selectorOrElm2) {
+ return typeof selectorOrElm2 == "string" ? document.querySelector(selectorOrElm2) : typeof selectorOrElm2 == "object" && selectorOrElm2[0] ? selectorOrElm2[0] : selectorOrElm2;
+ }
+ function constructPagerUI() {
+ let container2 = getContainerElement(selectorOrElm);
+ if (!container2 || container2.jquery && !container2[0])
+ return;
+ let navElm = document.createElement("span");
+ navElm.className = "slick-pager-nav";
+ let settingsElm = document.createElement("span");
+ settingsElm.className = "slick-pager-settings", statusElm = document.createElement("span"), statusElm.className = "slick-pager-status";
+ let pagerSettingsElm = document.createElement("span");
+ pagerSettingsElm.className = "slick-pager-settings-expanded", pagerSettingsElm.textContent = "Show: ";
+ for (let o = 0; o < _options.pagingOptions.length; o++) {
+ let p = _options.pagingOptions[o], anchorElm = document.createElement("a");
+ anchorElm.textContent = p.name, anchorElm.ariaLabel = p.ariaLabel, anchorElm.dataset.val = p.data, pagerSettingsElm.appendChild(anchorElm), _bindingEventService.bind(anchorElm, "click", function(e) {
+ let pagesize = e.target.dataset.val;
+ if (pagesize !== void 0)
+ if (Number(pagesize) === -1) {
+ let vp = grid.getViewport();
+ setPageSize(vp.bottom - vp.top);
+ } else
+ setPageSize(parseInt(pagesize));
+ });
+ }
+ pagerSettingsElm.style.display = _options.showPageSizes ? "block" : "none", settingsElm.appendChild(pagerSettingsElm);
+ let displayPaginationContainer = document.createElement("span"), displayIconElm = document.createElement("span");
+ displayPaginationContainer.className = "sgi-container", displayIconElm.ariaLabel = "Show Pagination Options", displayIconElm.role = "button", displayIconElm.className = "sgi sgi-lightbulb", displayPaginationContainer.appendChild(displayIconElm), _bindingEventService.bind(displayIconElm, "click", () => {
+ let styleDisplay = pagerSettingsElm.style.display;
+ pagerSettingsElm.style.display = styleDisplay === "none" ? "inline-flex" : "none";
+ }), settingsElm.appendChild(displayPaginationContainer), [
+ { key: "start", ariaLabel: "First Page", callback: gotoFirst },
+ { key: "left", ariaLabel: "Previous Page", callback: gotoPrev },
+ { key: "right", ariaLabel: "Next Page", callback: gotoNext },
+ { key: "end", ariaLabel: "Last Page", callback: gotoLast }
+ ].forEach((pageBtn) => {
+ let iconElm = document.createElement("span");
+ iconElm.className = "sgi-container";
+ let innerIconElm = document.createElement("span");
+ innerIconElm.role = "button", innerIconElm.ariaLabel = pageBtn.ariaLabel, innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`, _bindingEventService.bind(innerIconElm, "click", pageBtn.callback), iconElm.appendChild(innerIconElm), navElm.appendChild(iconElm);
+ });
+ let slickPagerElm = document.createElement("div");
+ slickPagerElm.className = "slick-pager", slickPagerElm.appendChild(navElm), slickPagerElm.appendChild(statusElm), slickPagerElm.appendChild(settingsElm), container2.appendChild(slickPagerElm);
+ }
+ function updatePager(pagingInfo) {
+ if (!container || container.jquery && !container[0])
+ return;
+ let state = getNavState();
+ if (container.querySelectorAll(".slick-pager-nav span").forEach((pagerIcon) => pagerIcon.classList.remove("sgi-state-disabled")), state.canGotoFirst || container.querySelector(".sgi-chevron-start").classList.add("sgi-state-disabled"), state.canGotoLast || container.querySelector(".sgi-chevron-end").classList.add("sgi-state-disabled"), state.canGotoNext || container.querySelector(".sgi-chevron-right").classList.add("sgi-state-disabled"), state.canGotoPrev || container.querySelector(".sgi-chevron-left").classList.add("sgi-state-disabled"), pagingInfo.pageSize === 0 ? statusElm.textContent = _options.showAllText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{pageCount}", pagingInfo.totalPages + "") : statusElm.textContent = _options.showPageText.replace("{pageNum}", pagingInfo.pageNum + 1 + "").replace("{pageCount}", pagingInfo.totalPages + ""), _options.showCount && pagingInfo.pageSize !== 0) {
+ let pageBegin = pagingInfo.pageNum * pagingInfo.pageSize, currentText = statusElm.textContent;
+ currentText && (currentText += " - "), statusElm.textContent = currentText + _options.showCountText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{countBegin}", pageBegin + 1).replace("{countEnd}", Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows));
+ }
+ }
+ init(), Utils.extend(this, {
+ init,
+ destroy
+ });
+ }
+ window.Slick && (window.Slick.Controls = window.Slick.Controls || {}, window.Slick.Controls.Pager = SlickGridPager);
+})();
diff --git a/dist/browser/plugins/slick.autotooltips.js b/dist/browser/plugins/slick.autotooltips.js
new file mode 100644
index 00000000..a8f68067
--- /dev/null
+++ b/dist/browser/plugins/slick.autotooltips.js
@@ -0,0 +1,42 @@
+"use strict";
+(() => {
+ // src/plugins/slick.autotooltips.ts
+ var Utils = Slick.Utils;
+ function SlickAutoTooltips(options) {
+ let _grid, _defaults = {
+ enableForCells: !0,
+ enableForHeaderCells: !1,
+ maxToolTipLength: void 0,
+ replaceExisting: !0
+ };
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, options.enableForCells && _grid.onMouseEnter.subscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);
+ }
+ function destroy() {
+ options.enableForCells && _grid.onMouseEnter.unsubscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);
+ }
+ function handleMouseEnter(event) {
+ var _a, _b;
+ let cell = _grid.getCellFromEvent(event);
+ if (cell) {
+ let node = _grid.getCellNode(cell.row, cell.cell), text;
+ options && node && (!node.title || options != null && options.replaceExisting) && (node.clientWidth < node.scrollWidth ? (text = (_b = (_a = node.textContent) == null ? void 0 : _a.trim()) != null ? _b : "", options && options.maxToolTipLength && text.length > options.maxToolTipLength && (text = text.substring(0, options.maxToolTipLength - 3) + "...")) : text = "", node.title = text), node = null;
+ }
+ }
+ function handleHeaderMouseEnter(event, args) {
+ var _a;
+ let column = args.column, node, targetElm = event.target;
+ targetElm && (node = targetElm.closest(".slick-header-column"), node && !(column && column.toolTip) && (node.title = targetElm.clientWidth < node.clientWidth && (_a = column == null ? void 0 : column.name) != null ? _a : "")), node = null;
+ }
+ return {
+ init,
+ destroy,
+ pluginName: "AutoTooltips"
+ };
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ AutoTooltips: SlickAutoTooltips
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellcopymanager.js b/dist/browser/plugins/slick.cellcopymanager.js
new file mode 100644
index 00000000..dc278e30
--- /dev/null
+++ b/dist/browser/plugins/slick.cellcopymanager.js
@@ -0,0 +1,44 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellcopymanager.js
+ var keyCode = Slick.keyCode, SlickEvent = Slick.Event, Utils = Slick.Utils;
+ function CellCopyManager() {
+ var _grid, _self = this, _copiedRanges;
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function handleKeyDown(e) {
+ var ranges;
+ _grid.getEditorLock().isActive() || (e.which == keyCode.ESCAPE && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), e.which == 67 && (e.ctrlKey || e.metaKey) && (ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0 && (e.preventDefault(), _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges }))), e.which == 86 && (e.ctrlKey || e.metaKey) && _copiedRanges && (e.preventDefault(), ranges = _grid.getSelectionModel().getSelectedRanges(), _self.onPasteCells.notify({ from: _copiedRanges, to: ranges }), _grid.getOptions().preserveCopiedSelectionOnPaste || (clearCopySelection(), _copiedRanges = null)));
+ }
+ function markCopySelection(ranges) {
+ for (var columns = _grid.getColumns(), hash = {}, i = 0; i < ranges.length; i++)
+ for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++)
+ hash[j][columns[k].id] = "copied";
+ }
+ _grid.setCellCssStyles("copy-manager", hash);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles("copy-manager");
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellCopyManager",
+ clearCopySelection,
+ onCopyCells: new SlickEvent(),
+ onCopyCancelled: new SlickEvent(),
+ onPasteCells: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CellCopyManager
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellexternalcopymanager.js b/dist/browser/plugins/slick.cellexternalcopymanager.js
new file mode 100644
index 00000000..1d40f1f6
--- /dev/null
+++ b/dist/browser/plugins/slick.cellexternalcopymanager.js
@@ -0,0 +1,251 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellexternalcopymanager.js
+ var SlickEvent = Slick.Event, Utils = Slick.Utils;
+ function CellExternalCopyManager(options) {
+ var _grid, _self = this, _copiedRanges, _options = options || {}, _copiedCellStyleLayerKey = _options.copiedCellStyleLayerKey || "copy-manager", _copiedCellStyle = _options.copiedCellStyle || "copied", _clearCopyTI = 0, _bodyElement = _options.bodyElement || document.body, _onCopyInit = _options.onCopyInit || null, _onCopySuccess = _options.onCopySuccess || null, keyCodes = {
+ C: 67,
+ V: 86,
+ ESC: 27,
+ INSERT: 45
+ };
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ var cellSelectionModel = grid.getSelectionModel();
+ if (!cellSelectionModel)
+ throw new Error("Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())");
+ cellSelectionModel.onSelectedRangesChanged.subscribe(() => {
+ _grid.getEditorLock().isActive() || _grid.focus();
+ });
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function getHeaderValueForColumn(columnDef) {
+ if (_options.headerColumnValueExtractor) {
+ var val = _options.headerColumnValueExtractor(columnDef);
+ if (val)
+ return val;
+ }
+ return columnDef.name;
+ }
+ function getDataItemValueForColumn(item, columnDef, event) {
+ if (typeof _options.dataItemColumnValueExtractor == "function") {
+ let val = _options.dataItemColumnValueExtractor(item, columnDef);
+ if (val)
+ return val;
+ }
+ let retVal = "";
+ if (columnDef && columnDef.editor) {
+ let tmpP = document.createElement("p"), editor = new columnDef.editor({
+ container: tmpP,
+ // a dummy container
+ column: columnDef,
+ event,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), retVal = editor.serializeValue(), editor.destroy(), tmpP.remove();
+ } else
+ retVal = item[columnDef.field || ""];
+ return retVal;
+ }
+ function setDataItemValueForColumn(item, columnDef, value) {
+ if (columnDef.denyPaste)
+ return null;
+ if (_options.dataItemColumnValueSetter)
+ return _options.dataItemColumnValueSetter(item, columnDef, value);
+ if (columnDef.editor) {
+ let tmpDiv = document.createElement("div"), editor = new columnDef.editor({
+ container: tmpDiv,
+ // a dummy container
+ column: columnDef,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), editor.applyValue(item, value), editor.destroy(), tmpDiv.remove();
+ } else
+ item[columnDef.field] = value;
+ }
+ function _createTextBox(innerText) {
+ var ta = document.createElement("textarea");
+ return ta.style.position = "absolute", ta.style.left = "-1000px", ta.style.top = document.body.scrollTop + "px", ta.value = innerText, _bodyElement.appendChild(ta), ta.select(), ta;
+ }
+ function _decodeTabularData(_grid2, ta) {
+ var columns = _grid2.getColumns(), clipText = ta.value, clipRows = clipText.split(/[\n\f\r]/);
+ clipRows[clipRows.length - 1] === "" && clipRows.pop();
+ var clippedRange = [], j = 0;
+ _bodyElement.removeChild(ta);
+ for (var i = 0; i < clipRows.length; i++)
+ clipRows[i] !== "" ? clippedRange[j++] = clipRows[i].split(" ") : clippedRange[j++] = [""];
+ var selectedCell = _grid2.getActiveCell(), ranges = _grid2.getSelectionModel().getSelectedRanges(), selectedRange = ranges && ranges.length ? ranges[0] : null, activeRow = null, activeCell = null;
+ if (selectedRange)
+ activeRow = selectedRange.fromRow, activeCell = selectedRange.fromCell;
+ else if (selectedCell)
+ activeRow = selectedCell.row, activeCell = selectedCell.cell;
+ else
+ return;
+ var oneCellToMultiple = !1, destH = clippedRange.length, destW = clippedRange.length ? clippedRange[0].length : 0;
+ clippedRange.length == 1 && clippedRange[0].length == 1 && selectedRange && (oneCellToMultiple = !0, destH = selectedRange.toRow - selectedRange.fromRow + 1, destW = selectedRange.toCell - selectedRange.fromCell + 1);
+ var availableRows = _grid2.getData().length - activeRow, addRows = 0;
+ if (availableRows < destH && _options.newRowCreator) {
+ var d = _grid2.getData();
+ for (addRows = 1; addRows <= destH - availableRows; addRows++)
+ d.push({});
+ _grid2.setData(d), _grid2.render();
+ }
+ var overflowsBottomOfGrid = activeRow + destH > _grid2.getDataLength();
+ if (_options.newRowCreator && overflowsBottomOfGrid) {
+ var newRowsNeeded = activeRow + destH - _grid2.getDataLength();
+ _options.newRowCreator(newRowsNeeded);
+ }
+ var clipCommand = {
+ isClipboardCommand: !0,
+ clippedRange,
+ oldValues: [],
+ cellExternalCopyManager: _self,
+ _options,
+ setDataItemValueForColumn,
+ markCopySelection,
+ oneCellToMultiple,
+ activeRow,
+ activeCell,
+ destH,
+ destW,
+ maxDestY: _grid2.getDataLength(),
+ maxDestX: _grid2.getColumns().length,
+ h: 0,
+ w: 0,
+ execute: function() {
+ this.h = 0;
+ for (var y = 0; y < this.destH; y++) {
+ this.oldValues[y] = [], this.w = 0, this.h++;
+ for (var x = 0; x < this.destW; x++) {
+ this.w++;
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ this.oldValues[y][x] = dt[columns[destx].field], oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], clippedRange[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], clippedRange[y] ? clippedRange[y][x] : ""), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] });
+ },
+ undo: function() {
+ for (var y = 0; y < this.destH; y++)
+ for (var x = 0; x < this.destW; x++) {
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[y][x]), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ if (this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] }), addRows > 1) {
+ for (var d2 = _grid2.getData(); addRows > 1; addRows--)
+ d2.splice(d2.length - 1, 1);
+ _grid2.setData(d2), _grid2.render();
+ }
+ }
+ };
+ _options.clipboardCommandHandler ? _options.clipboardCommandHandler(clipCommand) : clipCommand.execute();
+ }
+ function handleKeyDown(e, args) {
+ var ranges;
+ if (!_grid.getEditorLock().isActive() || _grid.getOptions().autoEdit) {
+ if (e.which == keyCodes.ESC && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), (e.which === keyCodes.C || e.which === keyCodes.INSERT) && (e.ctrlKey || e.metaKey) && !e.shiftKey && (_onCopyInit && _onCopyInit.call(), ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0)) {
+ _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges });
+ for (var columns = _grid.getColumns(), clipText = "", rg = 0; rg < ranges.length; rg++) {
+ for (var range = ranges[rg], clipTextRows = [], i = range.fromRow; i < range.toRow + 1; i++) {
+ var clipTextCells = [], dt = _grid.getDataItem(i);
+ if (clipTextRows.length === 0 && _options.includeHeaderWhenCopying) {
+ for (var clipTextHeaders = [], j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextHeaders.push(getHeaderValueForColumn(columns[j]));
+ clipTextRows.push(clipTextHeaders.join(" "));
+ }
+ for (var j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextCells.push(getDataItemValueForColumn(dt, columns[j], e));
+ clipTextRows.push(clipTextCells.join(" "));
+ }
+ clipText += clipTextRows.join(`\r
+`) + `\r
+`;
+ }
+ if (window.clipboardData)
+ return window.clipboardData.setData("Text", clipText), !0;
+ var focusEl = document.activeElement, ta = _createTextBox(clipText);
+ if (ta.focus(), setTimeout(function() {
+ _bodyElement.removeChild(ta), focusEl ? focusEl.focus() : console.log("Not element to restore focus to after copy?");
+ }, 100), _onCopySuccess) {
+ var rowCount = 0;
+ ranges.length === 1 ? rowCount = ranges[0].toRow + 1 - ranges[0].fromRow : rowCount = ranges.length, _onCopySuccess.call(this, rowCount);
+ }
+ return !1;
+ }
+ if (!_options.readOnlyMode && (e.which === keyCodes.V && (e.ctrlKey || e.metaKey) && !e.shiftKey || e.which === keyCodes.INSERT && e.shiftKey && !e.ctrlKey)) {
+ var ta = _createTextBox("");
+ return setTimeout(function() {
+ _decodeTabularData(_grid, ta);
+ }, 100), !1;
+ }
+ }
+ }
+ function markCopySelection(ranges) {
+ clearCopySelection();
+ for (var columns = _grid.getColumns(), hash = {}, i = 0; i < ranges.length; i++)
+ for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i].fromCell; k <= ranges[i].toCell && k < columns.length; k++)
+ hash[j][columns[k].id] = _copiedCellStyle;
+ }
+ _grid.setCellCssStyles(_copiedCellStyleLayerKey, hash), clearTimeout(_clearCopyTI), _clearCopyTI = setTimeout(function() {
+ _self.clearCopySelection();
+ }, 2e3);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles(_copiedCellStyleLayerKey);
+ }
+ function setIncludeHeaderWhenCopying(includeHeaderWhenCopying) {
+ _options.includeHeaderWhenCopying = includeHeaderWhenCopying;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellExternalCopyManager",
+ clearCopySelection,
+ handleKeyDown,
+ onCopyCells: new SlickEvent(),
+ onCopyCancelled: new SlickEvent(),
+ onPasteCells: new SlickEvent(),
+ setIncludeHeaderWhenCopying
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CellExternalCopyManager
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellmenu.js b/dist/browser/plugins/slick.cellmenu.js
new file mode 100644
index 00000000..5bf501e9
--- /dev/null
+++ b/dist/browser/plugins/slick.cellmenu.js
@@ -0,0 +1,204 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellmenu.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventData = Slick.EventData, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function CellMenu(optionProperties) {
+ let _cellMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler(), _self = this, _commandTitleElm, _optionTitleElm, _menuElm, _bindingEventService = new BindingEventService(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: 0,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !0,
+ maxHeight: "none",
+ width: "auto"
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _cellMenuProperties = Utils.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onClick, handleCellClick), _cellMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _cellMenuProperties = Utils.extend({}, _cellMenuProperties, newOptions);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ let cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), commandItems = _cellMenuProperties.commandItems || [], optionItems = _cellMenuProperties.optionItems || [];
+ if (!columnDef || !columnDef.cellMenu || !commandItems.length && !optionItems.length || (destroyMenu(), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_cellMenuProperties.maxHeight) ? _cellMenuProperties.maxHeight : _cellMenuProperties.maxHeight + "px", width = isNaN(_cellMenuProperties.width) ? _cellMenuProperties.width : _cellMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-cell-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${e.pageY + 5}px`, _menuElm.style.left = `${e.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-cell-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_cellMenuProperties.hideOptionSection && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-cell-menu-option-list", optionMenuElm.role = "menu", _cellMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _cellMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_cellMenuProperties.hideCommandSection && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-cell-menu-command-list", commandMenuElm.role = "menu", !_cellMenuProperties.hideCloseButton && (optionItems.length === 0 || _cellMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _cellMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-cell-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function repositionMenu(e) {
+ let parentElm = e.target.closest(".slick-cell"), parentOffset = parentElm && Utils.offset(parentElm), menuOffsetLeft = parentElm ? parentOffset.left : e.pageX, menuOffsetTop = parentElm ? parentOffset.top : e.pageY, parentCellWidth = parentElm.offsetWidth || 0, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _cellMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _cellMenuProperties.autoAdjustDropOffset, sideOffset = _cellMenuProperties.autoAlignSideOffset;
+ if (_cellMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_cellMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - (menuWidth - parentCellWidth) - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function handleCellClick(e, args) {
+ e instanceof EventData && (e = e.getNativeEvent());
+ let cell = _grid.getCellFromEvent(e), dataContext = _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ columnDef && columnDef.cellMenu && e.preventDefault(), _cellMenuProperties = Utils.extend({}, _cellMenuProperties, columnDef.cellMenu), args || (args = {}), args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_cellMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.setAttribute("aria-expanded", "true"), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this)));
+ }
+ function handleBodyMouseDown(e) {
+ _menuElm != e.target && !(_menuElm && _menuElm.contains(e.target)) && (e.defaultPrevented || closeMenu(e, { cell: _currentCell, row: _currentRow }));
+ }
+ function closeMenu(e, args) {
+ if (_menuElm) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm && _menuElm.remove && (_menuElm.remove(), _menuElm = null);
+ }
+ }
+ function populateOptionItems(cellMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !cellMenu)) {
+ cellMenu && cellMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = cellMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i = 0, ln = optionItems.length; i < ln; i++) {
+ let addClickListener = !0, item = optionItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(cellMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !cellMenu)) {
+ cellMenu && cellMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = cellMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i = 0, ln = commandItems.length; i < ln; i++) {
+ let addClickListener = !0, item = commandItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider")
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (command !== null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider" || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "CellMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent(),
+ onBeforeMenuShow: new SlickEvent(),
+ onBeforeMenuClose: new SlickEvent(),
+ onCommand: new SlickEvent(),
+ onOptionSelected: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ CellMenu
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellrangedecorator.js b/dist/browser/plugins/slick.cellrangedecorator.js
new file mode 100644
index 00000000..258baec5
--- /dev/null
+++ b/dist/browser/plugins/slick.cellrangedecorator.js
@@ -0,0 +1,44 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellrangedecorator.js
+ var Utils = Slick.Utils;
+ function CellRangeDecorator(grid, options) {
+ var _elem, _defaults = {
+ selectionCssClass: "slick-range-decorator",
+ selectionCss: {
+ zIndex: "9999",
+ border: "2px dashed red"
+ },
+ offset: { top: -1, left: -1, height: -2, width: -2 }
+ };
+ options = Utils.extend(!0, {}, _defaults, options);
+ function show(range) {
+ if (!_elem) {
+ _elem = document.createElement("div"), _elem.className = options.selectionCssClass, Object.keys(options.selectionCss).forEach((cssStyleKey) => {
+ _elem.style[cssStyleKey] = options.selectionCss[cssStyleKey];
+ }), _elem.style.position = "absolute";
+ let canvasNode = grid.getActiveCanvasNode();
+ canvasNode && canvasNode.appendChild(_elem);
+ }
+ var from = grid.getCellNodeBox(range.fromRow, range.fromCell), to = grid.getCellNodeBox(range.toRow, range.toCell);
+ return from && to && options && options.offset && (_elem.style.top = `${from.top + options.offset.top}px`, _elem.style.left = `${from.left + options.offset.left}px`, _elem.style.height = `${to.bottom - from.top + options.offset.height}px`, _elem.style.width = `${to.right - from.left + options.offset.width}px`), _elem;
+ }
+ function destroy() {
+ hide();
+ }
+ function hide() {
+ _elem && (_elem.remove(), _elem = null);
+ }
+ Utils.extend(this, {
+ pluginName: "CellRangeDecorator",
+ show,
+ hide,
+ destroy
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CellRangeDecorator
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellrangeselector.js b/dist/browser/plugins/slick.cellrangeselector.js
new file mode 100644
index 00000000..8f3d9666
--- /dev/null
+++ b/dist/browser/plugins/slick.cellrangeselector.js
@@ -0,0 +1,165 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellrangeselector.js
+ var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, SlickRange = Slick.Range, Draggable = Slick.Draggable, CellRangeDecorator = Slick.CellRangeDecorator, Utils = Slick.Utils;
+ function CellRangeSelector(options) {
+ var _grid, _currentlySelectedRange, _canvas, _gridOptions, _activeCanvas, _dragging, _decorator, _self = this, _handler = new EventHandler(), _defaults = {
+ autoScroll: !0,
+ minIntervalToShowNextCell: 30,
+ maxIntervalToShowNextCell: 600,
+ // better to a multiple of minIntervalToShowNextCell
+ accelerateInterval: 5,
+ // increase 5ms when cursor 1px outside the viewport.
+ selectionCss: {
+ border: "2px dashed blue"
+ }
+ }, _rowOffset, _columnOffset, _isRightCanvas, _isBottomCanvas, _activeViewport, _viewportWidth, _viewportHeight, _draggingMouseOffset, _moveDistanceForOneCell, _autoScrollTimerId, _xDelayForNextCell, _yDelayForNextCell, _isRowMoveRegistered = !1, _scrollTop = 0, _scrollLeft = 0;
+ function init(grid) {
+ if (typeof Draggable == "undefined")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ options = Utils.extend(!0, {}, _defaults, options), _decorator = options.cellDecorator || new CellRangeDecorator(grid, options), _grid = grid, _canvas = _grid.getCanvasNode(), _gridOptions = _grid.getOptions(), _handler.subscribe(_grid.onScroll, handleScroll).subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _activeCanvas = null, _activeViewport = null, _canvas = null, _decorator && _decorator.destroy && _decorator.destroy();
+ }
+ function getCellDecorator() {
+ return _decorator;
+ }
+ function handleScroll(e, args) {
+ _scrollTop = args.scrollTop, _scrollLeft = args.scrollLeft;
+ }
+ function handleDragInit(e) {
+ _activeCanvas = _grid.getActiveCanvasNode(e), _activeViewport = _grid.getActiveViewportNode(e);
+ var scrollbarDimensions = _grid.getDisplayedScrollbarDimensions();
+ if (_viewportWidth = _activeViewport.offsetWidth - scrollbarDimensions.width, _viewportHeight = _activeViewport.offsetHeight - scrollbarDimensions.height, _moveDistanceForOneCell = {
+ x: _grid.getAbsoluteColumnMinWidth() / 2,
+ y: _grid.getOptions().rowHeight / 2
+ }, _isRowMoveRegistered = hasRowMoveManager(), _rowOffset = 0, _columnOffset = 0, _isBottomCanvas = _activeCanvas.classList.contains("grid-canvas-bottom"), _gridOptions.frozenRow > -1 && _isBottomCanvas) {
+ let canvasSelector = `.${_grid.getUID()} .grid-canvas-${_gridOptions.frozenBottom ? "bottom" : "top"}`, canvasElm = document.querySelector(canvasSelector);
+ canvasElm && (_rowOffset = canvasElm.clientHeight || 0);
+ }
+ if (_isRightCanvas = _activeCanvas.classList.contains("grid-canvas-right"), _gridOptions.frozenColumn > -1 && _isRightCanvas) {
+ let canvasLeftElm = document.querySelector(`.${_grid.getUID()} .grid-canvas-left`);
+ canvasLeftElm && (_columnOffset = canvasLeftElm.clientWidth || 0);
+ }
+ e.stopImmediatePropagation(), e.preventDefault();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e);
+ if (_self.onBeforeCellRangeSelected.notify(cell) !== !1 && _grid.canCellBeSelected(cell.row, cell.cell) && (_dragging = !0, e.stopImmediatePropagation()), !_dragging)
+ return;
+ _grid.focus();
+ let canvasOffset = Utils.offset(_canvas), startX = dd.startX - (canvasOffset.left || 0);
+ _gridOptions.frozenColumn >= 0 && _isRightCanvas && (startX += _scrollLeft);
+ let startY = dd.startY - (canvasOffset.top || 0);
+ _gridOptions.frozenRow >= 0 && _isBottomCanvas && (startY += _scrollTop);
+ var start = _grid.getCellFromPoint(startX, startY);
+ return dd.range = { start, end: {} }, _currentlySelectedRange = dd.range, _decorator.show(new SlickRange(start.row, start.cell));
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging && !_isRowMoveRegistered)
+ return;
+ _isRowMoveRegistered || evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ if (options.autoScroll && (_draggingMouseOffset = getMouseOffsetViewport(e, dd), _draggingMouseOffset.isOutsideViewport))
+ return handleDragOutsideViewport();
+ stopIntervalTimer(), handleDragTo(e, dd);
+ }
+ function getMouseOffsetViewport(e, dd) {
+ var targetEvent = e.touches ? e.touches[0] : e, viewportLeft = _activeViewport.scrollLeft, viewportTop = _activeViewport.scrollTop, viewportRight = viewportLeft + _viewportWidth, viewportBottom = viewportTop + _viewportHeight, viewportOffset = Utils.offset(_activeViewport), viewportOffsetLeft = viewportOffset.left || 0, viewportOffsetTop = viewportOffset.top || 0, viewportOffsetRight = viewportOffsetLeft + _viewportWidth, viewportOffsetBottom = viewportOffsetTop + _viewportHeight, result = {
+ e,
+ dd,
+ viewport: {
+ left: viewportLeft,
+ top: viewportTop,
+ right: viewportRight,
+ bottom: viewportBottom,
+ offset: {
+ left: viewportOffsetLeft,
+ top: viewportOffsetTop,
+ right: viewportOffsetRight,
+ bottom: viewportOffsetBottom
+ }
+ },
+ // Consider the viewport as the origin, the `offset` is based on the coordinate system:
+ // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.
+ offset: {
+ x: 0,
+ y: 0
+ },
+ isOutsideViewport: !1
+ };
+ return targetEvent.pageX < viewportOffsetLeft ? result.offset.x = targetEvent.pageX - viewportOffsetLeft : targetEvent.pageX > viewportOffsetRight && (result.offset.x = targetEvent.pageX - viewportOffsetRight), targetEvent.pageY < viewportOffsetTop ? result.offset.y = viewportOffsetTop - targetEvent.pageY : targetEvent.pageY > viewportOffsetBottom && (result.offset.y = viewportOffsetBottom - targetEvent.pageY), result.isOutsideViewport = !!result.offset.x || !!result.offset.y, result;
+ }
+ function handleDragOutsideViewport() {
+ if (_xDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.x) * options.accelerateInterval, _yDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.y) * options.accelerateInterval, !_autoScrollTimerId) {
+ var xTotalDelay = 0, yTotalDelay = 0;
+ _autoScrollTimerId = setInterval(function() {
+ var xNeedUpdate = !1, yNeedUpdate = !1;
+ _draggingMouseOffset.offset.x ? (xTotalDelay += options.minIntervalToShowNextCell, xNeedUpdate = xTotalDelay >= _xDelayForNextCell) : xTotalDelay = 0, _draggingMouseOffset.offset.y ? (yTotalDelay += options.minIntervalToShowNextCell, yNeedUpdate = yTotalDelay >= _yDelayForNextCell) : yTotalDelay = 0, (xNeedUpdate || yNeedUpdate) && (xNeedUpdate && (xTotalDelay = 0), yNeedUpdate && (yTotalDelay = 0), handleDragToNewPosition(xNeedUpdate, yNeedUpdate));
+ }, options.minIntervalToShowNextCell);
+ }
+ }
+ function handleDragToNewPosition(xNeedUpdate, yNeedUpdate) {
+ var pageX = _draggingMouseOffset.e.pageX, pageY = _draggingMouseOffset.e.pageY, mouseOffsetX = _draggingMouseOffset.offset.x, mouseOffsetY = _draggingMouseOffset.offset.y, viewportOffset = _draggingMouseOffset.viewport.offset;
+ xNeedUpdate && mouseOffsetX && (mouseOffsetX > 0 ? pageX = viewportOffset.right + _moveDistanceForOneCell.x : pageX = viewportOffset.left - _moveDistanceForOneCell.x), yNeedUpdate && mouseOffsetY && (mouseOffsetY > 0 ? pageY = viewportOffset.top - _moveDistanceForOneCell.y : pageY = viewportOffset.bottom + _moveDistanceForOneCell.y), handleDragTo({
+ pageX,
+ pageY
+ }, _draggingMouseOffset.dd);
+ }
+ function stopIntervalTimer() {
+ clearInterval(_autoScrollTimerId), _autoScrollTimerId = null;
+ }
+ function handleDragTo(e, dd) {
+ let targetEvent = e.touches ? e.touches[0] : e, canvasOffset = Utils.offset(_activeCanvas), end = _grid.getCellFromPoint(
+ targetEvent.pageX - (canvasOffset && canvasOffset.left || 0) + _columnOffset,
+ targetEvent.pageY - (canvasOffset && canvasOffset.top || 0) + _rowOffset
+ );
+ if (!(_gridOptions.frozenColumn >= 0 && !_isRightCanvas && end.cell > _gridOptions.frozenColumn || _isRightCanvas && end.cell <= _gridOptions.frozenColumn) && !(_gridOptions.frozenRow >= 0 && !_isBottomCanvas && end.row >= _gridOptions.frozenRow || _isBottomCanvas && end.row < _gridOptions.frozenRow)) {
+ if (options.autoScroll && _draggingMouseOffset) {
+ var endCellBox = _grid.getCellNodeBox(end.row, end.cell);
+ if (!endCellBox)
+ return;
+ var viewport = _draggingMouseOffset.viewport;
+ (endCellBox.left < viewport.left || endCellBox.right > viewport.right || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) && _grid.scrollCellIntoView(end.row, end.cell);
+ }
+ if (_grid.canCellBeSelected(end.row, end.cell) && dd && dd.range) {
+ dd.range.end = end;
+ var range = new SlickRange(dd.range.start.row, dd.range.start.cell, end.row, end.cell);
+ _decorator.show(range), _self.onCellRangeSelecting.notify({
+ range
+ });
+ }
+ }
+ }
+ function hasRowMoveManager() {
+ return !!(_grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager"));
+ }
+ function handleDragEnd(e, dd) {
+ _dragging && (_dragging = !1, e.stopImmediatePropagation(), stopIntervalTimer(), _decorator.hide(), _self.onCellRangeSelected.notify({
+ range: new SlickRange(
+ dd.range.start.row,
+ dd.range.start.cell,
+ dd.range.end.row,
+ dd.range.end.cell
+ )
+ }));
+ }
+ function getCurrentRange() {
+ return _currentlySelectedRange;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellRangeSelector",
+ getCellDecorator,
+ getCurrentRange,
+ onBeforeCellRangeSelected: new SlickEvent(),
+ onCellRangeSelected: new SlickEvent(),
+ onCellRangeSelecting: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(Slick, {
+ CellRangeSelector
+ });
+})();
diff --git a/dist/browser/plugins/slick.cellselectionmodel.js b/dist/browser/plugins/slick.cellselectionmodel.js
new file mode 100644
index 00000000..41d7b8e5
--- /dev/null
+++ b/dist/browser/plugins/slick.cellselectionmodel.js
@@ -0,0 +1,95 @@
+"use strict";
+(() => {
+ // src/plugins/slick.cellselectionmodel.js
+ var SlickEvent = Slick.Event, EventData = Slick.EventData, SlickRange = Slick.Range, CellRangeSelector = Slick.CellRangeSelector, Utils = Slick.Utils;
+ function CellSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _selector;
+ typeof options == "undefined" || typeof options.cellRangeSelector == "undefined" ? _selector = new CellRangeSelector({
+ selectionCss: {
+ border: "2px solid black"
+ }
+ }) : _selector = options.cellRangeSelector;
+ var _options, _defaults = {
+ selectActiveCell: !0
+ };
+ function init(grid) {
+ _options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _grid.onActiveCellChanged.subscribe(handleActiveCellChange), _grid.onKeyDown.subscribe(handleKeyDown), grid.registerPlugin(_selector), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
+ }
+ function destroy() {
+ _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange), _grid.onKeyDown.unsubscribe(handleKeyDown), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector && _selector.destroy && _selector.destroy();
+ }
+ function removeInvalidRanges(ranges) {
+ for (var result = [], i = 0; i < ranges.length; i++) {
+ var r = ranges[i];
+ _grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell) && result.push(r);
+ }
+ return result;
+ }
+ function rangesAreEqual(range1, range2) {
+ var areDifferent = range1.length !== range2.length;
+ if (!areDifferent) {
+ for (var i = 0; i < range1.length; i++)
+ if (range1[i].fromCell !== range2[i].fromCell || range1[i].fromRow !== range2[i].fromRow || range1[i].toCell !== range2[i].toCell || range1[i].toRow !== range2[i].toRow) {
+ areDifferent = !0;
+ break;
+ }
+ }
+ return !areDifferent;
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ var rangeHasChanged = !rangesAreEqual(_ranges, ranges);
+ if (_ranges = removeInvalidRanges(ranges), rangeHasChanged) {
+ var eventData = new EventData(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickCellSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRanges(getSelectedRanges());
+ }
+ function handleBeforeCellRangeSelected(e) {
+ if (_grid.getEditorLock().isActive())
+ return e.stopPropagation(), !1;
+ }
+ function handleCellRangeSelected(e, args) {
+ _grid.setActiveCell(args.range.fromRow, args.range.fromCell, !1, !1, !0), setSelectedRanges([args.range]);
+ }
+ function handleActiveCellChange(e, args) {
+ _options.selectActiveCell && args.row != null && args.cell != null ? setSelectedRanges([new SlickRange(args.row, args.cell)]) : _options.selectActiveCell || setSelectedRanges([]);
+ }
+ function handleKeyDown(e) {
+ var ranges, last, active = _grid.getActiveCell(), metaKey = e.ctrlKey || e.metaKey;
+ if (active && e.shiftKey && !metaKey && !e.altKey && (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {
+ ranges = getSelectedRanges().slice(), ranges.length || ranges.push(new SlickRange(active.row, active.cell)), last = ranges.pop(), last.contains(active.row, active.cell) || (last = new SlickRange(active.row, active.cell));
+ var dRow = last.toRow - last.fromRow, dCell = last.toCell - last.fromCell, dirRow = active.row == last.fromRow ? 1 : -1, dirCell = active.cell == last.fromCell ? 1 : -1;
+ e.which == 37 ? dCell -= dirCell : e.which == 39 ? dCell += dirCell : e.which == 38 ? dRow -= dirRow : e.which == 40 && (dRow += dirRow);
+ var new_last = new SlickRange(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);
+ if (removeInvalidRanges([new_last]).length) {
+ ranges.push(new_last);
+ var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow, viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;
+ _grid.scrollRowIntoView(viewRow), _grid.scrollCellIntoView(viewRow, viewCell);
+ } else
+ ranges.push(last);
+ setSelectedRanges(ranges), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ Utils.extend(this, {
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "CellSelectionModel",
+ onSelectedRangesChanged: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CellSelectionModel
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.checkboxselectcolumn.js b/dist/browser/plugins/slick.checkboxselectcolumn.js
new file mode 100644
index 00000000..7f9f7752
--- /dev/null
+++ b/dist/browser/plugins/slick.checkboxselectcolumn.js
@@ -0,0 +1,223 @@
+"use strict";
+(() => {
+ // src/plugins/slick.checkboxselectcolumn.js
+ var BindingEventService = Slick.BindingEventService, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function CheckboxSelectColumn(options) {
+ let _dataView, _grid, _isUsingDataView = !1, _selectableOverride = null, _headerRowNode, _selectAll_UID = createUID(), _handler = new EventHandler(), _selectedRowsLookup = {}, _defaults = {
+ columnId: "_checkbox_selector",
+ cssClass: null,
+ hideSelectAllCheckbox: !1,
+ toolTip: "Select/Deselect All",
+ width: 30,
+ applySelectOnAllPages: !1,
+ // defaults to false, when that is enabled the "Select All" will be applied to all pages (when using Pagination)
+ hideInColumnTitleRow: !1,
+ hideInFilterHeaderRow: !0
+ }, _isSelectAllChecked = !1, _bindingEventService = new BindingEventService(), _options = Utils.extend(!0, {}, _defaults, options);
+ typeof _options.selectableOverride == "function" && selectableOverride(_options.selectableOverride);
+ function init(grid) {
+ _grid = grid, _isUsingDataView = !Array.isArray(grid.getData()), _isUsingDataView && (_dataView = grid.getData()), _handler.subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged).subscribe(_grid.onClick, handleClick).subscribe(_grid.onKeyDown, handleKeyDown), _isUsingDataView && _dataView && _options.applySelectOnAllPages && _handler.subscribe(_dataView.onSelectedRowIdsChanged, handleDataViewSelectedIdsChanged).subscribe(_dataView.onPagingInfoChanged, handleDataViewSelectedIdsChanged), _options.hideInFilterHeaderRow || addCheckboxToFilterHeaderRow(grid), _options.hideInColumnTitleRow || _handler.subscribe(_grid.onHeaderClick, handleHeaderClick);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ if (_options = Utils.extend(!0, {}, _options, options2), _options.hideSelectAllCheckbox)
+ hideSelectAllFromColumnHeaderTitleRow(), hideSelectAllFromColumnHeaderFilterRow();
+ else if (_options.hideInColumnTitleRow ? hideSelectAllFromColumnHeaderTitleRow() : (renderSelectAllCheckbox(_isSelectAllChecked), _handler.subscribe(_grid.onHeaderClick, handleHeaderClick)), _options.hideInFilterHeaderRow)
+ hideSelectAllFromColumnHeaderFilterRow();
+ else {
+ let selectAllContainerElm = _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ if (selectAllContainerElm) {
+ selectAllContainerElm.style.display = "flex";
+ let selectAllInputElm = selectAllContainerElm.querySelector('input[type="checkbox"]');
+ selectAllInputElm && (selectAllInputElm.checked = _isSelectAllChecked);
+ }
+ }
+ }
+ function hideSelectAllFromColumnHeaderTitleRow() {
+ _grid.updateColumnHeader(_options.columnId, "", "");
+ }
+ function hideSelectAllFromColumnHeaderFilterRow() {
+ let selectAllContainerElm = _headerRowNode && _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ selectAllContainerElm && (selectAllContainerElm.style.display = "none");
+ }
+ function handleSelectedRowsChanged() {
+ let selectedRows = _grid.getSelectedRows(), lookup = {}, row, i, k, disabledCount = 0;
+ if (typeof _selectableOverride == "function")
+ for (k = 0; k < _grid.getDataLength(); k++) {
+ let dataItem = _grid.getDataItem(k);
+ checkSelectableOverride(i, dataItem, _grid) || disabledCount++;
+ }
+ let removeList = [];
+ for (i = 0; i < selectedRows.length; i++) {
+ row = selectedRows[i];
+ let rowItem = _grid.getDataItem(row);
+ checkSelectableOverride(i, rowItem, _grid) ? (lookup[row] = !0, lookup[row] !== _selectedRowsLookup[row] && (_grid.invalidateRow(row), delete _selectedRowsLookup[row])) : removeList.push(row);
+ }
+ for (i in _selectedRowsLookup)
+ _grid.invalidateRow(i);
+ if (_selectedRowsLookup = lookup, _grid.render(), _isSelectAllChecked = selectedRows && selectedRows.length + disabledCount >= _grid.getDataLength(), (!_isUsingDataView || !_options.applySelectOnAllPages) && (!_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow)) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ if (removeList.length > 0) {
+ for (i = 0; i < removeList.length; i++) {
+ let remIdx = selectedRows.indexOf(removeList[i]);
+ selectedRows.splice(remIdx, 1);
+ }
+ _grid.setSelectedRows(selectedRows, "click.cleanup");
+ }
+ }
+ function handleDataViewSelectedIdsChanged() {
+ let selectedIds = _dataView.getAllSelectedFilteredIds(), filteredItems = _dataView.getFilteredItems(), disabledCount = 0;
+ if (typeof _selectableOverride == "function" && selectedIds.length > 0)
+ for (let k = 0; k < _dataView.getItemCount(); k++) {
+ let dataItem = _dataView.getItemByIdx(k), idProperty = _dataView.getIdPropertyName(), dataItemId = dataItem[idProperty];
+ filteredItems.findIndex(function(item) {
+ return item[idProperty] === dataItemId;
+ }) >= 0 && !checkSelectableOverride(k, dataItem, _grid) && disabledCount++;
+ }
+ if (_isSelectAllChecked = (selectedIds && selectedIds.length) + disabledCount >= filteredItems.length, !_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ }
+ function handleKeyDown(e, args) {
+ e.which == 32 && _grid.getColumns()[args.cell].id === _options.columnId && ((!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) && toggleRowSelection(args.row), e.preventDefault(), e.stopImmediatePropagation());
+ }
+ function handleClick(e, args) {
+ if (_grid.getColumns()[args.cell].id === _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ toggleRowSelection(args.row), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function toggleRowSelection(row) {
+ let dataContext = _grid.getDataItem(row);
+ if (checkSelectableOverride(row, dataContext, _grid)) {
+ if (_selectedRowsLookup[row]) {
+ let newSelectedRows = _grid.getSelectedRows().filter((n) => n !== row);
+ _grid.setSelectedRows(newSelectedRows, "click.toggle");
+ } else
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(row), "click.toggle");
+ _grid.setActiveCell(row, getCheckboxColumnCellIndex());
+ }
+ }
+ function selectRows(rowArray) {
+ let i, l = rowArray.length, addRows = [];
+ for (i = 0; i < l; i++)
+ _selectedRowsLookup[rowArray[i]] || (addRows[addRows.length] = rowArray[i]);
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(addRows), "SlickCheckboxSelectColumn.selectRows");
+ }
+ function deSelectRows(rowArray) {
+ let i, l = rowArray.length, removeRows = [];
+ for (i = 0; i < l; i++)
+ _selectedRowsLookup[rowArray[i]] && (removeRows[removeRows.length] = rowArray[i]);
+ _grid.setSelectedRows(_grid.getSelectedRows().filter((n) => removeRows.indexOf(n) < 0), "SlickCheckboxSelectColumn.deSelectRows");
+ }
+ function handleHeaderClick(e, args) {
+ if (args.column.id == _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ let isAllSelected = e.target.checked, caller = isAllSelected ? "click.selectAll" : "click.unselectAll", rows = [];
+ if (isAllSelected) {
+ for (let i = 0; i < _grid.getDataLength(); i++) {
+ let rowItem = _grid.getDataItem(i);
+ !rowItem.__group && !rowItem.__groupTotals && checkSelectableOverride(i, rowItem, _grid) && rows.push(i);
+ }
+ isAllSelected = !0;
+ }
+ if (_isUsingDataView && _dataView && _options.applySelectOnAllPages) {
+ let ids = [], filteredItems = _dataView.getFilteredItems();
+ for (let j = 0; j < filteredItems.length; j++) {
+ let dataviewRowItem = filteredItems[j];
+ checkSelectableOverride(j, dataviewRowItem, _grid) && ids.push(dataviewRowItem[_dataView.getIdPropertyName()]);
+ }
+ _dataView.setSelectedIds(ids, { isRowBeingAdded: isAllSelected });
+ }
+ _grid.setSelectedRows(rows, caller), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ let _checkboxColumnCellIndex = null;
+ function getCheckboxColumnCellIndex() {
+ if (_checkboxColumnCellIndex === null) {
+ _checkboxColumnCellIndex = 0;
+ let colArr = _grid.getColumns();
+ for (let i = 0; i < colArr.length; i++)
+ colArr[i].id == _options.columnId && (_checkboxColumnCellIndex = i);
+ }
+ return _checkboxColumnCellIndex;
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : " ",
+ toolTip: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ cssClass: _options.cssClass,
+ hideSelectAllCheckbox: _options.hideSelectAllCheckbox,
+ formatter: checkboxSelectionFormatter,
+ // exclude from all menus, defaults to true unless the option is provided differently by the user
+ excludeFromColumnPicker: typeof _options.excludeFromColumnPicker != "undefined" ? _options.excludeFromColumnPicker : !0,
+ excludeFromGridMenu: typeof _options.excludeFromGridMenu != "undefined" ? _options.excludeFromGridMenu : !0,
+ excludeFromHeaderMenu: typeof _options.excludeFromHeaderMenu != "undefined" ? _options.excludeFromHeaderMenu : !0
+ };
+ }
+ function addCheckboxToFilterHeaderRow(grid) {
+ _handler.subscribe(grid.onHeaderRowCellRendered, function(e, args) {
+ if (args.column.field === "sel") {
+ Utils.emptyElement(args.node);
+ let spanElm = document.createElement("span");
+ spanElm.id = "filter-checkbox-selectall-container";
+ let inputElm = document.createElement("input");
+ inputElm.type = "checkbox", inputElm.id = `header-filter-selector${_selectAll_UID}`;
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `header-filter-selector${_selectAll_UID}`, spanElm.appendChild(inputElm), spanElm.appendChild(labelElm), args.node.appendChild(spanElm), _headerRowNode = args.node, _bindingEventService.bind(spanElm, "click", (e2) => handleHeaderClick(e2, args));
+ }
+ });
+ }
+ function createUID() {
+ return Math.round(1e7 * Math.random());
+ }
+ function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ let UID = createUID() + row;
+ return dataContext && checkSelectableOverride(row, dataContext, grid) ? _selectedRowsLookup[row] ? " " : " " : null;
+ }
+ function checkSelectableOverride(row, dataContext, grid) {
+ return typeof _selectableOverride == "function" ? _selectableOverride(row, dataContext, grid) : !0;
+ }
+ function renderSelectAllCheckbox(isSelectAllChecked) {
+ isSelectAllChecked ? _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip) : _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip);
+ }
+ function selectableOverride(overrideFn) {
+ _selectableOverride = overrideFn;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "CheckboxSelectColumn",
+ deSelectRows,
+ selectRows,
+ getColumnDefinition,
+ getOptions,
+ selectableOverride,
+ setOptions
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CheckboxSelectColumn
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.contextmenu.js b/dist/browser/plugins/slick.contextmenu.js
new file mode 100644
index 00000000..c88a61be
--- /dev/null
+++ b/dist/browser/plugins/slick.contextmenu.js
@@ -0,0 +1,204 @@
+"use strict";
+(() => {
+ // src/plugins/slick.contextmenu.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventData = Slick.EventData, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function ContextMenu(optionProperties) {
+ let _contextMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler(), _self = this, _optionTitleElm, _commandTitleElm, _menuElm, _bindingEventService = new BindingEventService(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: -4,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !1,
+ maxHeight: "none",
+ width: "auto",
+ optionShownOverColumnIds: [],
+ commandShownOverColumnIds: []
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _contextMenuProperties = Utils.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onContextMenu, handleOnContextMenu), _contextMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _contextMenuProperties = Utils.extend({}, _contextMenuProperties, newOptions), newOptions.commandShownOverColumnIds && (_contextMenuProperties.commandShownOverColumnIds = newOptions.commandShownOverColumnIds), newOptions.optionShownOverColumnIds && (_contextMenuProperties.optionShownOverColumnIds = newOptions.optionShownOverColumnIds);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ e instanceof EventData && (e = e.getNativeEvent());
+ let targetEvent = e.touches ? e.touches[0] : e, cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), isColumnOptionAllowed = checkIsColumnAllowed(_contextMenuProperties.optionShownOverColumnIds, columnDef.id), isColumnCommandAllowed = checkIsColumnAllowed(_contextMenuProperties.commandShownOverColumnIds, columnDef.id), commandItems = _contextMenuProperties.commandItems || [], optionItems = _contextMenuProperties.optionItems || [];
+ if (!columnDef || !isColumnCommandAllowed && !isColumnOptionAllowed || !commandItems.length && !optionItems.length || (destroyMenu(e), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_contextMenuProperties.maxHeight) ? _contextMenuProperties.maxHeight : _contextMenuProperties.maxHeight + "px", width = isNaN(_contextMenuProperties.width) ? _contextMenuProperties.width : _contextMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-context-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${targetEvent.pageY}px`, _menuElm.style.left = `${targetEvent.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-context-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_contextMenuProperties.hideOptionSection && isColumnOptionAllowed && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-context-menu-option-list", optionMenuElm.role = "menu", _contextMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _contextMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_contextMenuProperties.hideCommandSection && isColumnCommandAllowed && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-context-menu-command-list", commandMenuElm.role = "menu", !_contextMenuProperties.hideCloseButton && (!isColumnOptionAllowed || optionItems.length === 0 || _contextMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _contextMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-context-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function checkIsColumnAllowed(columnIds, columnId) {
+ let isAllowedColumn = !1;
+ if (columnIds && columnIds.length > 0)
+ for (let o = 0, ln = columnIds.length; o < ln; o++)
+ columnIds[o] === columnId && (isAllowedColumn = !0);
+ else
+ isAllowedColumn = !0;
+ return isAllowedColumn;
+ }
+ function handleOnContextMenu(e, args) {
+ e instanceof EventData && (e = e.getNativeEvent()), e.preventDefault();
+ let cell = _grid.getCellFromEvent(e), columnDef = _grid.getColumns()[cell.cell], dataContext = _grid.getDataItem(cell.row);
+ args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_contextMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "click", (e2) => {
+ e2.defaultPrevented || destroyMenu(e2, { cell: _currentCell, row: _currentRow });
+ }));
+ }
+ function populateOptionItems(contextMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !contextMenu)) {
+ contextMenu && contextMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = contextMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i = 0, ln = optionItems.length; i < ln; i++) {
+ let addClickListener = !0, item = optionItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.role = "button", iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(contextMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !contextMenu)) {
+ contextMenu && contextMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = contextMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i = 0, ln = commandItems.length; i < ln; i++) {
+ let addClickListener = !0, item = commandItems[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider)
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row), cellValue;
+ if (Object.prototype.hasOwnProperty.call(dataContext, columnDef && columnDef.field) && (cellValue = dataContext[columnDef.field]), command != null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext,
+ value: cellValue
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (item.disabled || item.divider || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function repositionMenu(e) {
+ let targetEvent = e.touches ? e.touches[0] : e, parentElm = e.target.closest(".slick-cell"), menuOffsetLeft = targetEvent.pageX, menuOffsetTop = parentElm ? Utils.offset(parentElm).top : targetEvent.pageY, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _contextMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _contextMenuProperties.autoAdjustDropOffset, sideOffset = _contextMenuProperties.autoAlignSideOffset;
+ if (_contextMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_contextMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - menuWidth - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "ContextMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent(),
+ onBeforeMenuShow: new SlickEvent(),
+ onBeforeMenuClose: new SlickEvent(),
+ onCommand: new SlickEvent(),
+ onOptionSelected: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ ContextMenu
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.crossgridrowmovemanager.js b/dist/browser/plugins/slick.crossgridrowmovemanager.js
new file mode 100644
index 00000000..0fcbec0b
--- /dev/null
+++ b/dist/browser/plugins/slick.crossgridrowmovemanager.js
@@ -0,0 +1,125 @@
+"use strict";
+(() => {
+ // src/plugins/slick.crossgridrowmovemanager.js
+ var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function CrossGridRowMoveManager(options) {
+ var _grid, _canvas, _toGrid, _toCanvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _toGrid = options.toGrid, _toCanvas = _toGrid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows)), selectedRows.sort(function(a, b) {
+ return a - b;
+ });
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.fromGrid = _grid, dd.toGrid = _toGrid, dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_toCanvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _toCanvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_toCanvas.clientWidth}px`, dd.guide.style.top = "-1000px", _toCanvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils.offset(_toCanvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _toGrid.getOptions().rowHeight), _toGrid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _toGrid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _toGrid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_toGrid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils.extend(this, {
+ onBeforeMoveRows: new SlickEvent(),
+ onMoveRows: new SlickEvent(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "CrossGridRowMoveManager"
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ CrossGridRowMoveManager
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.customtooltip.js b/dist/browser/plugins/slick.customtooltip.js
new file mode 100644
index 00000000..5298b20d
--- /dev/null
+++ b/dist/browser/plugins/slick.customtooltip.js
@@ -0,0 +1,184 @@
+"use strict";
+(() => {
+ // src/plugins/slick.customtooltip.js
+ var EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function CustomTooltip(options) {
+ var _cancellablePromise, _cellNodeElm, _dataView, _grid, _gridOptions, _tooltipElm, _defaults = {
+ className: "slick-custom-tooltip",
+ offsetLeft: 0,
+ offsetRight: 0,
+ offsetTopBottom: 4,
+ hideArrow: !1,
+ tooltipTextMaxLength: 700,
+ regularTooltipWhiteSpace: "pre-line",
+ whiteSpace: "normal"
+ }, _eventHandler = new EventHandler(), _cellTooltipOptions = {}, _options;
+ function init(grid) {
+ _grid = grid;
+ var _data = grid && grid.getData() || [];
+ _dataView = Array.isArray(_data) ? null : _data, _gridOptions = grid.getOptions() || {}, _options = Utils.extend(!0, {}, _defaults, _gridOptions.customTooltip, options), _eventHandler.subscribe(grid.onMouseEnter, handleOnMouseEnter).subscribe(grid.onHeaderMouseEnter, handleOnHeaderMouseEnter).subscribe(grid.onHeaderRowMouseEnter, handleOnHeaderRowMouseEnter).subscribe(grid.onMouseLeave, hideTooltip).subscribe(grid.onHeaderMouseLeave, hideTooltip).subscribe(grid.onHeaderRowMouseLeave, hideTooltip);
+ }
+ function destroy() {
+ hideTooltip(), _eventHandler.unsubscribeAll();
+ }
+ function handleOnHeaderMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-header-column");
+ }
+ function handleOnHeaderRowMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-headerrow-column");
+ }
+ function handleOnHeaderMouseEnterByType(e, args, selector) {
+ hideTooltip();
+ var cell = {
+ row: -1,
+ // negative row to avoid pulling any dataContext while rendering
+ cell: _grid.getColumns().findIndex(function(col) {
+ return args && args.column && args.column.id === col.id;
+ })
+ }, columnDef = args.column, item = {}, isHeaderRowType = selector === "slick-headerrow-column";
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = isHeaderRowType ? "header-row" : "header", _cellTooltipOptions = Utils.extend(!0, {}, _options, columnDef.customTooltip), !(columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args)) && columnDef && e.target) {
+ _cellNodeElm = findClosestHeaderNode(e.target, selector);
+ var formatter = isHeaderRowType ? _cellTooltipOptions.headerRowFormatter : _cellTooltipOptions.headerFormatter;
+ if (_cellTooltipOptions.useRegularTooltip || !formatter) {
+ var formatterOrText = isHeaderRowType ? _cellTooltipOptions.useRegularTooltip ? null : formatter : columnDef.name;
+ renderRegularTooltip(formatterOrText, cell, null, columnDef, item);
+ } else
+ _cellNodeElm && typeof formatter == "function" && renderTooltipFormatter(formatter, cell, null, columnDef, item);
+ }
+ }
+ function findClosestHeaderNode(elm, selector) {
+ return typeof elm.closest == "function" ? elm.closest("." + selector) : elm.classList.contains(selector) ? elm : elm.parentElement.classList.contains(selector) ? elm.parentElement : null;
+ }
+ function handleOnMouseEnter(e, args) {
+ if (hideTooltip(), _grid && e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (cell) {
+ var item = _dataView ? _dataView.getItem(cell.row) : _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ if (_cellNodeElm = _grid.getCellNode(cell.row, cell.cell), _cellTooltipOptions = Utils.extend(!0, {}, _options, columnDef.customTooltip), item && columnDef) {
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = "cell", columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args))
+ return;
+ var value = item.hasOwnProperty(columnDef.field) ? item[columnDef.field] : null;
+ if (_cellTooltipOptions.useRegularTooltip || !_cellTooltipOptions.formatter)
+ renderRegularTooltip(columnDef.formatter, cell, value, columnDef, item);
+ else if (typeof _cellTooltipOptions.formatter == "function" && renderTooltipFormatter(_cellTooltipOptions.formatter, cell, value, columnDef, item), typeof _cellTooltipOptions.asyncProcess == "function") {
+ var asyncProcess = _cellTooltipOptions.asyncProcess(cell.row, cell.cell, value, columnDef, item, _grid);
+ if (!_cellTooltipOptions.asyncPostFormatter)
+ throw new Error('[SlickGrid] when using "asyncProcess", you must also provide an "asyncPostFormatter" formatter');
+ asyncProcess instanceof Promise && (_cancellablePromise = cancellablePromise(asyncProcess), _cancellablePromise.promise.then(function(asyncResult) {
+ asyncProcessCallback(asyncResult, cell, value, columnDef, item);
+ }).catch(function(error) {
+ if (!error.isPromiseCancelled)
+ throw error;
+ }));
+ }
+ }
+ }
+ }
+ }
+ function findFirstElementAttribute(inputElm, attributes) {
+ if (inputElm) {
+ var outputAttrData;
+ return attributes.forEach(function(attribute) {
+ var attrData = inputElm.getAttribute(attribute);
+ attrData && (outputAttrData = attrData);
+ }), outputAttrData;
+ }
+ return null;
+ }
+ function renderRegularTooltip(formatterOrText, cell, value, columnDef, item) {
+ var tmpDiv = document.createElement("div");
+ tmpDiv.innerHTML = parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item);
+ var tooltipText = columnDef.toolTip || "", tmpTitleElm;
+ tooltipText || (_cellNodeElm && _cellNodeElm.clientWidth < _cellNodeElm.scrollWidth && !_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? (tooltipText = (_cellNodeElm.textContent || "").trim() || "", _cellTooltipOptions.tooltipTextMaxLength && tooltipText.length > _cellTooltipOptions.tooltipTextMaxLength && (tooltipText = tooltipText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..."), tmpTitleElm = _cellNodeElm) : (_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? tmpTitleElm = tmpDiv.querySelector("[title], [data-slick-tooltip]") : (tmpTitleElm = findFirstElementAttribute(_cellNodeElm, ["title", "data-slick-tooltip"]) ? _cellNodeElm : tmpDiv.querySelector("[title], [data-slick-tooltip]"), (!tmpTitleElm || !findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"])) && _cellNodeElm && (tmpTitleElm = _cellNodeElm.querySelector("[title], [data-slick-tooltip]"))), (!tooltipText || typeof formatterOrText == "function" && _cellTooltipOptions.useRegularTooltipFromFormatterOnly) && (tooltipText = findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"]) || ""))), tooltipText !== "" && renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText), swapAndClearTitleAttribute(tmpTitleElm, tooltipText);
+ }
+ function swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
+ var titleElm = inputTitleElm || _cellNodeElm && (_cellNodeElm.hasAttribute("title") && _cellNodeElm.getAttribute("title") ? _cellNodeElm : _cellNodeElm.querySelector("[title]"));
+ titleElm && (titleElm.setAttribute("data-slick-tooltip", tooltipText || ""), titleElm.hasAttribute("title") && titleElm.setAttribute("title", ""));
+ }
+ function asyncProcessCallback(asyncResult, cell, value, columnDef, dataContext) {
+ hideTooltip();
+ var itemWithAsyncData = Utils.extend(!0, {}, dataContext, { [_cellTooltipOptions.asyncParamsPropName || "__params"]: asyncResult });
+ renderTooltipFormatter(_cellTooltipOptions.asyncPostFormatter, cell, value, columnDef, itemWithAsyncData);
+ }
+ function calculateAvailableSpaceTop(element) {
+ var availableSpace = 0, pageScrollTop = windowScrollPosition().top, elmOffset = getHtmlElementOffset(element);
+ if (elmOffset) {
+ var elementOffsetTop = elmOffset.top;
+ availableSpace = elementOffsetTop - pageScrollTop;
+ }
+ return availableSpace;
+ }
+ function cancellablePromise(inputPromise) {
+ var hasCancelled = !1;
+ return inputPromise instanceof Promise ? {
+ promise: inputPromise.then(function(result) {
+ if (hasCancelled)
+ throw { isPromiseCancelled: !0 };
+ return result;
+ }),
+ cancel: function() {
+ hasCancelled = !0;
+ }
+ } : inputPromise;
+ }
+ function windowScrollPosition() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ function getHtmlElementOffset(element) {
+ if (element) {
+ var rect = element.getBoundingClientRect(), top = 0, left = 0, bottom = 0, right = 0;
+ return rect.top !== void 0 && rect.left !== void 0 && (top = rect.top + window.pageYOffset, left = rect.left + window.pageXOffset, right = rect.right, bottom = rect.bottom), { top, left, bottom, right };
+ }
+ }
+ function hideTooltip() {
+ _cancellablePromise && _cancellablePromise.cancel && _cancellablePromise.cancel();
+ var prevTooltip = document.body.querySelector("." + _cellTooltipOptions.className + "." + _grid.getUID());
+ prevTooltip && prevTooltip.remove && prevTooltip.remove();
+ }
+ function reposition(cell) {
+ if (_tooltipElm) {
+ _cellNodeElm = _cellNodeElm || _grid.getCellNode(cell.row, cell.cell);
+ var cellPosition = getHtmlElementOffset(_cellNodeElm), cellContainerWidth = _cellNodeElm.offsetWidth, calculatedTooltipHeight = _tooltipElm.getBoundingClientRect().height, calculatedTooltipWidth = _tooltipElm.getBoundingClientRect().width, calculatedBodyWidth = document.body.offsetWidth || window.innerWidth, newPositionTop = cellPosition.top - _tooltipElm.offsetHeight - (_cellTooltipOptions.offsetTopBottom || 0), newPositionLeft = (cellPosition && cellPosition.left || 0) - (_cellTooltipOptions.offsetRight || 0), position = _cellTooltipOptions.position || "auto";
+ position === "center" ? (newPositionLeft += cellContainerWidth / 2 - calculatedTooltipWidth / 2 + (_cellTooltipOptions.offsetRight || 0), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-center-align")) : position === "right-align" || (position === "auto" || position !== "left-align") && newPositionLeft + calculatedTooltipWidth > calculatedBodyWidth ? (newPositionLeft -= calculatedTooltipWidth - cellContainerWidth - (_cellTooltipOptions.offsetLeft || 0), _tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.add("arrow-right-align")) : (_tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-left-align")), position === "bottom" || position === "auto" && calculatedTooltipHeight > calculateAvailableSpaceTop(_cellNodeElm) ? (newPositionTop = cellPosition.top + (_gridOptions.rowHeight || 0) + (_cellTooltipOptions.offsetTopBottom || 0), _tooltipElm.classList.remove("arrow-down"), _tooltipElm.classList.add("arrow-up")) : (_tooltipElm.classList.add("arrow-down"), _tooltipElm.classList.remove("arrow-up")), _tooltipElm.style.top = newPositionTop + "px", _tooltipElm.style.left = newPositionLeft + "px";
+ }
+ }
+ function parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item) {
+ if (typeof formatterOrText == "function") {
+ var tooltipText = formatterOrText(cell.row, cell.cell, value, columnDef, item, _grid), formatterText = typeof tooltipText == "object" && tooltipText && tooltipText.text ? tooltipText.text : typeof tooltipText == "string" ? tooltipText : "";
+ return _grid.sanitizeHtmlString(formatterText);
+ } else if (typeof formatterOrText == "string")
+ return _grid.sanitizeHtmlString(formatterOrText);
+ return "";
+ }
+ function renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) {
+ _tooltipElm = document.createElement("div"), _tooltipElm.className = _cellTooltipOptions.className, _tooltipElm.classList.add(_grid.getUID()), _tooltipElm.classList.add("l" + cell.cell), _tooltipElm.classList.add("r" + cell.cell);
+ var outputText = tooltipText || parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || "";
+ outputText = _cellTooltipOptions.tooltipTextMaxLength && outputText.length > _cellTooltipOptions.tooltipTextMaxLength ? outputText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..." : outputText;
+ let finalOutputText = "";
+ !tooltipText || _cellTooltipOptions && _cellTooltipOptions.renderRegularTooltipAsHtml ? (finalOutputText = _grid.sanitizeHtmlString(outputText), _tooltipElm.innerHTML = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.whiteSpace || _defaults.whiteSpace) : (finalOutputText = outputText || "", _tooltipElm.textContent = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.regularTooltipWhiteSpace || _defaults.regularTooltipWhiteSpace), _cellTooltipOptions.maxHeight && (_tooltipElm.style.maxHeight = _cellTooltipOptions.maxHeight + "px"), _cellTooltipOptions.maxWidth && (_tooltipElm.style.maxWidth = _cellTooltipOptions.maxWidth + "px"), finalOutputText && (document.body.appendChild(_tooltipElm), reposition(cell), _cellTooltipOptions.hideArrow || _tooltipElm.classList.add("tooltip-arrow"), swapAndClearTitleAttribute(inputTitleElm, outputText));
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ function setOptions(newOptions) {
+ _options = Utils.extend({}, _options, newOptions);
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ hide: hideTooltip,
+ setOptions,
+ pluginName: "CustomTooltip"
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ CustomTooltip
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.draggablegrouping.js b/dist/browser/plugins/slick.draggablegrouping.js
new file mode 100644
index 00000000..ea6370cc
--- /dev/null
+++ b/dist/browser/plugins/slick.draggablegrouping.js
@@ -0,0 +1,191 @@
+"use strict";
+(() => {
+ // src/plugins/slick.draggablegrouping.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function DraggableGrouping(options) {
+ var _grid, _gridUid, _gridColumns, _dataView, _dropzoneElm, _droppableInstance, dropzonePlaceholder, groupToggler, _defaults = {}, onGroupChanged = new SlickEvent(), _bindingEventService = new BindingEventService(), _handler = new EventHandler(), _sortableLeftInstance, _sortableRightInstance;
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _gridUid = _grid.getUID(), _gridColumns = _grid.getColumns(), _dataView = _grid.getData(), _dropzoneElm = grid.getPreHeaderPanel(), _dropzoneElm.classList.add("slick-dropzone");
+ var dropPlaceHolderText = options.dropPlaceHolderText || "Drop a column header here to group by the column";
+ dropzonePlaceholder = document.createElement("div"), dropzonePlaceholder.className = "slick-placeholder", dropzonePlaceholder.textContent = dropPlaceHolderText, groupToggler = document.createElement("div"), groupToggler.className = "slick-group-toggle-all expanded", groupToggler.style.display = "none", _dropzoneElm.appendChild(dropzonePlaceholder), _dropzoneElm.appendChild(groupToggler), setupColumnDropbox(), _handler.subscribe(_grid.onHeaderCellRendered, function(e, args) {
+ var column = args.column, node = args.node;
+ if (!Utils.isEmptyObject(column.grouping) && node && (node.style.cursor = "pointer", options.groupIconCssClass || options.groupIconImage)) {
+ let groupableIconElm = document.createElement("span");
+ groupableIconElm.className = "slick-column-groupable", options.groupIconCssClass && groupableIconElm.classList.add(...options.groupIconCssClass.split(" ")), options.groupIconImage && (groupableIconElm.style.background = "url(" + options.groupIconImage + ") no-repeat center center"), node.appendChild(groupableIconElm);
+ }
+ });
+ for (var i = 0; i < _gridColumns.length; i++) {
+ var columnId = _gridColumns[i].field;
+ _grid.updateColumnHeader(columnId);
+ }
+ }
+ function setupColumnReorder(grid, headers, _headerColumnWidthDiff, setColumns, setupColumnResize, _columns, getColumnIndex, _uid, trigger) {
+ let dropzoneElm = grid.getPreHeaderPanel();
+ var sortableOptions = {
+ animation: 50,
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dataIdAttr: "data-id",
+ group: {
+ name: "shared",
+ pull: "clone",
+ put: !1
+ },
+ revertClone: !0,
+ // filter: function (_e, target) {
+ // // block column from being able to be dragged if it's already a grouped column
+ // // NOTE: need to disable for now since it also blocks the column reordering
+ // return columnsGroupBy.some(c => c.id === target.getAttribute('data-id'));
+ // },
+ onStart: function() {
+ dropzoneElm.classList.add("slick-dropzone-hover"), dropzoneElm.classList.add("slick-dropzone-placeholder-hover");
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm.style.display = "inline-block", groupToggler.style.display = "none", dropzoneElm.querySelectorAll(".slick-dropped-grouping").forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "none");
+ },
+ onEnd: function(e) {
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ dropzoneElm.classList.remove("slick-dropzone-hover"), draggablePlaceholderElm.classList.remove("slick-dropzone-placeholder-hover"), dropzonePlaceholder && (dropzonePlaceholder.style.display = "none"), draggablePlaceholderElm && draggablePlaceholderElm.parentElement && draggablePlaceholderElm.parentElement.classList.remove("slick-dropzone-placeholder-hover");
+ let droppedGroupingElms = dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ if (droppedGroupingElms.forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "inline-flex"), droppedGroupingElms.length && (draggablePlaceholderElm && (draggablePlaceholderElm.style.display = "none"), groupToggler.style.display = "inline-block"), !grid.getEditorLock().commitCurrentEdit())
+ return;
+ let reorderedIds = _sortableLeftInstance && _sortableLeftInstance.toArray() || [];
+ if (headers.length > 1) {
+ let ids = _sortableRightInstance && _sortableRightInstance.toArray() || [];
+ for (let id of ids)
+ reorderedIds.push(id);
+ }
+ let finalReorderedColumns = [], reorderedColumns = grid.getColumns();
+ for (let reorderedId of reorderedIds)
+ finalReorderedColumns.push(reorderedColumns[getColumnIndex(reorderedId)]);
+ setColumns(finalReorderedColumns), trigger(grid.onColumnsReordered, { grid }), e.stopPropagation(), setupColumnResize();
+ }
+ };
+ return _sortableLeftInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-left`), sortableOptions), _sortableRightInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-right`), sortableOptions), {
+ sortableLeftInstance: _sortableLeftInstance,
+ sortableRightInstance: _sortableRightInstance
+ };
+ }
+ function destroy() {
+ _sortableLeftInstance && _sortableLeftInstance.el && _sortableLeftInstance.destroy(), _sortableRightInstance && _sortableRightInstance.el && _sortableRightInstance.destroy(), onGroupChanged.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), Utils.emptyElement(document.querySelector(`.${_gridUid} .slick-preheader-panel`));
+ }
+ function addDragOverDropzoneListeners() {
+ let draggablePlaceholderElm = _dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm && (_bindingEventService.bind(draggablePlaceholderElm, "dragover", (e) => e.preventDefault), _bindingEventService.bind(draggablePlaceholderElm, "dragenter", () => _dropzoneElm.classList.add("slick-dropzone-hover")), _bindingEventService.bind(draggablePlaceholderElm, "dragleave", () => _dropzoneElm.classList.remove("slick-dropzone-hover")));
+ }
+ function setupColumnDropbox() {
+ let dropzoneElm = _dropzoneElm;
+ _droppableInstance = Sortable.create(dropzoneElm, {
+ group: "shared",
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-droppable-sortitem-hover",
+ draggable: ".slick-dropped-grouping",
+ dragoverBubble: !0,
+ onAdd: (evt) => {
+ let el = evt.item, elId = el.getAttribute("id");
+ elId && elId.replace(_gridUid, "") && handleGroupByDrop(dropzoneElm, Sortable.utils.clone(evt.item)), evt.clone.style.opacity = ".5", el.parentNode && el.parentNode.removeChild(el);
+ },
+ onUpdate: () => {
+ let sortArray = _droppableInstance && _droppableInstance.toArray() || [], newGroupingOrder = [];
+ for (var i = 0, l = sortArray.length; i < l; i++)
+ for (var a = 0, b = columnsGroupBy.length; a < b; a++)
+ if (columnsGroupBy[a].id == sortArray[i]) {
+ newGroupingOrder.push(columnsGroupBy[a]);
+ break;
+ }
+ columnsGroupBy = newGroupingOrder, updateGroupBy("sort-group");
+ }
+ }), addDragOverDropzoneListeners(), groupToggler && _bindingEventService.bind(groupToggler, "click", (event) => {
+ let target = event.target;
+ toggleGroupToggler(target, target && target.classList.contains("expanded"));
+ });
+ }
+ var columnsGroupBy = [];
+ function handleGroupByDrop(containerElm, headerColumnElm) {
+ let headerColDataId = headerColumnElm.getAttribute("data-id"), columnId = headerColDataId && headerColDataId.replace(_gridUid, ""), columnAllowed = !0;
+ for (let colGroupBy of columnsGroupBy)
+ colGroupBy.id === columnId && (columnAllowed = !1);
+ if (columnAllowed) {
+ for (let col of _gridColumns)
+ if (col.id === columnId && col.grouping && !Utils.isEmptyObject(col.grouping)) {
+ let columnNameElm = headerColumnElm.querySelector(".slick-column-name"), entryElm = document.createElement("div");
+ entryElm.id = `${_gridUid}_${col.id}_entry`, entryElm.className = "slick-dropped-grouping", entryElm.dataset.id = `${col.id}`;
+ let groupTextElm = document.createElement("div");
+ groupTextElm.className = "slick-dropped-grouping-title", groupTextElm.style.display = "inline-flex", groupTextElm.textContent = columnNameElm ? columnNameElm.textContent : headerColumnElm.textContent, entryElm.appendChild(groupTextElm);
+ let groupRemoveIconElm = document.createElement("div");
+ groupRemoveIconElm.className = "slick-groupby-remove", options.deleteIconCssClass && groupRemoveIconElm.classList.add(...options.deleteIconCssClass.split(" ")), options.deleteIconImage && groupRemoveIconElm.classList.add(...options.deleteIconImage.split(" ")), options.deleteIconCssClass || groupRemoveIconElm.classList.add("slick-groupby-remove-icon"), !options.deleteIconCssClass && !options.deleteIconImage && groupRemoveIconElm.classList.add("slick-groupby-remove-image"), options && options.hideGroupSortIcons !== !0 && col.sortable && col.grouping && col.grouping.sortAsc === void 0 && (col.grouping.sortAsc = !0), entryElm.appendChild(groupRemoveIconElm), entryElm.appendChild(document.createElement("div")), containerElm.appendChild(entryElm), addColumnGroupBy(col), addGroupByRemoveClickHandler(col.id, groupRemoveIconElm, headerColumnElm, entryElm);
+ }
+ groupToggler.style.display = "inline-block";
+ }
+ }
+ function addColumnGroupBy(column) {
+ columnsGroupBy.push(column), updateGroupBy("add-group");
+ }
+ function addGroupByRemoveClickHandler(id, groupRemoveIconElm, headerColumnElm, entry) {
+ _bindingEventService.bind(groupRemoveIconElm, "click", () => {
+ let boundedElms = _bindingEventService.boundedEvents.filter((boundedEvent) => boundedEvent.element === groupRemoveIconElm);
+ for (let boundedEvent of boundedElms)
+ _bindingEventService.unbind(boundedEvent.element, "click", boundedEvent.listener);
+ removeGroupBy(id, headerColumnElm, entry);
+ });
+ }
+ function setDroppedGroups(groupingInfo) {
+ let groupingInfos = Array.isArray(groupingInfo) ? groupingInfo : [groupingInfo];
+ dropzonePlaceholder.style.display = "none";
+ for (let groupInfo of groupingInfos) {
+ let columnElm = _grid.getHeaderColumn(groupInfo);
+ handleGroupByDrop(_dropzoneElm, columnElm);
+ }
+ }
+ function clearDroppedGroups() {
+ columnsGroupBy = [], updateGroupBy("clear-all");
+ let allDroppedGroupingElms = _dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ groupToggler.style.display = "none";
+ for (let groupElm of Array.from(allDroppedGroupingElms)) {
+ let groupRemoveBtnElm = _dropzoneElm.querySelector(".slick-groupby-remove");
+ groupRemoveBtnElm && groupRemoveBtnElm.remove(), groupElm && groupElm.remove();
+ }
+ dropzonePlaceholder.style.display = "inline-block";
+ }
+ function removeFromArray(arr) {
+ for (var what, a = arguments, L = a.length, ax; L > 1 && arr.length; )
+ for (what = a[--L]; (ax = arr.indexOf(what)) != -1; )
+ arr.splice(ax, 1);
+ return arr;
+ }
+ function removeGroupBy(id, _column, entry) {
+ entry.remove();
+ var groupby = [];
+ _gridColumns.forEach(function(e) {
+ groupby[e.id] = e;
+ }), removeFromArray(columnsGroupBy, groupby[id]), columnsGroupBy.length === 0 && (dropzonePlaceholder.style = "block", groupToggler.style.display = "none"), updateGroupBy("remove-group");
+ }
+ function toggleGroupToggler(targetElm, collapsing = !0, shouldExecuteDataViewCommand = !0) {
+ targetElm && (collapsing === !0 ? (targetElm.classList.add("collapsed"), targetElm.classList.remove("expanded"), shouldExecuteDataViewCommand && _dataView.collapseAllGroups()) : (targetElm.classList.remove("collapsed"), targetElm.classList.add("expanded"), shouldExecuteDataViewCommand && _dataView.expandAllGroups()));
+ }
+ function updateGroupBy(originator) {
+ if (columnsGroupBy.length === 0) {
+ _dataView.setGrouping([]), onGroupChanged.notify({ caller: originator, groupColumns: [] });
+ return;
+ }
+ var groupingArray = [];
+ columnsGroupBy.forEach(function(element) {
+ groupingArray.push(element.grouping);
+ }), _dataView.setGrouping(groupingArray), onGroupChanged.notify({ caller: originator, groupColumns: groupingArray });
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "DraggableGrouping",
+ onGroupChanged,
+ setDroppedGroups,
+ clearDroppedGroups,
+ getSetupColumnReorder: setupColumnReorder
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ DraggableGrouping
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.headerbuttons.js b/dist/browser/plugins/slick.headerbuttons.js
new file mode 100644
index 00000000..a6467eed
--- /dev/null
+++ b/dist/browser/plugins/slick.headerbuttons.js
@@ -0,0 +1,59 @@
+"use strict";
+(() => {
+ // src/plugins/slick.headerbuttons.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function HeaderButtons(options) {
+ var _grid, _self = this, _handler = new EventHandler(), _bindingEventService = new BindingEventService(), _defaults = {
+ buttonCssClass: "slick-header-button"
+ };
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns());
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons)
+ for (var i = column.header.buttons.length; i--; ) {
+ var button = column.header.buttons[i], isItemVisible = runOverrideFunctionWhenExists(button.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(button.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(button, "itemUsabilityOverride") && (button.disabled = !isItemUsable);
+ let btn = document.createElement("div");
+ btn.className = options.buttonCssClass, btn.ariaLabel = "Header Button", btn.role = "button", button.disabled && btn.classList.add("slick-header-button-disabled"), button.showOnHover && btn.classList.add("slick-header-button-hidden"), button.image && (btn.style.backgroundImage = "url(" + button.image + ")"), button.cssClass && btn.classList.add(...button.cssClass.split(" ")), button.tooltip && (btn.title = button.tooltip), button.handler && _bindingEventService.bind(btn, "click", button.handler), _bindingEventService.bind(btn, "click", handleButtonClick.bind(this, button, args.column)), args.node.appendChild(btn);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons) {
+ let buttonCssClass = (options.buttonCssClass || "").replace(/(\s+)/g, ".");
+ buttonCssClass && args.node.querySelectorAll(`.${buttonCssClass}`).forEach((elm) => elm.remove());
+ }
+ }
+ function handleButtonClick(button, columnDef, e) {
+ let command = button.command || "", callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ button
+ };
+ command != null && (callbackArgs.command = command), typeof button.action == "function" && button.action.call(this, e, callbackArgs), command != null && !button.disabled && (_self.onCommand.notify(callbackArgs, e, _self), _grid.updateColumnHeader(columnDef.id)), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderButtons",
+ onCommand: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ HeaderButtons
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.headermenu.js b/dist/browser/plugins/slick.headermenu.js
new file mode 100644
index 00000000..c3e01c07
--- /dev/null
+++ b/dist/browser/plugins/slick.headermenu.js
@@ -0,0 +1,121 @@
+"use strict";
+(() => {
+ // src/plugins/slick.headermenu.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function HeaderMenu(options) {
+ var _grid, _self = this, _handler = new EventHandler(), _bindingEventService = new BindingEventService(), _defaults = {
+ buttonCssClass: null,
+ buttonImage: null,
+ minWidth: 100,
+ autoAlign: !0,
+ autoAlignOffset: 0
+ }, _activeHeaderColumnElm, _menuElm;
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns()), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this));
+ }
+ function setOptions(newOptions) {
+ options = Utils.extend(!0, {}, options, newOptions);
+ }
+ function getGridUidSelector() {
+ let gridUid = _grid.getUID() || "";
+ return gridUid ? `.${gridUid}` : "";
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm = _menuElm || document.body.querySelector(`.slick-header-menu${getGridUidSelector()}`), _menuElm && _menuElm.remove(), _activeHeaderColumnElm = void 0;
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && hideMenu();
+ }
+ function hideMenu() {
+ _menuElm && (_menuElm.remove(), _menuElm = void 0), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.remove("slick-header-column-active");
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column, menu = column.header && column.header.menu;
+ if (menu) {
+ if (!runOverrideFunctionWhenExists(options.menuUsabilityOverride, args))
+ return;
+ let elm = document.createElement("div");
+ if (elm.className = "slick-header-menubutton", elm.ariaLabel = "Header Menu", elm.role = "button", !options.buttonCssClass && !options.buttonImage && (options.buttonCssClass = "caret"), options.buttonCssClass) {
+ let icon = document.createElement("span");
+ icon.classList.add(...options.buttonCssClass.split(" ")), elm.appendChild(icon);
+ }
+ options.buttonImage && (elm.style.backgroundImage = "url(" + options.buttonImage + ")"), options.tooltip && (elm.title = options.tooltip), _bindingEventService.bind(elm, "click", (e2) => showMenu(e2, menu, args.column)), args.node.appendChild(elm);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ column.header && column.header.menu && args.node.querySelectorAll(".slick-header-menubutton").forEach((elm) => elm.remove());
+ }
+ function showMenu(event, menu, columnDef) {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ menu
+ };
+ if (_self.onBeforeMenuShow.notify(callbackArgs, event, _self).getReturnValue() == !1)
+ return;
+ if (!_menuElm) {
+ _menuElm = document.createElement("div"), _menuElm.className = "slick-header-menu", _menuElm.role = "menu", _menuElm.style.minWidth = `${options.minWidth}px`, _menuElm.setAttribute("aria-expanded", "true");
+ let containerNode = _grid.getContainerNode();
+ containerNode && containerNode.appendChild(_menuElm);
+ }
+ Utils.emptyElement(_menuElm);
+ for (var i = 0; i < menu.items.length; i++) {
+ var item = menu.items[i], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let menuItem = document.createElement("div");
+ if (menuItem.className = "slick-header-menuitem", menuItem.role = "menuitem", item.divider || item === "divider") {
+ menuItem.classList.add("slick-header-menuitem-divider");
+ continue;
+ }
+ item.disabled && menuItem.classList.add("slick-header-menuitem-disabled"), item.hidden && menuItem.classList.add("slick-header-menuitem-hidden"), item.cssClass && menuItem.classList.add(...item.cssClass.split(" ")), item.tooltip && (menuItem.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-header-menuicon", menuItem.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-header-menucontent", textElm.textContent = item.title, menuItem.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), _menuElm.appendChild(menuItem), _bindingEventService.bind(menuItem, "click", handleMenuItemClick.bind(this, item, columnDef));
+ }
+ let buttonElm = event.target, btnOffset = Utils.offset(buttonElm), menuOffset = Utils.offset(_menuElm), leftPos = btnOffset && btnOffset.left || 0;
+ if (options.autoAlign) {
+ let gridPos = _grid.getGridPosition();
+ leftPos + _menuElm.offsetWidth >= gridPos.width && (leftPos = leftPos + buttonElm.clientWidth - _menuElm.clientWidth + (options.autoAlignOffset || 0));
+ }
+ _menuElm.style.top = `${(buttonElm.clientHeight || btnOffset && btnOffset.top || 0) + (options && options.menuOffsetTop || 0)}px`, _menuElm.style.left = `${leftPos - menuOffset.left}px`, _activeHeaderColumnElm = _menuElm.closest(".slick-header-column"), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.add("slick-header-column-active"), _self.onAfterMenuShow.notify(callbackArgs, event, _self).getReturnValue() != !1 && (event.preventDefault(), event.stopPropagation());
+ }
+ function handleMenuItemClick(item, columnDef, e) {
+ let command = item.command || "";
+ if (item.disabled || item.divider || item === "divider")
+ return !1;
+ if (command != null && command !== "") {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ command,
+ item
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ e.defaultPrevented || hideMenu(), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent(),
+ onBeforeMenuShow: new SlickEvent(),
+ onCommand: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ HeaderMenu
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.resizer.js b/dist/browser/plugins/slick.resizer.js
new file mode 100644
index 00000000..b39e0093
--- /dev/null
+++ b/dist/browser/plugins/slick.resizer.js
@@ -0,0 +1,95 @@
+"use strict";
+(() => {
+ // src/plugins/slick.resizer.js
+ var BindingEventService = Slick.BindingEventService, SlickEvent = Slick.Event, Utils = Slick.Utils;
+ function Resizer(_options, fixedDimensions) {
+ let DATAGRID_MIN_HEIGHT = 180, DATAGRID_MIN_WIDTH = 300, DATAGRID_BOTTOM_PADDING = 20, _self = this, _fixedHeight, _fixedWidth, _grid, _gridOptions, _gridUid, _lastDimensions, _timer, _resizePaused = !1, _gridDomElm, _pageContainerElm, _gridContainerElm, _defaults = {
+ bottomPadding: 20,
+ applyResizeToContainer: !1,
+ minHeight: 180,
+ minWidth: 300,
+ rightPadding: 0
+ }, options = {}, _bindingEventService = new BindingEventService();
+ function setOptions(_newOptions) {
+ options = Utils.extend(!0, {}, _defaults, options, _newOptions);
+ }
+ function init(grid) {
+ setOptions(_options), _grid = grid, _gridOptions = _grid.getOptions(), _gridUid = _grid.getUID(), _gridDomElm = _grid.getContainerNode(), typeof _options.container == "string" ? _pageContainerElm = typeof _options.container == "string" ? document.querySelector(_options.container) : _options.container : _pageContainerElm = _options.container, options.gridContainer && (_gridContainerElm = options.gridContainer), fixedDimensions && (_fixedHeight = fixedDimensions.height, _fixedWidth = fixedDimensions.width), _gridOptions && bindAutoResizeDataGrid();
+ }
+ function bindAutoResizeDataGrid(newSizes) {
+ let gridElmOffset = Utils.offset(_gridDomElm);
+ (_gridDomElm !== void 0 || gridElmOffset !== void 0) && (resizeGrid(0, newSizes, null), _bindingEventService.bind(window, "resize", function(event) {
+ _self.onGridBeforeResize.notify({ grid: _grid }, event, _self), _resizePaused || (resizeGrid(0, newSizes, event), resizeGrid(0, newSizes, event));
+ }));
+ }
+ function calculateGridNewDimensions() {
+ let gridElmOffset = Utils.offset(_gridDomElm);
+ if (!window || _pageContainerElm === void 0 || _gridDomElm === void 0 || gridElmOffset === void 0)
+ return null;
+ let bottomPadding = options && options.bottomPadding !== void 0 ? options.bottomPadding : DATAGRID_BOTTOM_PADDING, gridHeight = 0, gridOffsetTop = 0;
+ options.calculateAvailableSizeBy === "container" ? gridHeight = Utils.innerSize(_pageContainerElm, "height") || 0 : (gridHeight = window.innerHeight || 0, gridOffsetTop = gridElmOffset !== void 0 ? gridElmOffset.top : 0);
+ let availableHeight = gridHeight - gridOffsetTop - bottomPadding, availableWidth = Utils.innerSize(_pageContainerElm, "width") || window.innerWidth || 0, maxHeight = options && options.maxHeight || void 0, minHeight = options && options.minHeight !== void 0 ? options.minHeight : DATAGRID_MIN_HEIGHT, maxWidth = options && options.maxWidth || void 0, minWidth = options && options.minWidth !== void 0 ? options.minWidth : DATAGRID_MIN_WIDTH, newHeight = availableHeight, newWidth = options && options.rightPadding ? availableWidth - options.rightPadding : availableWidth;
+ return newHeight < minHeight && (newHeight = minHeight), maxHeight && newHeight > maxHeight && (newHeight = maxHeight), newWidth < minWidth && (newWidth = minWidth), maxWidth && newWidth > maxWidth && (newWidth = maxWidth), {
+ height: _fixedHeight || newHeight,
+ width: _fixedWidth || newWidth
+ };
+ }
+ function destroy() {
+ _self.onGridBeforeResize.unsubscribe(), _self.onGridAfterResize.unsubscribe(), _bindingEventService.unbindAll();
+ }
+ function getLastResizeDimensions() {
+ return _lastDimensions;
+ }
+ function pauseResizer(isResizePaused) {
+ _resizePaused = isResizePaused;
+ }
+ function resizeGrid(delay, newSizes, event) {
+ if (delay = delay || 0, typeof Promise == "function")
+ return new Promise(function(resolve) {
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resolve(resizeGridCallback(newSizes, event));
+ }, delay)) : resolve(resizeGridCallback(newSizes, event));
+ });
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resizeGridCallback(newSizes, event);
+ }, delay)) : resizeGridCallback(newSizes, event);
+ }
+ function resizeGridCallback(newSizes, event) {
+ let lastDimensions = resizeGridWithDimensions(newSizes);
+ return _self.onGridAfterResize.notify({ grid: _grid, dimensions: lastDimensions }, event, _self), lastDimensions;
+ }
+ function resizeGridWithDimensions(newSizes) {
+ let availableDimensions = calculateGridNewDimensions();
+ if ((newSizes || availableDimensions) && _gridDomElm)
+ try {
+ let newHeight = newSizes && newSizes.height ? newSizes.height : availableDimensions.height, newWidth = newSizes && newSizes.width ? newSizes.width : availableDimensions.width;
+ _gridOptions.autoHeight || (_gridDomElm.style.height = `${newHeight}px`), _gridDomElm.style.width = `${newWidth}px`, _gridContainerElm && (_gridContainerElm.style.width = `${newWidth}px`), new RegExp("MSIE [6-8]").exec(navigator.userAgent) === null && _grid && _grid.resizeCanvas && _grid.resizeCanvas(), _gridOptions && _gridOptions.enableAutoSizeColumns && _grid.autosizeColumns && _gridUid && document.querySelector(`.${_gridUid}`) && _grid.autosizeColumns(), _lastDimensions = {
+ height: newHeight,
+ width: newWidth
+ };
+ } catch (e) {
+ destroy();
+ }
+ return _lastDimensions;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "Resizer",
+ bindAutoResizeDataGrid,
+ getLastResizeDimensions,
+ pauseResizer,
+ resizeGrid,
+ setOptions,
+ onGridAfterResize: new SlickEvent(),
+ onGridBeforeResize: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ Resizer
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.rowdetailview.js b/dist/browser/plugins/slick.rowdetailview.js
new file mode 100644
index 00000000..7658e1c4
--- /dev/null
+++ b/dist/browser/plugins/slick.rowdetailview.js
@@ -0,0 +1,286 @@
+"use strict";
+(() => {
+ // src/plugins/slick.rowdetailview.js
+ var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function RowDetailView(options) {
+ var _grid, _gridOptions, _gridUid, _dataView, _dataViewIdProperty = "id", _expandableOverride = null, _self = this, _lastRange = null, _expandedRows = [], _handler = new EventHandler(), _outsideRange = 5, _visibleRenderedCellCount = 0, _defaults = {
+ columnId: "_detail_selector",
+ cssClass: "detailView-toggle",
+ expandedClass: null,
+ collapsedClass: null,
+ keyPrefix: "_",
+ loadOnce: !1,
+ collapseAllOnSort: !0,
+ saveDetailViewOnScroll: !0,
+ singleRowExpand: !1,
+ useSimpleViewportCalc: !1,
+ alwaysRenderColumn: !0,
+ toolTip: "",
+ width: 30,
+ maxRows: null
+ }, _keyPrefix = _defaults.keyPrefix, _gridRowBuffer = 0, _rowIdsOutOfViewport = [], _options = Utils.extend(!0, {}, _defaults, options);
+ typeof _options.expandableOverride == "function" && expandableOverride(_options.expandableOverride);
+ function init(grid) {
+ if (!grid)
+ throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the "init()" method');
+ _grid = grid, _gridUid = grid.getUID(), _gridOptions = grid.getOptions() || {}, _dataView = _grid.getData(), _keyPrefix = _options && _options.keyPrefix || "_", _gridRowBuffer = _grid.getOptions().minRowBuffer, _grid.getOptions().minRowBuffer = _options.panelRows + 3, _handler.subscribe(_grid.onClick, handleClick).subscribe(_grid.onScroll, handleScroll), _options.collapseAllOnSort && (_handler.subscribe(_grid.onSort, collapseAll), _expandedRows = [], _rowIdsOutOfViewport = []), _handler.subscribe(_grid.getData().onRowCountChanged, function() {
+ _grid.updateRowCount(), _grid.render();
+ }), _handler.subscribe(_grid.getData().onRowsChanged, function(e, a) {
+ _grid.invalidateRows(a.rows), _grid.render();
+ }), subscribeToOnAsyncResponse(), _handler.subscribe(_dataView.onSetItemsCalled, function() {
+ _dataViewIdProperty = _dataView && _dataView.getIdPropertyName() || "id";
+ }), _options.useSimpleViewportCalc && _handler.subscribe(_grid.onRendered, function(e, args) {
+ args && args.endRow && (_visibleRenderedCellCount = args.endRow - args.startRow);
+ });
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _self.onAsyncResponse.unsubscribe(), _self.onAsyncEndUpdate.unsubscribe(), _self.onAfterRowDetailToggle.unsubscribe(), _self.onBeforeRowDetailToggle.unsubscribe(), _self.onRowOutOfViewportRange.unsubscribe(), _self.onRowBackToViewportRange.unsubscribe();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ _options = Utils.extend(!0, {}, _options, options2), _options && _options.singleRowExpand && collapseAll();
+ }
+ function arrayFindIndex(sourceArray, value) {
+ if (sourceArray) {
+ for (var i = 0; i < sourceArray.length; i++)
+ if (sourceArray[i] === value)
+ return i;
+ }
+ return -1;
+ }
+ function handleClick(e, args) {
+ var dataContext = _grid.getDataItem(args.row);
+ if (checkExpandableOverride(args.row, dataContext, _grid) && (_options.useRowClick || _grid.getColumns()[args.cell].id === _options.columnId && e.target.classList.contains(_options.cssClass || ""))) {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ _self.onBeforeRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext
+ }, e, _self), toggleRowSelection(args.row, dataContext), _self.onAfterRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext,
+ expandedRows: _expandedRows
+ }, e, _self), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function handleScroll() {
+ _options.useSimpleViewportCalc ? calculateOutOfRangeViewsSimplerVersion() : calculateOutOfRangeViews();
+ }
+ function calculateOutOfRangeViews() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ if (_expandedRows.length > 0) {
+ var scrollDir = "DOWN";
+ if (_lastRange) {
+ if (_lastRange.top === renderedRange.top && _lastRange.bottom === renderedRange.bottom)
+ return;
+ (_lastRange.top > renderedRange.top || // Or we are at very top but our bottom is increasing
+ _lastRange.top === 0 && renderedRange.top === 0 && _lastRange.bottom > renderedRange.bottom) && (scrollDir = "UP");
+ }
+ }
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), rowPadding = row[_keyPrefix + "sizePadding"], rowOutOfRange = arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0;
+ scrollDir === "UP" ? (_options.saveDetailViewOnScroll && rowIndex >= renderedRange.bottom - _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex - _outsideRange < renderedRange.top && rowIndex >= renderedRange.top ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex + rowPadding > renderedRange.bottom && notifyOutOfViewport(row, row[_dataViewIdProperty])) : scrollDir === "DOWN" && (_options.saveDetailViewOnScroll && rowIndex <= renderedRange.top + _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex + rowPadding + _outsideRange > renderedRange.bottom && rowIndex < rowIndex + rowPadding ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex < renderedRange.top && notifyOutOfViewport(row, row[_dataViewIdProperty]));
+ }), _lastRange = renderedRange;
+ }
+ }
+ function calculateOutOfRangeViewsSimplerVersion() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), isOutOfVisibility = checkIsRowOutOfViewportRange(rowIndex, renderedRange);
+ !isOutOfVisibility && arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0 ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : isOutOfVisibility && notifyOutOfViewport(row, row[_dataViewIdProperty]);
+ });
+ }
+ }
+ function checkIsRowOutOfViewportRange(rowIndex, renderedRange) {
+ return Math.abs(renderedRange.bottom - _gridRowBuffer - rowIndex) > _visibleRenderedCellCount * 2;
+ }
+ function notifyOutOfViewport(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ _self.onRowOutOfViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !0)
+ }, null, _self);
+ }
+ function notifyBackToViewportWhenDomExist(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ setTimeout(function() {
+ document.querySelector(`.${_gridUid} .cellDetailView_${item[_dataViewIdProperty]}`) && _self.onRowBackToViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !1)
+ }, null, _self);
+ }, 100);
+ }
+ function syncOutOfViewportArray(rowId, isAdding) {
+ var arrayRowIndex = arrayFindIndex(_rowIdsOutOfViewport, rowId);
+ return isAdding && arrayRowIndex < 0 ? _rowIdsOutOfViewport.push(rowId) : !isAdding && arrayRowIndex >= 0 && _rowIdsOutOfViewport.splice(arrayRowIndex, 1), _rowIdsOutOfViewport;
+ }
+ function toggleRowSelection(rowNumber, dataContext) {
+ checkExpandableOverride(rowNumber, dataContext, _grid) && (_dataView.beginUpdate(), handleAccordionShowHide(dataContext), _dataView.endUpdate());
+ }
+ function collapseAll() {
+ _dataView.beginUpdate();
+ for (var i = _expandedRows.length - 1; i >= 0; i--)
+ collapseDetailView(_expandedRows[i], !0);
+ _dataView.endUpdate();
+ }
+ function collapseDetailView(item, isMultipleCollapsing) {
+ isMultipleCollapsing || _dataView.beginUpdate(), _options.loadOnce && saveDetailView(item), item[_keyPrefix + "collapsed"] = !0;
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ item[_keyPrefix + "sizePadding"] = 0, _dataView.updateItem(item[_dataViewIdProperty], item), _expandedRows = _expandedRows.filter(function(r) {
+ return r[_dataViewIdProperty] !== item[_dataViewIdProperty];
+ }), isMultipleCollapsing || _dataView.endUpdate();
+ }
+ function expandDetailView(item) {
+ if (_options && _options.singleRowExpand && collapseAll(), item[_keyPrefix + "collapsed"] = !1, _expandedRows.push(item), item[_keyPrefix + "detailContent"] || (item[_keyPrefix + "detailViewLoaded"] = !1), !item[_keyPrefix + "detailViewLoaded"] || _options.loadOnce !== !0)
+ item[_keyPrefix + "detailContent"] = _options.preTemplate(item);
+ else {
+ _self.onAsyncResponse.notify({
+ item,
+ itemDetail: item,
+ detailView: item[_keyPrefix + "detailContent"]
+ }, void 0, this), applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item);
+ return;
+ }
+ applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item), _options.process(item);
+ }
+ function saveDetailView(item) {
+ let view = document.querySelector(`.${_gridUid} .innerDetailView_${item[_dataViewIdProperty]}`);
+ if (view) {
+ let html = view.innerHTML;
+ html !== void 0 && (item[`${_keyPrefix}detailContent`] = html);
+ }
+ }
+ function subscribeToOnAsyncResponse() {
+ _self.onAsyncResponse.subscribe(function(e, args) {
+ if (!args || !args.item && !args.itemDetail)
+ throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.item" property.';
+ var itemDetail = args.item || args.itemDetail;
+ args.detailView ? itemDetail[_keyPrefix + "detailContent"] = args.detailView : itemDetail[_keyPrefix + "detailContent"] = _options.postTemplate(itemDetail), itemDetail[_keyPrefix + "detailViewLoaded"] = !0, _dataView.updateItem(itemDetail[_dataViewIdProperty], itemDetail), _self.onAsyncEndUpdate.notify({
+ grid: _grid,
+ item: itemDetail,
+ itemDetail
+ }, e, _self);
+ });
+ }
+ function handleAccordionShowHide(item) {
+ item && (item[_keyPrefix + "collapsed"] ? expandDetailView(item) : collapseDetailView(item));
+ }
+ var getPaddingItem = function(parent, offset) {
+ var item = {};
+ for (var prop in _grid.getData())
+ item[prop] = null;
+ return item[_dataViewIdProperty] = parent[_dataViewIdProperty] + "." + offset, item[_keyPrefix + "collapsed"] = !0, item[_keyPrefix + "isPadding"] = !0, item[_keyPrefix + "parent"] = parent, item[_keyPrefix + "offset"] = offset, item;
+ };
+ function applyTemplateNewLineHeight(item) {
+ var rowCount = _options.panelRows, lineHeight = 13;
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / _gridOptions.rowHeight), item[_keyPrefix + "height"] = item[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: "",
+ toolTip: _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ alwaysRenderColumn: _options.alwaysRenderColumn,
+ cssClass: _options.cssClass,
+ formatter: detailSelectionFormatter
+ };
+ }
+ function getExpandedRows() {
+ return _expandedRows;
+ }
+ function detailSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ if (checkExpandableOverride(row, dataContext, grid)) {
+ if (dataContext[_keyPrefix + "collapsed"] == null && (dataContext[_keyPrefix + "collapsed"] = !0, dataContext[_keyPrefix + "sizePadding"] = 0, dataContext[_keyPrefix + "height"] = 0, dataContext[_keyPrefix + "isPadding"] = !1, dataContext[_keyPrefix + "parent"] = void 0, dataContext[_keyPrefix + "offset"] = 0), !dataContext[_keyPrefix + "isPadding"])
+ if (dataContext[_keyPrefix + "collapsed"]) {
+ var collapsedClasses = _options.cssClass + " expand ";
+ return _options.collapsedClass && (collapsedClasses += _options.collapsedClass), '
';
+ } else {
+ var html = [], rowHeight = _gridOptions.rowHeight, outterHeight = dataContext[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ _options.maxRows !== null && dataContext[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, dataContext[_keyPrefix + "sizePadding"] = _options.maxRows);
+ var expandedClasses = _options.cssClass + " collapse ";
+ return _options.expandedClass && (expandedClasses += _options.expandedClass), html.push('
'), html.push(''), html.push('
'), html.push('
', dataContext[_keyPrefix + "detailContent"], "
"), html.join("");
+ }
+ } else
+ return null;
+ return null;
+ }
+ function resizeDetailView(item) {
+ if (item) {
+ var mainContainer = document.querySelector("." + _gridUid + " .detailViewContainer_" + item[_dataViewIdProperty]), cellItem = document.querySelector("." + _gridUid + " .cellDetailView_" + item[_dataViewIdProperty]), inner = document.querySelector("." + _gridUid + " .innerDetailView_" + item[_dataViewIdProperty]);
+ if (!(!mainContainer || !cellItem || !inner)) {
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ var rowHeight = _gridOptions.rowHeight, lineHeight = 13;
+ mainContainer.style.minHeight = null;
+ var itemHeight = mainContainer.scrollHeight, rowCount = Math.ceil(itemHeight / rowHeight);
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / rowHeight), item[_keyPrefix + "height"] = itemHeight;
+ var outterHeight = item[_keyPrefix + "sizePadding"] * rowHeight;
+ _options.maxRows !== null && item[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, item[_keyPrefix + "sizePadding"] = _options.maxRows), _grid.getOptions().minRowBuffer < item[_keyPrefix + "sizePadding"] && (_grid.getOptions().minRowBuffer = item[_keyPrefix + "sizePadding"] + 3), mainContainer.setAttribute("style", "min-height: " + item[_keyPrefix + "height"] + "px"), cellItem && cellItem.setAttribute("style", "height: " + outterHeight + "px; top:" + rowHeight + "px");
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ saveDetailView(item);
+ }
+ }
+ }
+ function getFilterItem(item) {
+ return item[_keyPrefix + "isPadding"] && item[_keyPrefix + "parent"] && (item = item[_keyPrefix + "parent"]), item;
+ }
+ function checkExpandableOverride(row, dataContext, grid) {
+ return typeof _expandableOverride == "function" ? _expandableOverride(row, dataContext, grid) : !0;
+ }
+ function expandableOverride(overrideFn) {
+ _expandableOverride = overrideFn;
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ pluginName: "RowDetailView",
+ collapseAll,
+ collapseDetailView,
+ expandDetailView,
+ expandableOverride,
+ getColumnDefinition,
+ getExpandedRows,
+ getFilterItem,
+ getOptions,
+ resizeDetailView,
+ saveDetailView,
+ setOptions,
+ // events
+ onAsyncResponse: new SlickEvent(),
+ onAsyncEndUpdate: new SlickEvent(),
+ onAfterRowDetailToggle: new SlickEvent(),
+ onBeforeRowDetailToggle: new SlickEvent(),
+ onRowOutOfViewportRange: new SlickEvent(),
+ onRowBackToViewportRange: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ Plugins: {
+ RowDetailView
+ }
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.rowmovemanager.js b/dist/browser/plugins/slick.rowmovemanager.js
new file mode 100644
index 00000000..a3f570dc
--- /dev/null
+++ b/dist/browser/plugins/slick.rowmovemanager.js
@@ -0,0 +1,121 @@
+"use strict";
+(() => {
+ // src/plugins/slick.rowmovemanager.js
+ var SlickEvent = Slick.Event, EventHandler = Slick.EventHandler, Utils = Slick.Utils;
+ function RowMoveManager(options) {
+ var _grid, _canvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows));
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_canvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _canvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_canvas.clientWidth}px`, dd.guide.style.top = "-1000px", _canvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils.offset(_canvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _grid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_grid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ // cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd " + options.cssClass || "", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils.extend(this, {
+ onBeforeMoveRows: new SlickEvent(),
+ onMoveRows: new SlickEvent(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "RowMoveManager"
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ RowMoveManager
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.rowselectionmodel.js b/dist/browser/plugins/slick.rowselectionmodel.js
new file mode 100644
index 00000000..083c21ea
--- /dev/null
+++ b/dist/browser/plugins/slick.rowselectionmodel.js
@@ -0,0 +1,151 @@
+"use strict";
+(() => {
+ // src/plugins/slick.rowselectionmodel.js
+ var EventData = Slick.EventData, EventHandler = Slick.EventHandler, keyCode = Slick.keyCode, SlickEvent = Slick.Event, SlickRange = Slick.Range, Draggable = Slick.Draggable, CellRangeDecorator = Slick.CellRangeDecorator, CellRangeSelector = Slick.CellRangeSelector, Utils = Slick.Utils;
+ function RowSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _handler = new EventHandler(), _inHandler, _options, _selector, _isRowMoveManagerHandler, _defaults = {
+ selectActiveRow: !0,
+ dragToSelect: !1,
+ autoScrollWhenDrag: !0,
+ cellRangeSelector: void 0
+ };
+ function init(grid) {
+ if (typeof Draggable == "undefined")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ if (_options = Utils.extend(!0, {}, _defaults, options), _selector = _options.cellRangeSelector, _grid = grid, !_selector && _options.dragToSelect) {
+ if (!CellRangeDecorator)
+ throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true");
+ _selector = new CellRangeSelector({
+ selectionCss: {
+ border: "none"
+ },
+ autoScroll: _options.autoScrollWhenDrag
+ });
+ }
+ _handler.subscribe(
+ _grid.onActiveCellChanged,
+ wrapHandler(handleActiveCellChange)
+ ), _handler.subscribe(
+ _grid.onKeyDown,
+ wrapHandler(handleKeyDown)
+ ), _handler.subscribe(
+ _grid.onClick,
+ wrapHandler(handleClick)
+ ), _selector && (grid.registerPlugin(_selector), _selector.onCellRangeSelecting.subscribe(handleCellRangeSelected), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected));
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _selector && (_selector.onCellRangeSelecting.unsubscribe(handleCellRangeSelected), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector.destroy && _selector.destroy());
+ }
+ function wrapHandler(handler) {
+ return function() {
+ _inHandler || (_inHandler = !0, handler.apply(this, arguments), _inHandler = !1);
+ };
+ }
+ function rangesToRows(ranges) {
+ for (var rows = [], i = 0; i < ranges.length; i++)
+ for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++)
+ rows.push(j);
+ return rows;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = _grid.getColumns().length - 1, i = 0; i < rows.length; i++)
+ ranges.push(new SlickRange(rows[i], 0, rows[i], lastCell));
+ return ranges;
+ }
+ function getRowsRange(from, to) {
+ var i, rows = [];
+ for (i = from; i <= to; i++)
+ rows.push(i);
+ for (i = to; i < from; i++)
+ rows.push(i);
+ return rows;
+ }
+ function getSelectedRows() {
+ return rangesToRows(_ranges);
+ }
+ function setSelectedRows(rows) {
+ setSelectedRanges(rowsToRanges(rows), "SlickRowSelectionModel.setSelectedRows");
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ _ranges = ranges;
+ var eventData = new EventData(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickRowSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRows(getSelectedRows());
+ }
+ function handleActiveCellChange(e, data) {
+ _options.selectActiveRow && data.row != null && setSelectedRanges([new SlickRange(data.row, 0, data.row, _grid.getColumns().length - 1)]);
+ }
+ function handleKeyDown(e) {
+ var activeRow = _grid.getActiveCell();
+ if (_grid.getOptions().multiSelect && activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == keyCode.UP || e.which == keyCode.DOWN)) {
+ var selectedRows = getSelectedRows();
+ selectedRows.sort(function(x, y) {
+ return x - y;
+ }), selectedRows.length || (selectedRows = [activeRow.row]);
+ var top = selectedRows[0], bottom = selectedRows[selectedRows.length - 1], active;
+ if (e.which == keyCode.DOWN ? active = activeRow.row < bottom || top == bottom ? ++bottom : ++top : active = activeRow.row < bottom ? --bottom : --top, active >= 0 && active < _grid.getDataLength()) {
+ _grid.scrollRowIntoView(active);
+ var tempRanges = rowsToRanges(getRowsRange(top, bottom));
+ setSelectedRanges(tempRanges);
+ }
+ e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function handleClick(e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (!cell || !_grid.canCellBeActive(cell.row, cell.cell) || !_grid.getOptions().multiSelect || !e.ctrlKey && !e.shiftKey && !e.metaKey)
+ return !1;
+ var selection = rangesToRows(_ranges), idx = selection.indexOf(cell.row);
+ if (idx === -1 && (e.ctrlKey || e.metaKey))
+ selection.push(cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (idx !== -1 && (e.ctrlKey || e.metaKey))
+ selection = selection.filter((o) => o !== cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (selection.length && e.shiftKey) {
+ var last = selection.pop(), from = Math.min(cell.row, last), to = Math.max(cell.row, last);
+ selection = [];
+ for (var i = from; i <= to; i++)
+ i !== last && selection.push(i);
+ selection.push(last), _grid.setActiveCell(cell.row, cell.cell);
+ }
+ var tempRanges = rowsToRanges(selection);
+ return setSelectedRanges(tempRanges), e.stopImmediatePropagation(), !0;
+ }
+ function handleBeforeCellRangeSelected(e, cell) {
+ if (!_isRowMoveManagerHandler) {
+ var rowMoveManager = _grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager");
+ _isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop;
+ }
+ if (_grid.getEditorLock().isActive() || _isRowMoveManagerHandler(cell.cell))
+ return e.stopPropagation(), !1;
+ _grid.setActiveCell(cell.row, cell.cell);
+ }
+ function handleCellRangeSelected(e, args) {
+ if (!_grid.getOptions().multiSelect || !_options.selectActiveRow)
+ return !1;
+ setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, _grid.getColumns().length - 1)]);
+ }
+ Utils.extend(this, {
+ getSelectedRows,
+ setSelectedRows,
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "RowSelectionModel",
+ onSelectedRangesChanged: new SlickEvent()
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ RowSelectionModel
+ }
+ });
+})();
diff --git a/dist/browser/plugins/slick.state.js b/dist/browser/plugins/slick.state.js
new file mode 100644
index 00000000..2ce4bebb
--- /dev/null
+++ b/dist/browser/plugins/slick.state.js
@@ -0,0 +1,140 @@
+"use strict";
+(() => {
+ // src/plugins/slick.state.js
+ var SlickEvent = Slick.Event, Utils = Slick.Utils, localStorageWrapper = function() {
+ var localStorage = window.localStorage;
+ return typeof localStorage == "undefined" && console.error("localStorage is not available. slickgrid statepersistor disabled."), {
+ get: function(key) {
+ return new Promise((resolve, reject) => {
+ if (!localStorage) {
+ reject("missing localStorage");
+ return;
+ }
+ try {
+ var d = localStorage.getItem(key);
+ if (d)
+ return resolve(JSON.parse(d));
+ resolve({});
+ } catch (exc) {
+ reject(exc);
+ }
+ });
+ },
+ set: function(key, obj) {
+ localStorage && (typeof obj != "undefined" && (obj = JSON.stringify(obj)), localStorage.setItem(key, obj));
+ }
+ };
+ }, defaults = {
+ key_prefix: "slickgrid:",
+ storage: new localStorageWrapper(),
+ scrollRowIntoView: !0
+ };
+ function State(options) {
+ options = Utils.extend(!0, {}, defaults, options);
+ var _grid, _cid, _store = options.storage, onStateChanged = new SlickEvent(), userData = {
+ state: null,
+ current: null
+ };
+ function init(grid) {
+ _grid = grid, _cid = grid.cid || options.cid, _cid ? (_grid.onColumnsResized.subscribe(save), _grid.onColumnsReordered.subscribe(save), _grid.onSort.subscribe(save)) : console.warn("grid has no client id. state persisting is disabled.");
+ }
+ function destroy() {
+ _grid.onSort.unsubscribe(save), _grid.onColumnsReordered.unsubscribe(save), _grid.onColumnsResized.unsubscribe(save), save();
+ }
+ function save() {
+ if (_cid && _store) {
+ var state = {
+ sortcols: getSortColumns(),
+ viewport: _grid.getViewport(),
+ columns: getColumns(),
+ userData: null
+ };
+ return state.userData = userData.current, setUserDataFromState(state.userData), onStateChanged.notify(state), _store.set(options.key_prefix + _cid, state);
+ }
+ }
+ function restore() {
+ return new Promise((resolve, reject) => {
+ if (!_cid) {
+ reject("missing client id");
+ return;
+ }
+ if (!_store) {
+ reject("missing store");
+ return;
+ }
+ _store.get(options.key_prefix + _cid).then(function(state) {
+ if (state) {
+ if (state.sortcols && _grid.setSortColumns(state.sortcols || []), state.viewport && options.scrollRowIntoView && _grid.scrollRowIntoView(state.viewport.top, !0), state.columns) {
+ var defaultColumns = options.defaultColumns;
+ if (defaultColumns) {
+ var defaultColumnsLookup = {};
+ defaultColumns.forEach(function(colDef) {
+ defaultColumnsLookup[colDef.id] = colDef;
+ });
+ var cols = [];
+ (state.columns || []).forEach(function(columnDef) {
+ defaultColumnsLookup[columnDef.id] && cols.push(Utils.extend(!0, {}, defaultColumnsLookup[columnDef.id], {
+ width: columnDef.width,
+ headerCssClass: columnDef.headerCssClass
+ }));
+ }), state.columns = cols;
+ }
+ _grid.setColumns(state.columns);
+ }
+ setUserDataFromState(state.userData);
+ }
+ resolve(state);
+ }).catch(function(e) {
+ reject(e);
+ });
+ });
+ }
+ function setUserData(data) {
+ return userData.current = data, this;
+ }
+ function setUserDataFromState(data) {
+ return userData.state = data, setUserData(data);
+ }
+ function getUserData() {
+ return userData.current;
+ }
+ function getStateUserData() {
+ return userData.state;
+ }
+ function resetUserData() {
+ return userData.current = userData.state, this;
+ }
+ function getColumns() {
+ return _grid.getColumns().map(function(col) {
+ return {
+ id: col.id,
+ width: col.width
+ };
+ });
+ }
+ function getSortColumns() {
+ var sortCols = _grid.getSortColumns();
+ return sortCols;
+ }
+ function reset() {
+ _store.set(options.key_prefix + _cid, {}), setUserDataFromState(null);
+ }
+ Utils.extend(this, {
+ init,
+ destroy,
+ save,
+ setUserData,
+ resetUserData,
+ getUserData,
+ getStateUserData,
+ restore,
+ onStateChanged,
+ reset
+ });
+ }
+ window.Slick && Utils.extend(!0, window, {
+ Slick: {
+ State
+ }
+ });
+})();
diff --git a/dist/browser/slick.compositeeditor.js b/dist/browser/slick.compositeeditor.js
new file mode 100644
index 00000000..4d782738
--- /dev/null
+++ b/dist/browser/slick.compositeeditor.js
@@ -0,0 +1,112 @@
+"use strict";
+(() => {
+ // src/slick.compositeeditor.js
+ var Utils = Slick.Utils;
+ function CompositeEditor(columns, containers, options) {
+ var defaultOptions = {
+ modalType: "edit",
+ // available type (create, edit, mass)
+ validationFailedMsg: "Some of the fields have failed validation",
+ validationMsgPrefix: null,
+ show: null,
+ hide: null,
+ position: null,
+ destroy: null,
+ formValues: {},
+ editors: {}
+ }, noop = function() {
+ }, firstInvalidEditor;
+ options = Slick.Utils.extend({}, defaultOptions, options);
+ function getContainerBox(i) {
+ var c = containers[i], offset = Slick.Utils.offset(c), w = Slick.Utils.width(c), h = Slick.Utils.height(c);
+ return {
+ top: offset && offset.top,
+ left: offset && offset.left,
+ bottom: offset && offset.top + h,
+ right: offset && offset.left + w,
+ width: w,
+ height: h,
+ visible: !0
+ };
+ }
+ function editor(args) {
+ var editors = [];
+ function init() {
+ for (var newArgs = {}, idx = 0; idx < columns.length; ) {
+ if (columns[idx].editor) {
+ var column = columns[idx];
+ newArgs = Slick.Utils.extend(!1, {}, args), newArgs.container = containers[idx], newArgs.column = column, newArgs.position = getContainerBox(idx), newArgs.commitChanges = noop, newArgs.cancelChanges = noop, newArgs.compositeEditorOptions = options, newArgs.formValues = {};
+ var currentEditor = new column.editor(newArgs);
+ options.editors[column.id] = currentEditor, editors.push(currentEditor);
+ }
+ idx++;
+ }
+ setTimeout(function() {
+ Array.isArray(editors) && editors.length > 0 && editors[0].focus && editors[0].focus();
+ }, 0);
+ }
+ this.destroy = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].destroy(), idx++;
+ options.destroy && options.destroy(), editors = [];
+ }, this.focus = function() {
+ (firstInvalidEditor || editors[0]).focus();
+ }, this.isValueChanged = function() {
+ for (var idx = 0; idx < editors.length; ) {
+ if (editors[idx].isValueChanged())
+ return !0;
+ idx++;
+ }
+ return !1;
+ }, this.serializeValue = function() {
+ for (var serializedValue = [], idx = 0; idx < editors.length; )
+ serializedValue[idx] = editors[idx].serializeValue(), idx++;
+ return serializedValue;
+ }, this.applyValue = function(item, state) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].applyValue(item, state[idx]), idx++;
+ }, this.loadValue = function(item) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].loadValue(item), idx++;
+ }, this.validate = function(target) {
+ var validationResults, errors = [], targetElm = target || null;
+ firstInvalidEditor = null;
+ for (var idx = 0; idx < editors.length; ) {
+ var columnDef = editors[idx].args && editors[idx].args.column || {};
+ if (columnDef) {
+ var validationElm = document.querySelector(".item-details-validation.editor-" + columnDef.id), labelElm = document.querySelector(".item-details-label.editor-" + columnDef.id), editorElm = document.querySelector("[data-editorid=" + columnDef.id + "]"), validationMsgPrefix = options && options.validationMsgPrefix || "";
+ (!targetElm || Slick.Utils.contains(editorElm, targetElm)) && (validationResults = editors[idx].validate(), validationResults.valid ? validationElm && (validationElm.textContent = "", editorElm.classList.remove("invalid"), labelElm.classList.remove("invalid")) : (firstInvalidEditor = editors[idx], errors.push({
+ index: idx,
+ editor: editors[idx],
+ container: containers[idx],
+ msg: validationResults.msg
+ }), validationElm && (validationElm.textContent = validationMsgPrefix + validationResults.msg, labelElm.classList.add("invalid"), editorElm.classList.add("invalid")))), validationElm = null, labelElm = null, editorElm = null;
+ }
+ idx++;
+ }
+ return targetElm = null, errors.length ? {
+ valid: !1,
+ msg: options.validationFailedMsg,
+ errors
+ } : {
+ valid: !0,
+ msg: ""
+ };
+ }, this.hide = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].hide && editors[idx].hide(), idx++;
+ options.hide && options.hide();
+ }, this.show = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].show && editors[idx].show(), idx++;
+ options.show && options.show();
+ }, this.position = function(box) {
+ options.position && options.position(box);
+ }, init();
+ }
+ return editor.prototype = this, editor;
+ }
+ window.Slick && Utils.extend(Slick, {
+ CompositeEditor
+ });
+})();
diff --git a/dist/browser/slick.core.js b/dist/browser/slick.core.js
new file mode 100644
index 00000000..00884b8a
--- /dev/null
+++ b/dist/browser/slick.core.js
@@ -0,0 +1,450 @@
+"use strict";
+var Slick = (() => {
+ var __defProp = Object.defineProperty;
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
+ var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: !0 });
+ }, __copyProps = (to, from, except, desc) => {
+ if (from && typeof from == "object" || typeof from == "function")
+ for (let key of __getOwnPropNames(from))
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ return to;
+ };
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
+
+ // src/slick.core.js
+ var slick_core_exports = {};
+ __export(slick_core_exports, {
+ BindingEventService: () => BindingEventService,
+ ColAutosizeMode: () => ColAutosizeMode,
+ EditorLock: () => EditorLock,
+ Event: () => Event,
+ EventData: () => EventData,
+ EventHandler: () => EventHandler,
+ GlobalEditorLock: () => GlobalEditorLock,
+ GridAutosizeColsMode: () => GridAutosizeColsMode,
+ Group: () => Group,
+ GroupTotals: () => GroupTotals,
+ NonDataItem: () => NonDataItem,
+ Range: () => Range,
+ RowSelectionMode: () => RowSelectionMode,
+ Utils: () => Utils,
+ ValueFilterMode: () => ValueFilterMode,
+ WidthEvalMode: () => WidthEvalMode,
+ keyCode: () => keyCode,
+ preClickClassName: () => preClickClassName
+ });
+ function EventData(event, args) {
+ this.event = event;
+ let nativeEvent = event, arguments_ = args, isPropagationStopped = !1, isImmediatePropagationStopped = !1, isDefaultPrevented = !1, returnValues = [], returnValue;
+ if (event) {
+ let eventProps = [
+ "altKey",
+ "ctrlKey",
+ "metaKey",
+ "shiftKey",
+ "key",
+ "keyCode",
+ "clientX",
+ "clientY",
+ "offsetX",
+ "offsetY",
+ "pageX",
+ "pageY",
+ "bubbles",
+ "type",
+ "which",
+ "x",
+ "y"
+ ];
+ for (let key of eventProps)
+ this[key] = event[key];
+ }
+ this.target = nativeEvent ? nativeEvent.target : void 0, this.stopPropagation = function() {
+ isPropagationStopped = !0, nativeEvent && nativeEvent.stopPropagation();
+ }, this.isPropagationStopped = function() {
+ return isPropagationStopped;
+ }, this.stopImmediatePropagation = function() {
+ isImmediatePropagationStopped = !0, nativeEvent && nativeEvent.stopImmediatePropagation();
+ }, this.isImmediatePropagationStopped = function() {
+ return isImmediatePropagationStopped;
+ }, this.getNativeEvent = function() {
+ return nativeEvent;
+ }, this.preventDefault = function() {
+ nativeEvent && nativeEvent.preventDefault(), isDefaultPrevented = !0;
+ }, this.isDefaultPrevented = function() {
+ return nativeEvent ? nativeEvent.defaultPrevented : isDefaultPrevented;
+ }, this.addReturnValue = function(value) {
+ returnValues.push(value), returnValue === void 0 && value !== void 0 && (returnValue = value);
+ }, this.getReturnValue = function() {
+ return returnValue;
+ }, this.getArguments = function() {
+ return arguments_;
+ };
+ }
+ function Event() {
+ var handlers = [];
+ this.subscribe = function(fn) {
+ handlers.push(fn);
+ }, this.unsubscribe = function(fn) {
+ for (var i = handlers.length - 1; i >= 0; i--)
+ handlers[i] === fn && handlers.splice(i, 1);
+ }, this.notify = function(args, e, scope) {
+ e instanceof EventData || (e = new EventData(e, args)), scope = scope || this;
+ for (var i = 0; i < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) {
+ let returnValue = handlers[i].call(scope, e, args);
+ e.addReturnValue(returnValue);
+ }
+ return e;
+ };
+ }
+ function EventHandler() {
+ var handlers = [];
+ this.subscribe = function(event, handler) {
+ return handlers.push({
+ event,
+ handler
+ }), event.subscribe(handler), this;
+ }, this.unsubscribe = function(event, handler) {
+ for (var i = handlers.length; i--; )
+ if (handlers[i].event === event && handlers[i].handler === handler) {
+ handlers.splice(i, 1), event.unsubscribe(handler);
+ return;
+ }
+ return this;
+ }, this.unsubscribeAll = function() {
+ for (var i = handlers.length; i--; )
+ handlers[i].event.unsubscribe(handlers[i].handler);
+ return handlers = [], this;
+ };
+ }
+ function Range(fromRow, fromCell, toRow, toCell) {
+ toRow === void 0 && toCell === void 0 && (toRow = fromRow, toCell = fromCell), this.fromRow = Math.min(fromRow, toRow), this.fromCell = Math.min(fromCell, toCell), this.toRow = Math.max(fromRow, toRow), this.toCell = Math.max(fromCell, toCell), this.isSingleRow = function() {
+ return this.fromRow == this.toRow;
+ }, this.isSingleCell = function() {
+ return this.fromRow == this.toRow && this.fromCell == this.toCell;
+ }, this.contains = function(row, cell) {
+ return row >= this.fromRow && row <= this.toRow && cell >= this.fromCell && cell <= this.toCell;
+ }, this.toString = function() {
+ return this.isSingleCell() ? "(" + this.fromRow + ":" + this.fromCell + ")" : "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";
+ };
+ }
+ function NonDataItem() {
+ this.__nonDataRow = !0;
+ }
+ function Group() {
+ this.__group = !0, this.level = 0, this.count = 0, this.value = null, this.title = null, this.collapsed = !1, this.selectChecked = !1, this.totals = null, this.rows = [], this.groups = null, this.groupingKey = null;
+ }
+ Group.prototype = new NonDataItem();
+ Group.prototype.equals = function(group) {
+ return this.value === group.value && this.count === group.count && this.collapsed === group.collapsed && this.title === group.title;
+ };
+ function GroupTotals() {
+ this.__groupTotals = !0, this.group = null, this.initialized = !1;
+ }
+ GroupTotals.prototype = new NonDataItem();
+ function EditorLock() {
+ var activeEditController = null;
+ this.isActive = function(editController) {
+ return editController ? activeEditController === editController : activeEditController !== null;
+ }, this.activate = function(editController) {
+ if (editController !== activeEditController) {
+ if (activeEditController !== null)
+ throw new Error("SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController");
+ if (!editController.commitCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()");
+ if (!editController.cancelCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()");
+ activeEditController = editController;
+ }
+ }, this.deactivate = function(editController) {
+ if (activeEditController) {
+ if (activeEditController !== editController)
+ throw new Error("SlickGrid.EditorLock.deactivate: specified editController is not the currently active one");
+ activeEditController = null;
+ }
+ }, this.commitCurrentEdit = function() {
+ return activeEditController ? activeEditController.commitCurrentEdit() : !0;
+ }, this.cancelCurrentEdit = function() {
+ return activeEditController ? activeEditController.cancelCurrentEdit() : !0;
+ };
+ }
+ function regexSanitizer(dirtyHtml) {
+ return dirtyHtml.replace(/(\b)(on[a-z]+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(<)(\/*)(script|script defer)(.*)(>|>">)/gi, "");
+ }
+ function calculateAvailableSpace(element) {
+ let bottom = 0, top = 0, left = 0, right = 0, windowHeight = window.innerHeight || 0, windowWidth = window.innerWidth || 0, scrollPosition = windowScrollPosition(), pageScrollTop = scrollPosition.top, pageScrollLeft = scrollPosition.left, elmOffset = offset(element);
+ if (elmOffset) {
+ let elementOffsetTop = elmOffset.top || 0, elementOffsetLeft = elmOffset.left || 0;
+ top = elementOffsetTop - pageScrollTop, bottom = windowHeight - (elementOffsetTop - pageScrollTop), left = elementOffsetLeft - pageScrollLeft, right = windowWidth - (elementOffsetLeft - pageScrollLeft);
+ }
+ return { top, bottom, left, right };
+ }
+ function createDomElement(tagName, elementOptions, appendToParent) {
+ let elm = document.createElement(tagName);
+ return elementOptions && Object.keys(elementOptions).forEach((elmOptionKey) => {
+ let elmValue = elementOptions[elmOptionKey];
+ typeof elmValue == "object" ? Object.assign(elm[elmOptionKey], elmValue) : elm[elmOptionKey] = elementOptions[elmOptionKey];
+ }), appendToParent && appendToParent.appendChild && appendToParent.appendChild(elm), elm;
+ }
+ function debounce(callback, wait) {
+ let timeoutId = null;
+ return (...args) => {
+ wait >= 0 ? (clearTimeout(timeoutId), timeoutId = setTimeout(() => callback.apply(null, args), wait)) : callback.apply(null);
+ };
+ }
+ function emptyElement(element) {
+ if (element && element.firstChild)
+ for (; element.firstChild; )
+ element.lastChild && element.removeChild(element.lastChild);
+ return element;
+ }
+ function innerSize(elm, type) {
+ let size = 0;
+ if (elm) {
+ let clientSize = type === "height" ? "clientHeight" : "clientWidth", sides = type === "height" ? ["top", "bottom"] : ["left", "right"];
+ size = elm[clientSize];
+ for (let side of sides) {
+ let sideSize = parseFloat(getElementProp(elm, `padding-${side}`)) || 0;
+ size -= sideSize;
+ }
+ }
+ return size;
+ }
+ function getElementProp(elm, property) {
+ return elm && elm.getComputedStyle ? window.getComputedStyle(elm, null).getPropertyValue(property) : null;
+ }
+ function isEmptyObject(obj) {
+ return obj == null ? !0 : Object.entries(obj).length === 0;
+ }
+ function noop() {
+ }
+ function offset(el) {
+ if (!el || !el.getBoundingClientRect)
+ return;
+ let box = el.getBoundingClientRect(), docElem = document.documentElement;
+ return {
+ top: box.top + window.pageYOffset - docElem.clientTop,
+ left: box.left + window.pageXOffset - docElem.clientLeft
+ };
+ }
+ function windowScrollPosition() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ function width(el, value) {
+ if (!(!el || !el.getBoundingClientRect)) {
+ if (value === void 0)
+ return el.getBoundingClientRect().width;
+ setStyleSize(el, "width", value);
+ }
+ }
+ function height(el, value) {
+ if (el) {
+ if (value === void 0)
+ return el.getBoundingClientRect().height;
+ setStyleSize(el, "height", value);
+ }
+ }
+ function setStyleSize(el, style, val) {
+ typeof val == "function" ? val = val() : typeof val == "string" ? el.style[style] = val : el.style[style] = val + "px";
+ }
+ function contains(parent, child) {
+ return !parent || !child ? !1 : !parents(child).every(function(p) {
+ return parent != p;
+ });
+ }
+ function isHidden(el) {
+ return el.offsetWidth === 0 && el.offsetHeight === 0;
+ }
+ function parents(el, selector) {
+ let parents2 = [], visible = selector == ":visible", hidden = selector == ":hidden";
+ for (; (el = el.parentNode) && el !== document && !(!el || !el.parentNode); )
+ hidden ? isHidden(el) && parents2.push(el) : visible ? isHidden(el) || parents2.push(el) : (!selector || el.matches(selector)) && parents2.push(el);
+ return parents2;
+ }
+ function toFloat(value) {
+ var x = parseFloat(value);
+ return isNaN(x) ? 0 : x;
+ }
+ function show(el, type) {
+ type = type || "", Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = type;
+ }) : el.style.display = type;
+ }
+ function hide(el) {
+ Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = "none";
+ }) : el.style.display = "none";
+ }
+ function slideUp(el, callback) {
+ return slideAnimation(el, "slideUp", callback);
+ }
+ function slideDown(el, callback) {
+ return slideAnimation(el, "slideDown", callback);
+ }
+ function slideAnimation(el, slideDirection, callback) {
+ if (window.jQuery !== void 0) {
+ window.jQuery(el)[slideDirection]("fast", callback);
+ return;
+ }
+ slideDirection === "slideUp" ? hide(el) : show(el), callback();
+ }
+ var getProto = Object.getPrototypeOf, class2type = {}, toString = class2type.toString, hasOwn = class2type.hasOwnProperty, fnToString = hasOwn.toString, ObjectFunctionString = fnToString.call(Object);
+ function isFunction(obj) {
+ return typeof obj == "function" && typeof obj.nodeType != "number" && typeof obj.item != "function";
+ }
+ function isPlainObject(obj) {
+ var proto, Ctor;
+ return !obj || toString.call(obj) !== "[object Object]" ? !1 : (proto = getProto(obj), proto ? (Ctor = hasOwn.call(proto, "constructor") && proto.constructor, typeof Ctor == "function" && fnToString.call(Ctor) === ObjectFunctionString) : !0);
+ }
+ function extend() {
+ var options, name, src, copy, copyIsArray, clone, target = arguments[0], i = 1, length = arguments.length, deep = !1;
+ for (typeof target == "boolean" ? (deep = target, target = arguments[i] || {}, i++) : target = target || {}, typeof target != "object" && !isFunction(target) && (target = {}), i === length && (target = this, i--); i < length; i++)
+ if ((options = arguments[i]) != null)
+ for (name in options)
+ copy = options[name], !(name === "__proto__" || target === copy) && (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy))) ? (src = target[name], copyIsArray && !Array.isArray(src) ? clone = [] : !copyIsArray && !isPlainObject(src) ? clone = {} : clone = src, copyIsArray = !1, target[name] = extend(deep, clone, copy)) : copy !== void 0 && (target[name] = copy));
+ return target;
+ }
+ function BindingEventService() {
+ this.boundedEvents = [], this.destroy = function() {
+ this.unbindAll(), this.boundedEvents = [];
+ }, this.bind = function(element, eventName, listener, options) {
+ element.addEventListener(eventName, listener, options), this.boundedEvents.push({ element, eventName, listener });
+ }, this.unbind = function(element, eventName, listener) {
+ element && element.removeEventListener && element.removeEventListener(eventName, listener);
+ }, this.unbindByEventName = function(element, eventName) {
+ let boundedEvent = this.boundedEvents.find((e) => e.element === element && e.eventName === eventName);
+ boundedEvent && this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);
+ }, this.unbindAll = function() {
+ for (; this.boundedEvents.length > 0; ) {
+ let boundedEvent = this.boundedEvents.pop(), { element, eventName, listener } = boundedEvent;
+ this.unbind(element, eventName, listener);
+ }
+ };
+ }
+ var SlickCore = {
+ // "Event": Event,
+ // "EventData": EventData,
+ // "EventHandler": EventHandler,
+ // "Range": Range,
+ // "NonDataRow": NonDataItem,
+ // "Group": Group,
+ // "GroupTotals": GroupTotals,
+ // "EditorLock": EditorLock,
+ RegexSanitizer: regexSanitizer,
+ // "BindingEventService": BindingEventService,
+ Utils: {
+ debounce,
+ extend,
+ calculateAvailableSpace,
+ createDomElement,
+ emptyElement,
+ innerSize,
+ isEmptyObject,
+ noop,
+ offset,
+ height,
+ width,
+ setStyleSize,
+ contains,
+ toFloat,
+ parents,
+ show,
+ hide,
+ slideUp,
+ slideDown,
+ storage: {
+ // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati
+ _storage: /* @__PURE__ */ new WeakMap(),
+ put: function(element, key, obj) {
+ this._storage.has(element) || this._storage.set(element, /* @__PURE__ */ new Map()), this._storage.get(element).set(key, obj);
+ },
+ get: function(element, key) {
+ let el = this._storage.get(element);
+ return el ? el.get(key) : null;
+ },
+ remove: function(element, key) {
+ var ret = this._storage.get(element).delete(key);
+ return !this._storage.get(element).size === 0 && this._storage.delete(element), ret;
+ }
+ }
+ },
+ /***
+ * A global singleton editor lock.
+ * @class GlobalEditorLock
+ * @static
+ * @constructor
+ */
+ GlobalEditorLock: new EditorLock(),
+ keyCode: {
+ SPACE: 8,
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ RIGHT: 39,
+ TAB: 9,
+ UP: 38,
+ A: 65
+ },
+ preClickClassName: "slick-edit-preclick",
+ GridAutosizeColsMode: {
+ None: "NOA",
+ LegacyOff: "LOF",
+ LegacyForceFit: "LFF",
+ IgnoreViewport: "IGV",
+ FitColsToViewport: "FCV",
+ FitViewportToCols: "FVC"
+ },
+ ColAutosizeMode: {
+ Locked: "LCK",
+ Guide: "GUI",
+ Content: "CON",
+ ContentExpandOnly: "CXO",
+ ContentIntelligent: "CTI"
+ },
+ RowSelectionMode: {
+ FirstRow: "FS1",
+ FirstNRows: "FSN",
+ AllRows: "ALL",
+ LastRow: "LS1"
+ },
+ ValueFilterMode: {
+ None: "NONE",
+ DeDuplicate: "DEDP",
+ GetGreatestAndSub: "GR8T",
+ GetLongestTextAndSub: "LNSB",
+ GetLongestText: "LNSC"
+ },
+ WidthEvalMode: {
+ Auto: "AUTO",
+ TextOnly: "CANV",
+ HTML: "HTML"
+ }
+ }, {
+ Utils,
+ GlobalEditorLock,
+ keyCode,
+ preClickClassName,
+ GridAutosizeColsMode,
+ ColAutosizeMode,
+ RowSelectionMode,
+ ValueFilterMode,
+ WidthEvalMode
+ } = SlickCore;
+ typeof global != "undefined" && window.Slick && (global.Slick = window.Slick);
+ return __toCommonJS(slick_core_exports);
+})();
diff --git a/dist/browser/slick.dataview.js b/dist/browser/slick.dataview.js
new file mode 100644
index 00000000..da0a97de
--- /dev/null
+++ b/dist/browser/slick.dataview.js
@@ -0,0 +1,754 @@
+"use strict";
+(() => {
+ // src/slick.dataview.js
+ var SlickEvent = Slick.Event, EventData = Slick.EventData, Group = Slick.Group, GroupTotals = Slick.GroupTotals, Utils = Slick.Utils, GroupItemMetadataProvider = Slick.GroupItemMetadataProvider;
+ function DataView(options) {
+ var self = this, defaults = {
+ groupItemMetadataProvider: null,
+ inlineFilters: !1
+ }, idProperty = "id", items = [], rows = [], idxById = /* @__PURE__ */ new Map(), rowsById = null, filter = null, updated = null, suspend = !1, isBulkSuspend = !1, bulkDeleteIds = /* @__PURE__ */ new Map(), sortAsc = !0, fastSortField, sortComparer, refreshHints = {}, prevRefreshHints = {}, filterArgs, filteredItems = [], compiledFilter, compiledFilterWithCaching, filterCache = [], _grid = null, groupingInfoDefaults = {
+ getter: null,
+ formatter: null,
+ comparer: function(a, b) {
+ return a.value === b.value ? 0 : a.value > b.value ? 1 : -1;
+ },
+ predefinedValues: [],
+ aggregators: [],
+ aggregateEmpty: !1,
+ aggregateCollapsed: !1,
+ aggregateChildGroups: !1,
+ collapsed: !1,
+ displayTotalsRow: !0,
+ lazyTotalsCalculation: !1
+ }, groupingInfos = [], groups = [], toggledGroupsByLevel = [], groupingDelimiter = ":|:", selectedRowIds = null, preSelectedRowIdsChangeFn, pagesize = 0, pagenum = 0, totalRows = 0, onSelectedRowIdsChanged = new SlickEvent(), onSetItemsCalled = new SlickEvent(), onRowCountChanged = new SlickEvent(), onRowsChanged = new SlickEvent(), onRowsOrCountChanged = new SlickEvent(), onBeforePagingInfoChanged = new SlickEvent(), onPagingInfoChanged = new SlickEvent(), onGroupExpanded = new SlickEvent(), onGroupCollapsed = new SlickEvent();
+ options = Utils.extend(!0, {}, defaults, options);
+ function beginUpdate(bulkUpdate) {
+ suspend = !0, isBulkSuspend = bulkUpdate === !0;
+ }
+ function endUpdate() {
+ var wasBulkSuspend = isBulkSuspend;
+ isBulkSuspend = !1, suspend = !1, wasBulkSuspend && (processBulkDelete(), ensureIdUniqueness()), refresh();
+ }
+ function destroy() {
+ items = [], idxById = null, rowsById = null, filter = null, updated = null, sortComparer = null, filterCache = [], filteredItems = [], compiledFilter = null, compiledFilterWithCaching = null, _grid && _grid.onSelectedRowsChanged && _grid.onCellCssStylesChanged && (_grid.onSelectedRowsChanged.unsubscribe(), _grid.onCellCssStylesChanged.unsubscribe()), self.onRowsOrCountChanged && self.onRowsOrCountChanged.unsubscribe();
+ }
+ function setRefreshHints(hints) {
+ refreshHints = hints;
+ }
+ function setFilterArgs(args) {
+ filterArgs = args;
+ }
+ function processBulkDelete() {
+ if (idxById) {
+ for (var id, item, newIdx = 0, i = 0, l = items.length; i < l; i++) {
+ if (item = items[i], id = item[idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ bulkDeleteIds.has(id) ? idxById.delete(id) : (items[newIdx] = item, idxById.set(id, newIdx), ++newIdx);
+ }
+ items.length = newIdx, bulkDeleteIds = /* @__PURE__ */ new Map();
+ }
+ }
+ function updateIdxById(startingIndex) {
+ if (!(isBulkSuspend || !idxById)) {
+ startingIndex = startingIndex || 0;
+ for (var id, i = startingIndex, l = items.length; i < l; i++) {
+ if (id = items[i][idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ idxById.set(id, i);
+ }
+ }
+ }
+ function ensureIdUniqueness() {
+ if (!(isBulkSuspend || !idxById)) {
+ for (var id, i = 0, l = items.length; i < l; i++)
+ if (id = items[i][idProperty], id === void 0 || idxById.get(id) !== i)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ }
+ }
+ function getItems() {
+ return items;
+ }
+ function getIdPropertyName() {
+ return idProperty;
+ }
+ function setItems(data, objectIdProperty) {
+ objectIdProperty !== void 0 && (idProperty = objectIdProperty), items = filteredItems = data, onSetItemsCalled.notify({ idProperty: objectIdProperty, itemCount: items.length }, null, self), idxById = /* @__PURE__ */ new Map(), updateIdxById(), ensureIdUniqueness(), refresh();
+ }
+ function setPagingOptions(args) {
+ onBeforePagingInfoChanged.notify(getPagingInfo(), null, self).getReturnValue() !== !1 && (args.pageSize != null && (pagesize = args.pageSize, pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0), args.pageNum != null && (pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1))), onPagingInfoChanged.notify(getPagingInfo(), null, self), refresh());
+ }
+ function getPagingInfo() {
+ var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;
+ return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self };
+ }
+ function sort(comparer, ascending) {
+ sortAsc = ascending, sortComparer = comparer, fastSortField = null, ascending === !1 && items.reverse(), items.sort(comparer), ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function fastSort(field, ascending) {
+ sortAsc = ascending, fastSortField = field, sortComparer = null;
+ var oldToString = Object.prototype.toString;
+ Object.prototype.toString = typeof field == "function" ? field : function() {
+ return this[field];
+ }, ascending === !1 && items.reverse(), items.sort(), Object.prototype.toString = oldToString, ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function reSort() {
+ sortComparer ? sort(sortComparer, sortAsc) : fastSortField && fastSort(fastSortField, sortAsc);
+ }
+ function getFilteredItems() {
+ return filteredItems;
+ }
+ function getFilteredItemCount() {
+ return filteredItems.length;
+ }
+ function getFilter() {
+ return filter;
+ }
+ function setFilter(filterFn) {
+ filter = filterFn, options.inlineFilters && (compiledFilter = compileFilter(), compiledFilterWithCaching = compileFilterWithCaching()), refresh();
+ }
+ function getGrouping() {
+ return groupingInfos;
+ }
+ function setGrouping(groupingInfo) {
+ options.groupItemMetadataProvider || (options.groupItemMetadataProvider = new GroupItemMetadataProvider()), groups = [], toggledGroupsByLevel = [], groupingInfo = groupingInfo || [], groupingInfos = groupingInfo instanceof Array ? groupingInfo : [groupingInfo];
+ for (var i = 0; i < groupingInfos.length; i++) {
+ var gi = groupingInfos[i] = Utils.extend(!0, {}, groupingInfoDefaults, groupingInfos[i]);
+ gi.getterIsAFn = typeof gi.getter == "function", gi.compiledAccumulators = [];
+ for (var idx = gi.aggregators.length; idx--; )
+ gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);
+ toggledGroupsByLevel[i] = {};
+ }
+ refresh();
+ }
+ function groupBy(valueGetter, valueFormatter, sortComparer2) {
+ if (valueGetter == null) {
+ setGrouping([]);
+ return;
+ }
+ setGrouping({
+ getter: valueGetter,
+ formatter: valueFormatter,
+ comparer: sortComparer2
+ });
+ }
+ function setAggregators(groupAggregators, includeCollapsed) {
+ if (!groupingInfos.length)
+ throw new Error("[SlickGrid DataView] At least one grouping must be specified before calling setAggregators().");
+ groupingInfos[0].aggregators = groupAggregators, groupingInfos[0].aggregateCollapsed = includeCollapsed, setGrouping(groupingInfos);
+ }
+ function getItemByIdx(i) {
+ return items[i];
+ }
+ function getIdxById(id) {
+ return idxById && idxById.get(id);
+ }
+ function ensureRowsByIdCache() {
+ if (!rowsById) {
+ rowsById = {};
+ for (var i = 0, l = rows.length; i < l; i++)
+ rowsById[rows[i][idProperty]] = i;
+ }
+ }
+ function getRowByItem(item) {
+ return ensureRowsByIdCache(), rowsById[item[idProperty]];
+ }
+ function getRowById(id) {
+ return ensureRowsByIdCache(), rowsById[id];
+ }
+ function getItemById(id) {
+ return items[idxById && idxById.get(id)];
+ }
+ function mapItemsToRows(itemArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i = 0, l = itemArray.length; i < l; i++) {
+ var row = rowsById[itemArray[i][idProperty]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapIdsToRows(idArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i = 0, l = idArray.length; i < l; i++) {
+ var row = rowsById[idArray[i]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapRowsToIds(rowArray) {
+ for (var ids = [], i = 0, l = rowArray.length; i < l; i++)
+ if (rowArray[i] < rows.length) {
+ let rowItem = rows[rowArray[i]];
+ ids[ids.length] = rowItem && rowItem[idProperty];
+ }
+ return ids;
+ }
+ function updateSingleItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id))
+ throw new Error("[SlickGrid DataView] Invalid id");
+ if (id !== item[idProperty]) {
+ var newId = item[idProperty];
+ if (newId == null)
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a null id");
+ if (idxById.has(newId))
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a non-unique id");
+ idxById.set(newId, idxById.get(id)), idxById.delete(id), updated && updated[id] && delete updated[id], id = newId;
+ }
+ items[idxById.get(id)] = item, updated || (updated = {}), updated[id] = !0;
+ }
+ }
+ function updateItem(id, item) {
+ updateSingleItem(id, item), refresh();
+ }
+ function updateItems(ids, newItems) {
+ if (ids.length !== newItems.length)
+ throw new Error("[SlickGrid DataView] Mismatch on the length of ids and items provided to update");
+ for (var i = 0, l = newItems.length; i < l; i++)
+ updateSingleItem(ids[i], newItems[i]);
+ refresh();
+ }
+ function insertItem(insertBefore, item) {
+ items.splice(insertBefore, 0, item), updateIdxById(insertBefore), refresh();
+ }
+ function insertItems(insertBefore, newItems) {
+ Array.prototype.splice.apply(items, [insertBefore, 0].concat(newItems)), updateIdxById(insertBefore), refresh();
+ }
+ function addItem(item) {
+ items.push(item), updateIdxById(items.length - 1), refresh();
+ }
+ function addItems(newItems) {
+ items = items.concat(newItems), updateIdxById(items.length - newItems.length), refresh();
+ }
+ function deleteItem(id) {
+ if (idxById)
+ if (isBulkSuspend)
+ bulkDeleteIds.set(id, !0);
+ else {
+ var idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), items.splice(idx, 1), updateIdxById(idx), refresh();
+ }
+ }
+ function deleteItems(ids) {
+ if (!(ids.length === 0 || !idxById))
+ if (isBulkSuspend)
+ for (var i = 0, l = ids.length; i < l; i++) {
+ var id = ids[i], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ bulkDeleteIds.set(id, !0);
+ }
+ else {
+ for (var indexesToDelete = [], i = 0, l = ids.length; i < l; i++) {
+ var id = ids[i], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), indexesToDelete.push(idx);
+ }
+ indexesToDelete.sort();
+ for (var i = indexesToDelete.length - 1; i >= 0; --i)
+ items.splice(indexesToDelete[i], 1);
+ updateIdxById(indexesToDelete[0]), refresh();
+ }
+ }
+ function sortedAddItem(item) {
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()");
+ insertItem(sortedIndex(item), item);
+ }
+ function sortedUpdateItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id) || id !== item[idProperty])
+ throw new Error("[SlickGrid DataView] Invalid or non-matching id " + idxById.get(id));
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()");
+ var oldItem = getItemById(id);
+ sortComparer(oldItem, item) !== 0 ? (deleteItem(id), sortedAddItem(item)) : updateItem(id, item);
+ }
+ }
+ function sortedIndex(searchItem) {
+ for (var low = 0, high = items.length; low < high; ) {
+ var mid = low + high >>> 1;
+ sortComparer(items[mid], searchItem) === -1 ? low = mid + 1 : high = mid;
+ }
+ return low;
+ }
+ function getItemCount() {
+ return items.length;
+ }
+ function getLength() {
+ return rows.length;
+ }
+ function getItem(i) {
+ var item = rows[i];
+ if (item && item.__group && item.totals && !item.totals.initialized) {
+ var gi = groupingInfos[item.level];
+ gi.displayTotalsRow || (calculateTotals(item.totals), item.title = gi.formatter ? gi.formatter(item) : item.value);
+ } else
+ item && item.__groupTotals && !item.initialized && calculateTotals(item);
+ return item;
+ }
+ function getItemMetadata(i) {
+ var item = rows[i];
+ return item === void 0 ? null : item.__group ? options.groupItemMetadataProvider.getGroupRowMetadata(item) : item.__groupTotals ? options.groupItemMetadataProvider.getTotalsRowMetadata(item) : null;
+ }
+ function expandCollapseAllGroups(level, collapse) {
+ if (level == null)
+ for (var i = 0; i < groupingInfos.length; i++)
+ toggledGroupsByLevel[i] = {}, groupingInfos[i].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level: i, groupingKey: null }) : onGroupExpanded.notify({ level: i, groupingKey: null });
+ else
+ toggledGroupsByLevel[level] = {}, groupingInfos[level].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level, groupingKey: null }) : onGroupExpanded.notify({ level, groupingKey: null });
+ refresh();
+ }
+ function collapseAllGroups(level) {
+ expandCollapseAllGroups(level, !0);
+ }
+ function expandAllGroups(level) {
+ expandCollapseAllGroups(level, !1);
+ }
+ function expandCollapseGroup(level, groupingKey, collapse) {
+ toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse, refresh();
+ }
+ function collapseGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (groupingKey = arg0, level = arg0.split(groupingDelimiter).length - 1) : (groupingKey = args.join(groupingDelimiter), level = args.length - 1), expandCollapseGroup(level, groupingKey, !0), onGroupCollapsed.notify({ level, groupingKey });
+ }
+ function expandGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (level = arg0.split(groupingDelimiter).length - 1, groupingKey = arg0) : (level = args.length - 1, groupingKey = args.join(groupingDelimiter)), expandCollapseGroup(level, groupingKey, !1), onGroupExpanded.notify({ level, groupingKey });
+ }
+ function getGroups() {
+ return groups;
+ }
+ function extractGroups(rows2, parentGroup) {
+ for (var group, val, groups2 = [], groupsByVal = {}, r, level = parentGroup ? parentGroup.level + 1 : 0, gi = groupingInfos[level], i = 0, l = gi.predefinedValues.length; i < l; i++)
+ val = gi.predefinedValues[i], group = groupsByVal[val], group || (group = new Group(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group);
+ for (var i = 0, l = rows2.length; i < l; i++)
+ r = rows2[i], val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter], group = groupsByVal[val], group || (group = new Group(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group), group.rows[group.count++] = r;
+ if (level < groupingInfos.length - 1)
+ for (var i = 0; i < groups2.length; i++)
+ group = groups2[i], group.groups = extractGroups(group.rows, group);
+ return groups2.length && addTotals(groups2, level), groups2.sort(groupingInfos[level].comparer), groups2;
+ }
+ function calculateTotals(totals) {
+ var group = totals.group, gi = groupingInfos[group.level], isLeafLevel = group.level == groupingInfos.length, agg, idx = gi.aggregators.length;
+ if (!isLeafLevel && gi.aggregateChildGroups)
+ for (var i = group.groups.length; i--; )
+ group.groups[i].totals.initialized || calculateTotals(group.groups[i].totals);
+ for (; idx--; )
+ agg = gi.aggregators[idx], agg.init(), !isLeafLevel && gi.aggregateChildGroups ? gi.compiledAccumulators[idx].call(agg, group.groups) : gi.compiledAccumulators[idx].call(agg, group.rows), agg.storeResult(totals);
+ totals.initialized = !0;
+ }
+ function addGroupTotals(group) {
+ var gi = groupingInfos[group.level], totals = new GroupTotals();
+ totals.group = group, group.totals = totals, gi.lazyTotalsCalculation || calculateTotals(totals);
+ }
+ function addTotals(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupCollapsed = gi.collapsed, toggledGroups = toggledGroupsByLevel[level], idx = groups2.length, g; idx--; )
+ g = groups2[idx], !(g.collapsed && !gi.aggregateCollapsed) && (g.groups && addTotals(g.groups, level + 1), gi.aggregators.length && (gi.aggregateEmpty || g.rows.length || g.groups && g.groups.length) && addGroupTotals(g), g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey], g.title = gi.formatter ? gi.formatter(g) : g.value);
+ }
+ function flattenGroupedRows(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupedRows = [], rows2, gl = 0, g, i = 0, l = groups2.length; i < l; i++) {
+ if (g = groups2[i], groupedRows[gl++] = g, !g.collapsed) {
+ rows2 = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;
+ for (var j = 0, jj = rows2.length; j < jj; j++)
+ groupedRows[gl++] = rows2[j];
+ }
+ g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed) && (groupedRows[gl++] = g.totals);
+ }
+ return groupedRows;
+ }
+ function getFunctionInfo(fn) {
+ var fnStr = fn.toString(), usingEs5 = fnStr.indexOf("function") >= 0, fnRegex = usingEs5 ? /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/ : /^[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/, matches = fn.toString().match(fnRegex);
+ return {
+ params: matches[1].split(","),
+ body: matches[2]
+ };
+ }
+ function compileAccumulatorLoop(aggregator) {
+ if (aggregator.accumulate) {
+ var accumulatorInfo = getFunctionInfo(aggregator.accumulate), fn = new Function(
+ "_items",
+ "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" + accumulatorInfo.params[0] + " = _items[_i]; " + accumulatorInfo.body + "}"
+ ), fnName = "compiledAccumulatorLoop";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ } else
+ return function() {
+ };
+ }
+ function compileFilter() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args", tpl), fnName = "compiledFilter";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function compileFilterWithCaching() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args, _cache) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "if (_cache[_i]) { ",
+ "_retval[_idx++] = $item$; ",
+ "continue _coreloop; ",
+ "} ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args,_cache", tpl), fnName = "compiledFilterWithCaching";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function setFunctionName(fn, fnName) {
+ try {
+ Object.defineProperty(fn, "name", {
+ writable: !0,
+ value: fnName
+ });
+ } catch (err) {
+ fn.name = fnName;
+ }
+ }
+ function uncompiledFilter(items2, args) {
+ for (var retval = [], idx = 0, i = 0, ii = items2.length; i < ii; i++)
+ filter(items2[i], args) && (retval[idx++] = items2[i]);
+ return retval;
+ }
+ function uncompiledFilterWithCaching(items2, args, cache) {
+ for (var retval = [], idx = 0, item, i = 0, ii = items2.length; i < ii; i++)
+ item = items2[i], cache[i] ? retval[idx++] = item : filter(item, args) && (retval[idx++] = item, cache[i] = !0);
+ return retval;
+ }
+ function getFilteredAndPagedItems(items2) {
+ if (filter) {
+ var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter, batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
+ refreshHints.isFilterNarrowing ? filteredItems = batchFilter(filteredItems, filterArgs) : refreshHints.isFilterExpanding ? filteredItems = batchFilterWithCaching(items2, filterArgs, filterCache) : refreshHints.isFilterUnchanged || (filteredItems = batchFilter(items2, filterArgs));
+ } else
+ filteredItems = pagesize ? items2 : items2.concat();
+ var paged;
+ return pagesize ? (filteredItems.length <= pagenum * pagesize && (filteredItems.length === 0 ? pagenum = 0 : pagenum = Math.floor((filteredItems.length - 1) / pagesize)), paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize)) : paged = filteredItems, { totalRows: filteredItems.length, rows: paged };
+ }
+ function getRowDiffs(rows2, newRows) {
+ var item, r, eitherIsNonData, diff = [], from = 0, to = Math.max(newRows.length, rows2.length);
+ refreshHints && refreshHints.ignoreDiffsBefore && (from = Math.max(
+ 0,
+ Math.min(newRows.length, refreshHints.ignoreDiffsBefore)
+ )), refreshHints && refreshHints.ignoreDiffsAfter && (to = Math.min(
+ newRows.length,
+ Math.max(0, refreshHints.ignoreDiffsAfter)
+ ));
+ for (var i = from, rl = rows2.length; i < to; i++)
+ i >= rl ? diff[diff.length] = i : (item = newRows[i], r = rows2[i], (!item || groupingInfos.length && (eitherIsNonData = item.__nonDataRow || r.__nonDataRow) && item.__group !== r.__group || item.__group && !item.equals(r) || eitherIsNonData && // no good way to compare totals since they are arbitrary DTOs
+ // deep object comparison is pretty expensive
+ // always considering them 'dirty' seems easier for the time being
+ (item.__groupTotals || r.__groupTotals) || item[idProperty] != r[idProperty] || updated && updated[item[idProperty]]) && (diff[diff.length] = i));
+ return diff;
+ }
+ function recalc(_items) {
+ rowsById = null, (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing || refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) && (filterCache = []);
+ var filteredItems2 = getFilteredAndPagedItems(_items);
+ totalRows = filteredItems2.totalRows;
+ var newRows = filteredItems2.rows;
+ groups = [], groupingInfos.length && (groups = extractGroups(newRows), groups.length && (newRows = flattenGroupedRows(groups)));
+ var diff = getRowDiffs(rows, newRows);
+ return rows = newRows, diff;
+ }
+ function refresh() {
+ if (!suspend) {
+ var previousPagingInfo = Utils.extend(!0, {}, getPagingInfo()), countBefore = rows.length, totalRowsBefore = totalRows, diff = recalc(items, filter);
+ pagesize && totalRows < pagenum * pagesize && (pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1), diff = recalc(items, filter)), updated = null, prevRefreshHints = refreshHints, refreshHints = {}, totalRowsBefore !== totalRows && onBeforePagingInfoChanged.notify(previousPagingInfo, null, self) !== !1 && onPagingInfoChanged.notify(getPagingInfo(), null, self), countBefore !== rows.length && onRowCountChanged.notify({ previous: countBefore, current: rows.length, itemCount: items.length, dataView: self, callingOnRowsChanged: diff.length > 0 }, null, self), diff.length > 0 && onRowsChanged.notify({ rows: diff, itemCount: items.length, dataView: self, calledOnRowCountChanged: countBefore !== rows.length }, null, self), (countBefore !== rows.length || diff.length > 0) && onRowsOrCountChanged.notify({
+ rowsDiff: diff,
+ previousRowCount: countBefore,
+ currentRowCount: rows.length,
+ itemCount: items.length,
+ rowCountChanged: countBefore !== rows.length,
+ rowsChanged: diff.length > 0,
+ dataView: self
+ }, null, self);
+ }
+ }
+ function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {
+ var self2 = this;
+ _grid = grid;
+ var inHandler;
+ selectedRowIds = self2.mapRowsToIds(grid.getSelectedRows());
+ function setSelectedRowIds(rowIds) {
+ rowIds === !1 ? selectedRowIds = [] : selectedRowIds.sort().join(",") !== rowIds.sort().join(",") && (selectedRowIds = rowIds);
+ }
+ function update() {
+ if (selectedRowIds.length > 0 && !inHandler) {
+ inHandler = !0;
+ var selectedRows = self2.mapIdsToRows(selectedRowIds);
+ if (!preserveHidden) {
+ var selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: self2.mapRowsToIds(selectedRows),
+ rows: selectedRows,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData(), self2);
+ }
+ grid.setSelectedRows(selectedRows), inHandler = !1;
+ }
+ }
+ return grid.onSelectedRowsChanged.subscribe(function(e, args) {
+ if (!inHandler) {
+ var newSelectedRowIds = self2.mapRowsToIds(args.rows), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: newSelectedRowIds,
+ rows: args.rows,
+ added: !0,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData(), self2);
+ }
+ }), preSelectedRowIdsChangeFn = function(args) {
+ if (!inHandler) {
+ inHandler = !0;
+ var overwrite = typeof args.added == "undefined";
+ if (overwrite)
+ setSelectedRowIds(args.ids);
+ else {
+ var rowIds;
+ if (args.added)
+ if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {
+ var hiddenSelectedRowIds = selectedRowIds.filter(function(id) {
+ return self2.getRowById(id) === void 0;
+ });
+ rowIds = hiddenSelectedRowIds.concat(args.ids);
+ } else
+ rowIds = args.ids;
+ else
+ preserveHiddenOnSelectionChange && grid.getOptions().multiSelect ? rowIds = selectedRowIds.filter(function(id) {
+ return args.ids.indexOf(id) === -1;
+ }) : rowIds = [];
+ setSelectedRowIds(rowIds);
+ }
+ inHandler = !1;
+ }
+ }, this.onRowsOrCountChanged.subscribe(update), onSelectedRowIdsChanged;
+ }
+ function getAllSelectedIds() {
+ return selectedRowIds;
+ }
+ function getAllSelectedFilteredIds() {
+ return getAllSelectedFilteredItems().map(function(item) {
+ return item[idProperty];
+ });
+ }
+ function setSelectedIds(selectedIds, options2) {
+ var isRowBeingAdded = options2 && options2.isRowBeingAdded, shouldTriggerEvent = options2 && options2.shouldTriggerEvent, applyRowSelectionToGrid = options2 && options2.applyRowSelectionToGrid;
+ isRowBeingAdded !== !1 && (isRowBeingAdded = !0);
+ var selectedRows = self.mapIdsToRows(selectedIds), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: selectedIds,
+ rows: selectedRows,
+ added: isRowBeingAdded,
+ dataView: self
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), shouldTriggerEvent !== !1 && onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self.getAllSelectedFilteredIds()
+ }), new EventData(), self), applyRowSelectionToGrid !== !1 && _grid && _grid.setSelectedRows(selectedRows);
+ }
+ function getAllSelectedItems() {
+ var selectedData = [], selectedIds = getAllSelectedIds();
+ return selectedIds.forEach(function(id) {
+ selectedData.push(self.getItemById(id));
+ }), selectedData;
+ }
+ function getAllSelectedFilteredItems() {
+ if (!Array.isArray(selectedRowIds))
+ return [];
+ var intersection = filteredItems.filter(function(a) {
+ return selectedRowIds.some(function(b) {
+ return a[idProperty] === b;
+ });
+ });
+ return intersection || [];
+ }
+ function syncGridCellCssStyles(grid, key) {
+ var hashById, inHandler;
+ storeCellCssStyles(grid.getCellCssStyles(key));
+ function storeCellCssStyles(hash) {
+ hashById = {};
+ for (var row in hash) {
+ var id = rows[row][idProperty];
+ hashById[id] = hash[row];
+ }
+ }
+ function update() {
+ if (hashById) {
+ inHandler = !0, ensureRowsByIdCache();
+ var newHash = {};
+ for (var id in hashById) {
+ var row = rowsById[id];
+ row != null && (newHash[row] = hashById[id]);
+ }
+ grid.setCellCssStyles(key, newHash), inHandler = !1;
+ }
+ }
+ grid.onCellCssStylesChanged.subscribe(function(e, args) {
+ debugger;
+ inHandler || key == args.key && (args.hash ? storeCellCssStyles(args.hash) : (grid.onCellCssStylesChanged.unsubscribe(), self.onRowsOrCountChanged.unsubscribe(update)));
+ }), this.onRowsOrCountChanged.subscribe(update);
+ }
+ Utils.extend(this, {
+ // methods
+ beginUpdate,
+ endUpdate,
+ destroy,
+ setPagingOptions,
+ getPagingInfo,
+ getIdPropertyName,
+ getItems,
+ setItems,
+ setFilter,
+ getFilter,
+ getFilteredItems,
+ getFilteredItemCount,
+ sort,
+ fastSort,
+ reSort,
+ setGrouping,
+ getGrouping,
+ groupBy,
+ setAggregators,
+ collapseAllGroups,
+ expandAllGroups,
+ collapseGroup,
+ expandGroup,
+ getGroups,
+ getAllSelectedIds,
+ getAllSelectedItems,
+ getAllSelectedFilteredIds,
+ getAllSelectedFilteredItems,
+ setSelectedIds,
+ getIdxById,
+ getRowByItem,
+ getRowById,
+ getItemById,
+ getItemByIdx,
+ mapItemsToRows,
+ mapRowsToIds,
+ mapIdsToRows,
+ setRefreshHints,
+ setFilterArgs,
+ refresh,
+ updateItem,
+ updateItems,
+ insertItem,
+ insertItems,
+ addItem,
+ addItems,
+ deleteItem,
+ deleteItems,
+ sortedAddItem,
+ sortedUpdateItem,
+ syncGridSelection,
+ syncGridCellCssStyles,
+ // data provider methods
+ getItemCount,
+ getLength,
+ getItem,
+ getItemMetadata,
+ // events
+ onSelectedRowIdsChanged,
+ // NOTE this will only work when used with "syncGridSelection"
+ onSetItemsCalled,
+ onRowCountChanged,
+ onRowsChanged,
+ onRowsOrCountChanged,
+ onBeforePagingInfoChanged,
+ onPagingInfoChanged,
+ onGroupExpanded,
+ onGroupCollapsed
+ });
+ }
+ function AvgAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.count_ = 0, this.nonNullCount_ = 0, this.sum_ = 0;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ this.count_++, val != null && val !== "" && !isNaN(val) && (this.nonNullCount_++, this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.avg || (groupTotals.avg = {}), this.nonNullCount_ !== 0 && (groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_);
+ };
+ }
+ function MinAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.min_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.min_ == null || val < this.min_) && (this.min_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.min || (groupTotals.min = {}), groupTotals.min[this.field_] = this.min_;
+ };
+ }
+ function MaxAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.max_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.max_ == null || val > this.max_) && (this.max_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.max || (groupTotals.max = {}), groupTotals.max[this.field_] = this.max_;
+ };
+ }
+ function SumAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.sum_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.sum || (groupTotals.sum = {}), groupTotals.sum[this.field_] = this.sum_;
+ };
+ }
+ function CountAggregator(field) {
+ this.field_ = field, this.init = function() {
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.count || (groupTotals.count = {}), groupTotals.count[this.field_] = groupTotals.group.rows.length;
+ };
+ }
+ var Aggregators = {
+ Avg: AvgAggregator,
+ Min: MinAggregator,
+ Max: MaxAggregator,
+ Sum: SumAggregator,
+ Count: CountAggregator
+ };
+ window.Slick && (window.Slick.Data = window.Slick.Data || {}, window.Slick.Data.DataView = DataView, window.Slick.Data.Aggregators = Aggregators);
+})();
diff --git a/dist/browser/slick.editors.js b/dist/browser/slick.editors.js
new file mode 100644
index 00000000..aff92b33
--- /dev/null
+++ b/dist/browser/slick.editors.js
@@ -0,0 +1,354 @@
+"use strict";
+(() => {
+ // src/slick.editors.js
+ var keyCode = Slick.keyCode, Utils = Slick.Utils;
+ function TextEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.getValue = function() {
+ return input.value;
+ }, this.setValue = function(val) {
+ input.value = val;
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field] || "", input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function IntegerEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid integer"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function FloatEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ };
+ function getDecimalPlaces() {
+ var rtn = args.column.editorFixedDecimalPlaces;
+ return typeof rtn == "undefined" && (rtn = FloatEditor.DefaultDecimalPlaces), !rtn && rtn !== 0 ? null : rtn;
+ }
+ this.loadValue = function(item) {
+ defaultValue = item[args.column.field];
+ var decPlaces = getDecimalPlaces();
+ decPlaces !== null && (defaultValue || defaultValue === 0) && defaultValue.toFixed && (defaultValue = defaultValue.toFixed(decPlaces)), input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ var rtn = parseFloat(input.value);
+ FloatEditor.AllowEmptyValue ? !rtn && rtn !== 0 && (rtn = "") : rtn = rtn || 0;
+ var decPlaces = getDecimalPlaces();
+ return decPlaces !== null && (rtn || rtn === 0) && rtn.toFixed && (rtn = parseFloat(rtn.toFixed(decPlaces))), rtn;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid number"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ FloatEditor.DefaultDecimalPlaces = null;
+ FloatEditor.AllowEmptyValue = !1;
+ function FlatpickrEditor(args) {
+ if (typeof flatpickr == "undefined")
+ throw new Error("Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/");
+ var input, defaultValue, scope = this;
+ this.args = args;
+ var flatpickrInstance;
+ this.init = function() {
+ input = Utils.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.focus(), input.select(), flatpickrInstance = flatpickr(input, {
+ closeOnSelect: !0,
+ allowInput: !0,
+ altInput: !0,
+ altFormat: "m/d/Y",
+ dateFormat: "m/d/Y",
+ onChange: () => {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ }
+ }), args.compositeEditorOptions || setTimeout(() => {
+ scope.show(), scope.focus();
+ }, 50), Utils.width(input, Utils.width(input) - (args.compositeEditorOptions ? 28 : 18));
+ }, this.destroy = function() {
+ scope.hide(), flatpickrInstance && flatpickrInstance.destroy(), input.remove();
+ }, this.show = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.open();
+ }, this.hide = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.close();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select(), flatpickrInstance && flatpickrInstance.setDate(defaultValue);
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function YesNoSelectEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils.createDomElement("select", { tabIndex: 0, className: "editor-yesno" }, args.container), Utils.createDomElement("option", { value: "yes", textContent: "Yes" }, select), Utils.createDomElement("option", { value: "no", textContent: "No" }, select), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ select.value = (defaultValue = item[args.column.field]) ? "yes" : "no";
+ }, this.serializeValue = function() {
+ return select.value == "yes";
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return select.value != defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function CheckboxEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils.createDomElement("input", { className: "editor-checkbox", type: "checkbox", value: "true" }, args.container), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = !!item[args.column.field], defaultValue ? select.checked = !0 : select.checked = !1;
+ }, this.serializeValue = function() {
+ return select.checked;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return this.serializeValue() !== defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function PercentCompleteEditor(args) {
+ var input, picker, defaultValue, scope = this;
+ this.args = args;
+ var slider, sliderInputHandler = function() {
+ input.value = this.value;
+ }, sliderChangeHandler = function() {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ };
+ this.init = function() {
+ input = Utils.createDomElement("input", { className: "editor-percentcomplete", type: "text" }, args.container), Utils.width(input, args.container.clientWidth - 25), picker = Utils.createDomElement("div", { className: "editor-percentcomplete-picker" }, args.container);
+ let pickerIcon = Utils.createDomElement("span", { className: "editor-percentcomplete-picker-icon" }, picker), containerHelper = Utils.createDomElement("div", { className: "editor-percentcomplete-helper" }, picker), containerWrapper = Utils.createDomElement("div", { className: "editor-percentcomplete-wrapper" }, containerHelper);
+ Utils.createDomElement("div", { className: "editor-percentcomplete-slider" }, containerWrapper), Utils.createDomElement("input", { className: "editor-percentcomplete-slider", type: "range" }, containerWrapper);
+ let containerButtons = Utils.createDomElement("div", { className: "editor-percentcomplete-buttons" }, containerWrapper);
+ Utils.createDomElement("button", { value: "0", className: "slick-btn slick-btn-default", textContent: "Not started" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils.createDomElement("button", { value: "50", className: "slick-btn slick-btn-default", textContent: "In Progress" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils.createDomElement("button", { value: "100", className: "slick-btn slick-btn-default", textContent: "Complete" }, containerButtons), input.focus(), input.select(), slider = picker.querySelector("input.editor-percentcomplete-slider"), slider.value = defaultValue, slider.addEventListener("input", sliderInputHandler), slider.addEventListener("change", sliderChangeHandler);
+ let buttons = picker.querySelectorAll(".editor-percentcomplete-buttons button");
+ [].forEach.call(buttons, (button) => {
+ button.addEventListener("click", this.onClick);
+ });
+ }, this.onClick = function() {
+ input.value = this.value, slider.value = this.value;
+ }, this.destroy = function() {
+ slider.removeEventListener("input", sliderInputHandler), slider.removeEventListener("change", sliderChangeHandler), picker.querySelectorAll(".editor-percentcomplete-buttons button").forEach((button) => button.removeEventListener("click", this.onClick)), input.remove(), picker.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], slider.value = defaultValue, input.value = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && (parseInt(input.value, 10) || 0) != defaultValue;
+ }, this.validate = function() {
+ return isNaN(parseInt(input.value, 10)) ? {
+ valid: !1,
+ msg: "Please enter a valid positive number"
+ } : {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function LongTextEditor(args) {
+ var input, wrapper, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ var compositeEditorOptions = args.compositeEditorOptions;
+ args.grid.getOptions().editorCellNavOnLRKeys;
+ var container = compositeEditorOptions ? args.container : document.body;
+ if (wrapper = Utils.createDomElement("div", { className: "slick-large-editor-text" }, container), compositeEditorOptions ? (wrapper.style.position = "relative", Utils.setStyleSize(wrapper, "padding", 0), Utils.setStyleSize(wrapper, "border", 0)) : wrapper.style.position = "absolute", input = Utils.createDomElement("textarea", { rows: 5, style: { background: "white", width: "250px", height: "80px", border: "0", outline: "0" } }, wrapper), compositeEditorOptions)
+ input.addEventListener("change", this.onChange);
+ else {
+ let btnContainer = Utils.createDomElement("div", { style: "text-align:right" }, wrapper);
+ Utils.createDomElement("button", { id: "save", className: "slick-btn slick-btn-primary", textContent: "Save" }, btnContainer), Utils.createDomElement("button", { id: "cancel", className: "slick-btn slick-btn-default", textContent: "Cancel" }, btnContainer), wrapper.querySelector("#save").addEventListener("click", this.save), wrapper.querySelector("#cancel").addEventListener("click", this.cancel), input.addEventListener("keydown", this.handleKeyDown), scope.position(args.position);
+ }
+ input.focus(), input.select();
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.handleKeyDown = function(e) {
+ if (e.which == keyCode.ENTER && e.ctrlKey)
+ scope.save();
+ else if (e.which == keyCode.ESCAPE)
+ e.preventDefault(), scope.cancel();
+ else if (e.which == keyCode.TAB && e.shiftKey)
+ e.preventDefault(), args.grid.navigatePrev();
+ else if (e.which == keyCode.TAB)
+ e.preventDefault(), args.grid.navigateNext();
+ else if ((e.which == keyCode.LEFT || e.which == keyCode.RIGHT) && args.grid.getOptions().editorCellNavOnLRKeys) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ e.keyCode === keyCode.LEFT && cursorPosition === 0 && args.grid.navigatePrev(), e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1 && args.grid.navigateNext();
+ }
+ }, this.save = function() {
+ (args.grid.getOptions() || {}).autoCommitEdit ? args.grid.getEditorLock().commitCurrentEdit() : args.commitChanges();
+ }, this.cancel = function() {
+ input.value = defaultValue, args.cancelChanges();
+ }, this.hide = function() {
+ Utils.hide(wrapper);
+ }, this.show = function() {
+ Utils.show(wrapper);
+ }, this.position = function(position) {
+ Utils.setStyleSize(wrapper, "top", position.top - 5), Utils.setStyleSize(wrapper, "left", position.left - 2);
+ }, this.destroy = function() {
+ args.compositeEditorOptions ? input.removeEventListener("change", this.onChange) : (wrapper.querySelector("#save").removeEventListener("click", this.save), wrapper.querySelector("#cancel").removeEventListener("click", this.cancel), input.removeEventListener("keydown", this.handleKeyDown)), wrapper.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ input.value = defaultValue = item[args.column.field], input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+ }
+ function handleKeydownLRNav(e) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ (e.keyCode === keyCode.LEFT && cursorPosition > 0 || e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) && e.stopImmediatePropagation();
+ }
+ function handleKeydownLRNoNav(e) {
+ (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) && e.stopImmediatePropagation();
+ }
+ var Editors = {
+ Text: TextEditor,
+ Integer: IntegerEditor,
+ Float: FloatEditor,
+ Flatpickr: FlatpickrEditor,
+ YesNoSelect: YesNoSelectEditor,
+ Checkbox: CheckboxEditor,
+ PercentComplete: PercentCompleteEditor,
+ LongText: LongTextEditor
+ };
+ window.Slick && Utils.extend(Slick, {
+ Editors
+ });
+})();
diff --git a/dist/browser/slick.formatters.js b/dist/browser/slick.formatters.js
new file mode 100644
index 00000000..94cb9989
--- /dev/null
+++ b/dist/browser/slick.formatters.js
@@ -0,0 +1,33 @@
+"use strict";
+(() => {
+ // src/slick.formatters.js
+ var Utils = Slick.Utils;
+ function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {
+ return value == null || value === "" ? "-" : value < 50 ? "
" + value + "% " : "
" + value + "% ";
+ }
+ function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {
+ if (value == null || value === "")
+ return "";
+ var color;
+ return value < 30 ? color = "red" : value < 70 ? color = "silver" : color = "green", "
";
+ }
+ function YesNoFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? "Yes" : "No";
+ }
+ function CheckboxFormatter(row, cell, value, columnDef, dataContext) {
+ return `
`;
+ }
+ function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? '
' : "";
+ }
+ var Formatters = {
+ PercentComplete: PercentCompleteFormatter,
+ PercentCompleteBar: PercentCompleteBarFormatter,
+ YesNo: YesNoFormatter,
+ Checkmark: CheckmarkFormatter,
+ Checkbox: CheckboxFormatter
+ };
+ window.Slick && Utils.extend(Slick, {
+ Formatters
+ });
+})();
diff --git a/dist/browser/slick.grid.js b/dist/browser/slick.grid.js
new file mode 100644
index 00000000..797613c6
--- /dev/null
+++ b/dist/browser/slick.grid.js
@@ -0,0 +1,2529 @@
+"use strict";
+(() => {
+ // src/slick.grid.js
+ var BindingEventService = Slick.BindingEventService, ColAutosizeMode = Slick.ColAutosizeMode, SlickEvent = Slick.Event, EventData = Slick.EventData, GlobalEditorLock = Slick.GlobalEditorLock, GridAutosizeColsMode = Slick.GridAutosizeColsMode, Group = Slick.Group, GroupTotals = Slick.GroupTotals, keyCode = Slick.keyCode, preClickClassName = Slick.preClickClassName, SlickRange = Slick.Range, RowSelectionMode = Slick.RowSelectionMode, ValueFilterMode = Slick.ValueFilterMode, Utils = Slick.Utils, WidthEvalMode = Slick.WidthEvalMode, Draggable = Slick.Draggable, MouseWheel = Slick.MouseWheel, Resizable = Slick.Resizable, scrollbarDimensions, maxSupportedCssHeight;
+ function SlickGrid(container, data, columns, options) {
+ var defaults = {
+ alwaysShowVerticalScroll: !1,
+ alwaysAllowHorizontalScroll: !1,
+ explicitInitialization: !1,
+ rowHeight: 25,
+ defaultColumnWidth: 80,
+ enableAddRow: !1,
+ leaveSpaceForNewRows: !1,
+ editable: !1,
+ autoEdit: !0,
+ autoCommitEdit: !1,
+ suppressActiveCellChangeOnEdit: !1,
+ enableCellNavigation: !0,
+ enableColumnReorder: !0,
+ asyncEditorLoading: !1,
+ asyncEditorLoadDelay: 100,
+ forceFitColumns: !1,
+ enableAsyncPostRender: !1,
+ asyncPostRenderDelay: 50,
+ enableAsyncPostRenderCleanup: !1,
+ asyncPostRenderCleanupDelay: 40,
+ auto: !1,
+ editorLock: GlobalEditorLock,
+ showColumnHeader: !0,
+ showHeaderRow: !1,
+ headerRowHeight: 25,
+ createFooterRow: !1,
+ showFooterRow: !1,
+ footerRowHeight: 25,
+ createPreHeaderPanel: !1,
+ showPreHeaderPanel: !1,
+ preHeaderPanelHeight: 25,
+ showTopPanel: !1,
+ topPanelHeight: 25,
+ formatterFactory: null,
+ editorFactory: null,
+ cellFlashingCssClass: "flashing",
+ selectedCellCssClass: "selected",
+ multiSelect: !0,
+ enableTextSelectionOnCells: !1,
+ dataItemColumnValueExtractor: null,
+ frozenBottom: !1,
+ frozenColumn: -1,
+ frozenRow: -1,
+ frozenRightViewportMinWidth: 100,
+ fullWidthRows: !1,
+ multiColumnSort: !1,
+ numberedMultiColumnSort: !1,
+ tristateMultiColumnSort: !1,
+ sortColNumberInSeparateSpan: !1,
+ defaultFormatter,
+ forceSyncScrolling: !1,
+ addNewRowCssClass: "new-row",
+ preserveCopiedSelectionOnPaste: !1,
+ showCellSelection: !0,
+ viewportClass: null,
+ minRowBuffer: 3,
+ emulatePagingWhenScrolling: !0,
+ // when scrolling off bottom of viewport, place new row at top of viewport
+ editorCellNavOnLRKeys: !1,
+ enableMouseWheelScrollHandler: !0,
+ doPaging: !0,
+ autosizeColsMode: GridAutosizeColsMode.LegacyOff,
+ autosizeColPaddingPx: 4,
+ autosizeTextAvgToMWidthRatio: 0.75,
+ viewportSwitchToScrollModeWidthPercent: void 0,
+ viewportMinWidthPx: void 0,
+ viewportMaxWidthPx: void 0,
+ suppressCssChangesOnHiddenInit: !1,
+ scrollDebounceDelay: -1,
+ // add a scroll delay to avoid screen flickering, -1 to disable delay
+ ffMaxSupportedCssHeight: 6e6,
+ maxSupportedCssHeight: 1e9,
+ sanitizer: void 0,
+ // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)
+ logSanitizedHtml: !1
+ // log to console when sanitised - recommend true for testing of dev and production
+ }, columnDefaults = {
+ name: "",
+ resizable: !0,
+ sortable: !1,
+ minWidth: 30,
+ maxWidth: void 0,
+ rerenderOnResize: !1,
+ headerCssClass: null,
+ defaultSortAsc: !0,
+ focusable: !0,
+ selectable: !0,
+ hidden: !1
+ }, columnAutosizeDefaults = {
+ ignoreHeaderText: !1,
+ colValueArray: void 0,
+ allowAddlPercent: void 0,
+ formatterOverride: void 0,
+ autosizeMode: ColAutosizeMode.ContentIntelligent,
+ rowSelectionModeOnInit: void 0,
+ rowSelectionMode: RowSelectionMode.FirstNRows,
+ rowSelectionCount: 100,
+ valueFilterMode: ValueFilterMode.None,
+ widthEvalMode: WidthEvalMode.Auto,
+ sizeToRemaining: void 0,
+ widthPx: void 0,
+ contentSizePx: 0,
+ headerWidthPx: 0,
+ colDataTypeOf: void 0
+ }, th, h, ph, n, cj, page = 0, offset = 0, vScrollDir = 1;
+ let show = Utils.show, hide = Utils.hide;
+ var _bindingEventService = new BindingEventService(), initialized = !1, _container, uid = "slickgrid_" + Math.round(1e6 * Math.random()), self = this, _focusSink, _focusSink2, _groupHeaders = [], _headerScroller = [], _headers = [], _headerRows, _headerRowScroller, _headerRowSpacerL, _headerRowSpacerR, _footerRow, _footerRowScroller, _footerRowSpacerL, _footerRowSpacerR, _preHeaderPanel, _preHeaderPanelScroller, _preHeaderPanelSpacer, _preHeaderPanelR, _preHeaderPanelScrollerR, _preHeaderPanelSpacerR, _topPanelScrollers, _topPanels, _viewport, _canvas, _style, _boundAncestors = [], stylesheet, columnCssRulesL, columnCssRulesR, viewportH, viewportW, canvasWidth, canvasWidthL, canvasWidthR, headersWidth, headersWidthL, headersWidthR, viewportHasHScroll, viewportHasVScroll, headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, cellWidthDiff = 0, cellHeightDiff = 0, absoluteColumnMinWidth, hasFrozenRows = !1, frozenRowsHeight = 0, actualFrozenRow = -1, paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, topPanelH = 0, headerRowH = 0, footerRowH = 0, tabbingDirection = 1, _activeCanvasNode, _activeViewportNode, activePosX, activeRow, activeCell, activeCellNode = null, currentEditor = null, serializedEditorValue, editController, rowsCache = {}, renderedRows = 0, numVisibleRows = 0, prevScrollTop = 0, scrollTop = 0, lastRenderedScrollTop = 0, lastRenderedScrollLeft = 0, prevScrollLeft = 0, scrollLeft = 0, selectionModel, selectedRows = [], plugins = [], cellCssClasses = {}, columnsById = {}, sortColumns = [], columnPosLeft = [], columnPosRight = [], pagingActive = !1, pagingIsLastPage = !1, scrollThrottle = ActionThrottle(render, 50), h_editorLoader = null, h_render = null, h_postrender = null, h_postrenderCleanup = null, postProcessedRows = {}, postProcessToRow = null, postProcessFromRow = null, postProcessedCleanupQueue = [], postProcessgroupId = 0, counter_rows_rendered = 0, counter_rows_removed = 0, _paneHeaderL, _paneHeaderR, _paneTopL, _paneTopR, _paneBottomL, _paneBottomR, _headerScrollerL, _headerScrollerR, _headerL, _headerR, _groupHeadersL, _groupHeadersR, _headerRowScrollerL, _headerRowScrollerR, _footerRowScrollerL, _footerRowScrollerR, _headerRowL, _headerRowR, _footerRowL, _footerRowR, _topPanelScrollerL, _topPanelScrollerR, _topPanelL, _topPanelR, _viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR, _canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR, _viewportScrollContainerX, _viewportScrollContainerY, _headerScrollContainer, _headerRowScrollContainer, _footerRowScrollContainer, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, _hiddenParents, oldProps = [], enforceFrozenRowHeightRecalc = !1, columnResizeDragging = !1, slickDraggableInstance = null, slickMouseWheelInstances = [], slickResizableInstances = [], sortableSideLeftInstance, sortableSideRightInstance;
+ function init() {
+ if (typeof container == "string" ? _container = document.querySelector(container) : _container = container, !_container)
+ throw new Error("SlickGrid requires a valid container, " + container + " does not exist in the DOM.");
+ if (maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight(), options = Utils.extend(!0, {}, defaults, options), validateAndEnforceOptions(), columnDefaults.width = options.defaultColumnWidth, options.suppressCssChangesOnHiddenInit || cacheCssForHiddenInit(), updateColumnProps(), options.enableColumnReorder && (!Sortable || !Sortable.create))
+ throw new Error("SlickGrid requires Sortable.js module to be loaded");
+ editController = {
+ commitCurrentEdit,
+ cancelCurrentEdit
+ }, _container.replaceChildren(), _container.style.overflow = "hidden", _container.style.outline = 0, _container.classList.add(uid), _container.classList.add("ui-widget");
+ let containerStyles = window.getComputedStyle(_container);
+ /relative|absolute|fixed/.test(containerStyles.position) || (_container.style.position = "relative"), _focusSink = Utils.createDomElement("div", { tabIndex: 0, style: { position: "fixed", width: "0px", height: "0px", top: "0px", left: "0px", outline: "0px" } }, _container), _paneHeaderL = Utils.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-left", tabIndex: 0 }, _container), _paneHeaderR = Utils.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-right", tabIndex: 0 }, _container), _paneTopL = Utils.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-left", tabIndex: 0 }, _container), _paneTopR = Utils.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-right", tabIndex: 0 }, _container), _paneBottomL = Utils.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-left", tabIndex: 0 }, _container), _paneBottomR = Utils.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-right", tabIndex: 0 }, _container), options.createPreHeaderPanel && (_preHeaderPanelScroller = Utils.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderL), _preHeaderPanelScroller.appendChild(document.createElement("div")), _preHeaderPanel = Utils.createDomElement("div", null, _preHeaderPanelScroller), _preHeaderPanelSpacer = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScroller), _preHeaderPanelScrollerR = Utils.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderR), _preHeaderPanelR = Utils.createDomElement("div", null, _preHeaderPanelScrollerR), _preHeaderPanelSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScrollerR), options.showPreHeaderPanel || (hide(_preHeaderPanelScroller), hide(_preHeaderPanelScrollerR))), _headerScrollerL = Utils.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-left" }, _paneHeaderL), _headerScrollerR = Utils.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-right" }, _paneHeaderR), _headerScroller.push(_headerScrollerL), _headerScroller.push(_headerScrollerR), _headerL = Utils.createDomElement("div", { className: "slick-header-columns slick-header-columns-left", style: { left: "-1000px" } }, _headerScrollerL), _headerR = Utils.createDomElement("div", { className: "slick-header-columns slick-header-columns-right", style: { left: "-1000px" } }, _headerScrollerR), _headers = [_headerL, _headerR], _headerRowScrollerL = Utils.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopL), _headerRowScrollerR = Utils.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopR), _headerRowScroller = [_headerRowScrollerL, _headerRowScrollerR], _headerRowSpacerL = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerL), _headerRowSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerR), _headerRowL = Utils.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-left" }, _headerRowScrollerL), _headerRowR = Utils.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-right" }, _headerRowScrollerR), _headerRows = [_headerRowL, _headerRowR], _topPanelScrollerL = Utils.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopL), _topPanelScrollerR = Utils.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopR), _topPanelScrollers = [_topPanelScrollerL, _topPanelScrollerR], _topPanelL = Utils.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerL), _topPanelR = Utils.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerR), _topPanels = [_topPanelL, _topPanelR], options.showColumnHeader || _headerScroller.forEach(function(el) {
+ hide(el);
+ }), options.showTopPanel || _topPanelScrollers.forEach(function(scroller) {
+ hide(scroller);
+ }), options.showHeaderRow || _headerRowScroller.forEach(function(scroller) {
+ hide(scroller);
+ }), _viewportTopL = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-left", tabIndex: 0 }, _paneTopL), _viewportTopR = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-right", tabIndex: 0 }, _paneTopR), _viewportBottomL = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-left", tabIndex: 0 }, _paneBottomL), _viewportBottomR = Utils.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-right", tabIndex: 0 }, _paneBottomR), _viewport = [_viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR], options.viewportClass && _viewport.forEach(function(view) {
+ view.classList.add(options.viewportClass);
+ }), _activeViewportNode = _viewportTopL, _canvasTopL = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-left", tabIndex: 0 }, _viewportTopL), _canvasTopR = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-right", tabIndex: 0 }, _viewportTopR), _canvasBottomL = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-left", tabIndex: 0 }, _viewportBottomL), _canvasBottomR = Utils.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-right", tabIndex: 0 }, _viewportBottomR), _canvas = [_canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR], scrollbarDimensions = scrollbarDimensions || measureScrollbar(), _activeCanvasNode = _canvasTopL, _preHeaderPanelSpacer && Utils.width(_preHeaderPanelSpacer, getCanvasWidth() + scrollbarDimensions.width), _headers.forEach(function(el) {
+ Utils.width(el, getHeadersWidth());
+ }), Utils.width(_headerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), Utils.width(_headerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), options.createFooterRow && (_footerRowScrollerR = Utils.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopR), _footerRowScrollerL = Utils.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopL), _footerRowScroller = [_footerRowScrollerL, _footerRowScrollerR], _footerRowSpacerL = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerL), Utils.width(_footerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), _footerRowSpacerR = Utils.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerR), Utils.width(_footerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), _footerRowL = Utils.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-left" }, _footerRowScrollerL), _footerRowR = Utils.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-right" }, _footerRowScrollerR), _footerRow = [_footerRowL, _footerRowR], options.showFooterRow || _footerRowScroller.forEach(function(scroller) {
+ hide(scroller);
+ })), _focusSink2 = _focusSink.cloneNode(!0), _container.append(_focusSink2), options.explicitInitialization || finishInitialization();
+ }
+ function finishInitialization() {
+ initialized || (initialized = !0, getViewportWidth(), getViewportHeight(), measureCellPaddingAndBorder(), disableSelection(_headers), options.enableTextSelectionOnCells || _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "selectstart.ui", function(event) {
+ event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement;
+ });
+ }), setFrozenOptions(), setPaneVisibility(), setScroller(), setOverflow(), updateColumnCaches(), createColumnHeaders(), createColumnFooter(), setupColumnSort(), createCssRules(), resizeCanvas(), bindAncestorScrollEvents(), _bindingEventService.bind(_container, "resize.slickgrid", resizeCanvas), _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "scroll", handleScroll);
+ }), options.enableMouseWheelScrollHandler && _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.bind(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.bind(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleHeaderRowScroll);
+ }), options.createFooterRow && (_footerRow.forEach(function(footer) {
+ _bindingEventService.bind(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.bind(footer, "click", handleFooterClick);
+ }), _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleFooterRowScroll);
+ })), options.createPreHeaderPanel && _bindingEventService.bind(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.bind(_focusSink, "keydown", handleKeyDown), _bindingEventService.bind(_focusSink2, "keydown", handleKeyDown), _canvas.forEach(function(element) {
+ _bindingEventService.bind(element, "keydown", handleKeyDown), _bindingEventService.bind(element, "click", handleClick), _bindingEventService.bind(element, "dblclick", handleDblClick), _bindingEventService.bind(element, "contextmenu", handleContextMenu), _bindingEventService.bind(element, "mouseover", handleCellMouseOver), _bindingEventService.bind(element, "mouseout", handleCellMouseOut);
+ }), Draggable && (slickDraggableInstance = Draggable({
+ containerElement: _container,
+ allowDragFrom: "div.slick-cell",
+ onDragInit: handleDragInit,
+ onDragStart: handleDragStart,
+ onDrag: handleDrag,
+ onDragEnd: handleDragEnd
+ })), options.suppressCssChangesOnHiddenInit || restoreCssFromHiddenInit());
+ }
+ function cacheCssForHiddenInit() {
+ _hiddenParents = Utils.parents(_container, ":hidden");
+ for (let el of _hiddenParents) {
+ var old = {};
+ for (let name in cssShow)
+ old[name] = el.style[name], el.style[name] = cssShow[name];
+ oldProps.push(old);
+ }
+ }
+ function restoreCssFromHiddenInit() {
+ let i2 = 0;
+ for (let el of _hiddenParents) {
+ var old = oldProps[i2++];
+ for (let name in cssShow)
+ el.style[name] = old[name];
+ }
+ }
+ function hasFrozenColumns() {
+ return options.frozenColumn > -1;
+ }
+ function registerPlugin(plugin) {
+ plugins.unshift(plugin), plugin.init(self);
+ }
+ function unregisterPlugin(plugin) {
+ for (var i2 = plugins.length; i2 >= 0; i2--)
+ if (plugins[i2] === plugin) {
+ plugins[i2].destroy && plugins[i2].destroy(), plugins.splice(i2, 1);
+ break;
+ }
+ }
+ function getPluginByName(name) {
+ for (var i2 = plugins.length - 1; i2 >= 0; i2--)
+ if (plugins[i2].pluginName === name)
+ return plugins[i2];
+ }
+ function setSelectionModel(model) {
+ selectionModel && (selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged), selectionModel.destroy && selectionModel.destroy()), selectionModel = model, selectionModel && (selectionModel.init(self), selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged));
+ }
+ function getSelectionModel() {
+ return selectionModel;
+ }
+ function getCanvasNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getCanvases(), columnIdOrIdx, rowIndex);
+ }
+ function getActiveCanvasNode(e) {
+ return e === void 0 || (e instanceof EventData && (e = e.getNativeEvent()), _activeCanvasNode = e.target.closest(".grid-canvas")), _activeCanvasNode;
+ }
+ function getCanvases() {
+ return _canvas;
+ }
+ function getViewportNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getViewports(), columnIdOrIdx, rowIndex);
+ }
+ function getViewports() {
+ return _viewport;
+ }
+ function getActiveViewportNode(e) {
+ return setActiveViewportNode(e), _activeViewportNode;
+ }
+ function setActiveViewportNode(e) {
+ return e instanceof EventData && (e = e.getNativeEvent()), _activeViewportNode = e.target.closest(".slick-viewport"), _activeViewportNode;
+ }
+ function _getContainerElement(targetContainers, columnIdOrIdx, rowIndex) {
+ if (targetContainers) {
+ columnIdOrIdx || (columnIdOrIdx = 0), rowIndex || (rowIndex = 0);
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), isBottomSide = hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1), isRightSide = hasFrozenColumns() && idx > options.frozenColumn;
+ return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];
+ }
+ }
+ function measureScrollbar() {
+ var outerdiv = Utils.createDomElement("div", { className: _viewport.className, style: { position: "absolute", top: "-10000px", left: "-10000px", overflow: "auto", width: "100px", height: "100px" } }, document.body), innerdiv = Utils.createDomElement("div", { style: { width: "200px", height: "200px", overflow: "auto" } }, outerdiv), dim = {
+ width: outerdiv.offsetWidth - outerdiv.clientWidth,
+ height: outerdiv.offsetHeight - outerdiv.clientHeight
+ };
+ return innerdiv.remove(), outerdiv.remove(), dim;
+ }
+ function getHeadersWidth() {
+ headersWidth = headersWidthL = headersWidthR = 0;
+ for (var includeScrollbar = !options.autoHeight, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ var width = columns[i2].width;
+ options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += width : headersWidthL += width;
+ }
+ return includeScrollbar && (options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += scrollbarDimensions.width : headersWidthL += scrollbarDimensions.width), hasFrozenColumns() ? (headersWidthL = headersWidthL + 1e3, headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL, headersWidthR += scrollbarDimensions.width) : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidth = headersWidthL + headersWidthR, Math.max(headersWidth, viewportW) + 1e3;
+ }
+ function getHeadersWidthL() {
+ return headersWidthL = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn || (headersWidthL += column.width);
+ }), hasFrozenColumns() ? headersWidthL += 1e3 : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidthL;
+ }
+ function getHeadersWidthR() {
+ return headersWidthR = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn && (headersWidthR += column.width);
+ }), hasFrozenColumns() && (headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL(), headersWidthR += scrollbarDimensions.width), headersWidthR;
+ }
+ function getCanvasWidth() {
+ var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2 = columns.length;
+ for (canvasWidthL = canvasWidthR = 0; i2--; )
+ !columns[i2] || columns[i2].hidden || (hasFrozenColumns() && i2 > options.frozenColumn ? canvasWidthR += columns[i2].width : canvasWidthL += columns[i2].width);
+ var totalRowWidth = canvasWidthL + canvasWidthR;
+ if (options.fullWidthRows) {
+ var extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;
+ extraWidth > 0 && (totalRowWidth += extraWidth, hasFrozenColumns() ? canvasWidthR += extraWidth : canvasWidthL += extraWidth);
+ }
+ return totalRowWidth;
+ }
+ function updateCanvasWidth(forceColumnWidthsUpdate) {
+ var oldCanvasWidth = canvasWidth, oldCanvasWidthL = canvasWidthL, oldCanvasWidthR = canvasWidthR, widthChanged;
+ if (canvasWidth = getCanvasWidth(), widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR, widthChanged || hasFrozenColumns() || hasFrozenRows)
+ if (Utils.width(_canvasTopL, canvasWidthL), getHeadersWidth(), Utils.width(_headerL, headersWidthL), Utils.width(_headerR, headersWidthR), hasFrozenColumns()) {
+ let cWidth = Utils.width(_container) || 0;
+ if (cWidth > 0 && canvasWidthL > cWidth)
+ throw new Error("[SlickGrid] Frozen columns cannot be wider than the actual grid container width. Make sure to have less columns freezed or make your grid container wider");
+ Utils.width(_canvasTopR, canvasWidthR), Utils.width(_paneHeaderL, canvasWidthL), Utils.setStyleSize(_paneHeaderR, "left", canvasWidthL), Utils.setStyleSize(_paneHeaderR, "width", viewportW - canvasWidthL), Utils.width(_paneTopL, canvasWidthL), Utils.setStyleSize(_paneTopR, "left", canvasWidthL), Utils.width(_paneTopR, viewportW - canvasWidthL), Utils.width(_headerRowScrollerL, canvasWidthL), Utils.width(_headerRowScrollerR, viewportW - canvasWidthL), Utils.width(_headerRowL, canvasWidthL), Utils.width(_headerRowR, canvasWidthR), options.createFooterRow && (Utils.width(_footerRowScrollerL, canvasWidthL), Utils.width(_footerRowScrollerR, viewportW - canvasWidthL), Utils.width(_footerRowL, canvasWidthL), Utils.width(_footerRowR, canvasWidthR)), options.createPreHeaderPanel && Utils.width(_preHeaderPanel, canvasWidth), Utils.width(_viewportTopL, canvasWidthL), Utils.width(_viewportTopR, viewportW - canvasWidthL), hasFrozenRows && (Utils.width(_paneBottomL, canvasWidthL), Utils.setStyleSize(_paneBottomR, "left", canvasWidthL), Utils.width(_viewportBottomL, canvasWidthL), Utils.width(_viewportBottomR, viewportW - canvasWidthL), Utils.width(_canvasBottomL, canvasWidthL), Utils.width(_canvasBottomR, canvasWidthR));
+ } else
+ Utils.width(_paneHeaderL, "100%"), Utils.width(_paneTopL, "100%"), Utils.width(_headerRowScrollerL, "100%"), Utils.width(_headerRowL, canvasWidth), options.createFooterRow && (Utils.width(_footerRowScrollerL, "100%"), Utils.width(_footerRowL, canvasWidth)), options.createPreHeaderPanel && Utils.width(_preHeaderPanel, canvasWidth), Utils.width(_viewportTopL, "100%"), hasFrozenRows && (Utils.width(_viewportBottomL, "100%"), Utils.width(_canvasBottomL, canvasWidthL));
+ viewportHasHScroll = canvasWidth >= viewportW - scrollbarDimensions.width, Utils.width(_headerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils.width(_headerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), options.createFooterRow && (Utils.width(_footerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils.width(_footerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0))), (widthChanged || forceColumnWidthsUpdate) && applyColumnWidths();
+ }
+ function disableSelection(target) {
+ target.forEach(function(el) {
+ el.setAttribute("unselectable", "on"), el.style.MozUserSelect = "none", _bindingEventService.bind(el, "selectstart.ui", function() {
+ return !1;
+ });
+ });
+ }
+ function getMaxSupportedCssHeight() {
+ let supportedHeight = 1e6, testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? options.ffMaxSupportedCssHeight : options.maxSupportedCssHeight, div = Utils.createDomElement("div", { style: { display: "hidden" } }, document.body);
+ for (; ; ) {
+ let test = supportedHeight * 2;
+ Utils.height(div, test);
+ let height = Utils.height(div);
+ if (test > testUpTo || height !== test)
+ break;
+ supportedHeight = test;
+ }
+ return div.remove(), supportedHeight;
+ }
+ function getUID() {
+ return uid;
+ }
+ function getHeaderColumnWidthDiff() {
+ return headerColumnWidthDiff;
+ }
+ function getScrollbarDimensions() {
+ return scrollbarDimensions;
+ }
+ function getDisplayedScrollbarDimensions() {
+ return {
+ width: viewportHasVScroll ? scrollbarDimensions.width : 0,
+ height: viewportHasHScroll ? scrollbarDimensions.height : 0
+ };
+ }
+ function getAbsoluteColumnMinWidth() {
+ return absoluteColumnMinWidth;
+ }
+ function bindAncestorScrollEvents() {
+ for (var elem = hasFrozenRows && !options.frozenBottom ? _canvasBottomL : _canvasTopL; (elem = elem.parentNode) != document.body && elem != null; )
+ (elem == _viewportTopL || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) && (_boundAncestors.push(elem), _bindingEventService.bind(elem, "scroll." + uid, handleActiveCellPositionChange));
+ }
+ function unbindAncestorScrollEvents() {
+ _boundAncestors.forEach(function(ancestor) {
+ _bindingEventService.unbindByEventName(ancestor, "scroll." + uid);
+ }), _boundAncestors = [];
+ }
+ function updateColumnHeader(columnId, title, toolTip) {
+ if (initialized) {
+ var idx = getColumnIndex(columnId);
+ if (idx != null) {
+ var columnDef = columns[idx], header = getColumnByIndex(idx);
+ header && (title !== void 0 && (columns[idx].name = title), toolTip !== void 0 && (columns[idx].toolTip = toolTip), trigger(self.onBeforeHeaderCellDestroy, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }), header.setAttribute("title", toolTip || ""), title !== void 0 && (header.children[0].innerHTML = sanitizeHtmlString(title)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }));
+ }
+ }
+ }
+ function getHeader(columnDef) {
+ if (!columnDef)
+ return hasFrozenColumns() ? _headers : _headerL;
+ var idx = getColumnIndex(columnDef.id);
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL;
+ }
+ function getHeaderColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), targetHeader = hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL, targetIndex = hasFrozenColumns() ? idx <= options.frozenColumn ? idx : idx - options.frozenColumn - 1 : idx;
+ return targetHeader.children[targetIndex];
+ }
+ function getHeaderRow() {
+ return hasFrozenColumns() ? _headerRows : _headerRows[0];
+ }
+ function getFooterRow() {
+ return hasFrozenColumns() ? _footerRow : _footerRow[0];
+ }
+ function getPreHeaderPanel() {
+ return _preHeaderPanel;
+ }
+ function getPreHeaderPanelRight() {
+ return _preHeaderPanelR;
+ }
+ function getHeaderRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), headerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? headerRowTarget = _headerRowL : (headerRowTarget = _headerRowR, idx -= options.frozenColumn + 1) : headerRowTarget = _headerRowL, headerRowTarget.children[idx];
+ }
+ function getFooterRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), footerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? footerRowTarget = _footerRowL : (footerRowTarget = _footerRowR, idx -= options.frozenColumn + 1) : footerRowTarget = _footerRowL, footerRowTarget.children[idx];
+ }
+ function createColumnFooter() {
+ if (options.createFooterRow) {
+ _footerRow.forEach(function(footer) {
+ footer.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ let columnDef = Utils.storage.get(column, "column");
+ trigger(self.onBeforeFooterRowCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _footerRowL.replaceChildren(), _footerRowR.replaceChildren();
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ var m = columns[i2];
+ if (!m || m.hidden)
+ continue;
+ let footerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, hasFrozenColumns() && i2 > options.frozenColumn ? _footerRowR : _footerRowL), className = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ className && footerRowCell.classList.add(className), Utils.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ }
+ function handleHeaderMouseHoverOn(e) {
+ e.target.classList.add("ui-state-hover", "slick-state-hover");
+ }
+ function handleHeaderMouseHoverOff(e) {
+ e.target.classList.remove("ui-state-hover", "slick-state-hover");
+ }
+ function createColumnHeaders() {
+ _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ var columnDef = Utils.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerL.replaceChildren(), _headerR.replaceChildren(), getHeadersWidth(), Utils.width(_headerL, headersWidthL), Utils.width(_headerR, headersWidthR), _headerRows.forEach(function(row) {
+ row.querySelectorAll(".slick-headerrow-column").forEach(function(column) {
+ let columnDef = Utils.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerRowL.replaceChildren(), _headerRowR.replaceChildren(), options.createFooterRow && (_footerRowL.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowL.replaceChildren(), hasFrozenColumns() && (_footerRowR.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowR.replaceChildren()));
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ let m = columns[i2], headerTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerL : _headerR : _headerL, headerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerRowL : _headerRowR : _headerRowL, header = Utils.createDomElement("div", { id: `${uid + m.id}`, dataset: { id: m.id }, className: "ui-state-default slick-state-default slick-header-column", title: m.toolTip || "" }, headerTarget);
+ Utils.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(m.name) }, header), Utils.width(header, m.width - headerColumnWidthDiff);
+ let classname = m.headerCssClass || null;
+ if (classname && header.classList.add(classname), classname = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null, classname && header.classList.add(classname), _bindingEventService.bind(header, "mouseenter", handleHeaderMouseEnter), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseLeave), Utils.storage.put(header, "column", m), (options.enableColumnReorder || m.sortable) && (_bindingEventService.bind(header, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseHoverOff)), m.hasOwnProperty("headerCellAttrs") && m.headerCellAttrs instanceof Object)
+ for (var key in m.headerCellAttrs)
+ m.headerCellAttrs.hasOwnProperty(key) && header.setAttribute(key, m.headerCellAttrs[key]);
+ if (m.sortable && (header.classList.add("slick-header-sortable"), Utils.createDomElement("div", { className: `slick-sort-indicator ${options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? " slick-sort-indicator-numbered" : ""}` }, header), options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan && Utils.createDomElement("div", { className: "slick-sort-indicator-numbered" }, header)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: m,
+ grid: self
+ }), options.showHeaderRow) {
+ let headerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-headerrow-column l${i2} r${i2}` }, headerRowTarget), classname2 = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ classname2 && headerRowCell.classList.add(classname2), _bindingEventService.bind(headerRowCell, "mouseenter", handleHeaderRowMouseEnter), _bindingEventService.bind(headerRowCell, "mouseleave", handleHeaderRowMouseLeave), Utils.storage.put(headerRowCell, "column", m), trigger(self.onHeaderRowCellRendered, {
+ node: headerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ if (options.createFooterRow && options.showFooterRow) {
+ let footerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _footerRow[0] : _footerRow[1] : _footerRow[0], footerRowCell = Utils.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, footerRowTarget);
+ Utils.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ setSortColumns(sortColumns), setupColumnResize(), options.enableColumnReorder && (typeof options.enableColumnReorder == "function" ? options.enableColumnReorder(self, _headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger) : setupColumnReorder());
+ }
+ function setupColumnSort() {
+ _headers.forEach(function(header) {
+ _bindingEventService.bind(header, "click", function(e) {
+ if (!columnResizeDragging && !e.target.classList.contains("slick-resizable-handle")) {
+ var coll = e.target.closest(".slick-header-column");
+ if (coll) {
+ var column = Utils.storage.get(coll, "column");
+ if (column.sortable) {
+ if (!getEditorLock().commitCurrentEdit())
+ return;
+ for (var previousSortColumns = sortColumns.slice(), sortColumn = null, i2 = 0; i2 < sortColumns.length; i2++)
+ if (sortColumns[i2].columnId == column.id) {
+ sortColumn = sortColumns[i2], sortColumn.sortAsc = !sortColumn.sortAsc;
+ break;
+ }
+ var hadSortCol = !!sortColumn;
+ options.tristateMultiColumnSort ? (sortColumn || (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }), hadSortCol && sortColumn.sortAsc && (sortColumns.splice(i2, 1), sortColumn = null), options.multiColumnSort || (sortColumns = []), sortColumn && (!hadSortCol || !options.multiColumnSort) && sortColumns.push(sortColumn)) : e.metaKey && options.multiColumnSort ? sortColumn && sortColumns.splice(i2, 1) : ((!e.shiftKey && !e.metaKey || !options.multiColumnSort) && (sortColumns = []), sortColumn ? sortColumns.length === 0 && sortColumns.push(sortColumn) : (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }, sortColumns.push(sortColumn)));
+ var onSortArgs;
+ options.multiColumnSort ? onSortArgs = {
+ multiColumnSort: !0,
+ previousSortColumns,
+ sortCols: sortColumns.map(function(col) {
+ return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc };
+ })
+ } : onSortArgs = {
+ multiColumnSort: !1,
+ previousSortColumns,
+ columnId: sortColumns.length > 0 ? column.id : null,
+ sortCol: sortColumns.length > 0 ? column : null,
+ sortAsc: sortColumns.length > 0 ? sortColumns[0].sortAsc : !0
+ }, trigger(self.onBeforeSort, onSortArgs, e).getReturnValue() !== !1 && (setSortColumns(sortColumns), trigger(self.onSort, onSortArgs, e));
+ }
+ }
+ }
+ });
+ });
+ }
+ function currentPositionInHeader(id) {
+ let currentPosition = 0;
+ return _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ column.id == id && (currentPosition = i);
+ });
+ }), currentPosition;
+ }
+ function remove(arr, elem) {
+ var index = arr.lastIndexOf(elem);
+ index > -1 && (arr.splice(index, 1), remove(arr, elem));
+ }
+ function setupColumnReorder() {
+ sortableSideLeftInstance && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy());
+ var columnScrollTimer = null;
+ function scrollColumnsRight() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft + 10;
+ }
+ function scrollColumnsLeft() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft - 10;
+ }
+ var canDragScroll, sortableOptions = {
+ animation: 50,
+ direction: "horizontal",
+ chosenClass: "slick-header-column-active",
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dragoverBubble: !1,
+ revertClone: !0,
+ scroll: !hasFrozenColumns(),
+ // enable auto-scroll
+ onStart: function(e) {
+ canDragScroll = !hasFrozenColumns() || Utils.offset(e.item).left > Utils.offset(_viewportScrollContainerX).left, canDragScroll && e.originalEvent.pageX > _container.clientWidth ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsRight, 100)) : canDragScroll && e.originalEvent.pageX < Utils.offset(_viewportScrollContainerX).left ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsLeft, 100)) : (clearInterval(columnScrollTimer), columnScrollTimer = null);
+ },
+ onEnd: function(e) {
+ var cancel = !1;
+ clearInterval(columnScrollTimer), columnScrollTimer = null;
+ var limit = null;
+ if (!(cancel || !getEditorLock().commitCurrentEdit())) {
+ var reorderedIds = sortableSideLeftInstance.toArray();
+ reorderedIds = reorderedIds.concat(sortableSideRightInstance.toArray());
+ for (var reorderedColumns = [], i2 = 0; i2 < reorderedIds.length; i2++)
+ reorderedColumns.push(columns[getColumnIndex(reorderedIds[i2])]);
+ setColumns(reorderedColumns), trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(limit) }), e.stopPropagation(), setupColumnResize();
+ }
+ }
+ };
+ sortableSideLeftInstance = Sortable.create(_headerL, sortableOptions), sortableSideRightInstance = Sortable.create(_headerR, sortableOptions);
+ }
+ function getHeaderChildren() {
+ let a = Array.from(_headers[0].children), b = Array.from(_headers[1].children);
+ return a.concat(b);
+ }
+ function getImpactedColumns(limit) {
+ var impactedColumns = [];
+ if (limit)
+ for (var i2 = limit.start; i2 <= limit.end; i2++)
+ impactedColumns.push(columns[i2]);
+ else
+ impactedColumns = columns;
+ return impactedColumns;
+ }
+ function handleResizeableHandleDoubleClick(evt) {
+ let triggeredByColumn = evt.target.parentElement.id.replace(uid, "");
+ trigger(self.onColumnsResizeDblClick, { triggeredByColumn });
+ }
+ function setupColumnResize() {
+ if (typeof Resizable == "undefined")
+ throw new Error('Slick.Resizable is undefined, make sure to import "slick.interactions.js"');
+ var j, k, c, pageX, minPageX, maxPageX, firstResizable, lastResizable, frozenLeftColMaxWidth = 0;
+ let children = getHeaderChildren();
+ for (let i2 = 0; i2 < children.length; i2++)
+ children[i2].querySelectorAll(".slick-resizable-handle").forEach(function(handle) {
+ handle.remove();
+ }), !(i2 >= columns.length || !columns[i2] || columns[i2].hidden) && columns[i2].resizable && (firstResizable === void 0 && (firstResizable = i2), lastResizable = i2);
+ if (firstResizable !== void 0)
+ for (let i2 = 0; i2 < children.length; i2++) {
+ let colElm = children[i2];
+ if (i2 >= columns.length || !columns[i2] || columns[i2].hidden || i2 < firstResizable || options.forceFitColumns && i2 >= lastResizable)
+ continue;
+ let resizeableHandle = Utils.createDomElement("div", { className: "slick-resizable-handle", role: "separator", ariaOrientation: "horizontal" }, colElm);
+ _bindingEventService.bind(resizeableHandle, "dblclick", handleResizeableHandleDoubleClick), slickResizableInstances.push(
+ Resizable({
+ resizeableElement: colElm,
+ resizeableHandleElement: resizeableHandle,
+ onResizeStart: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ if (!getEditorLock().commitCurrentEdit())
+ return !1;
+ pageX = targetEvent.pageX, frozenLeftColMaxWidth = 0, resizeElms.resizeableElement.classList.add("slick-header-column-active");
+ var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;
+ for (let pw = 0; pw < children.length; pw++)
+ pw >= columns.length || !columns[pw] || columns[pw].hidden || (columns[pw].previousWidth = children[pw].offsetWidth);
+ if (options.forceFitColumns)
+ for (shrinkLeewayOnRight = 0, stretchLeewayOnRight = 0, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnRight !== null && (c.maxWidth ? stretchLeewayOnRight += c.maxWidth - c.previousWidth : stretchLeewayOnRight = null), shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;
+ for (j = 0; j <= i2; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnLeft !== null && (c.maxWidth ? stretchLeewayOnLeft += c.maxWidth - c.previousWidth : stretchLeewayOnLeft = null), shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ shrinkLeewayOnRight === null && (shrinkLeewayOnRight = 1e5), shrinkLeewayOnLeft === null && (shrinkLeewayOnLeft = 1e5), stretchLeewayOnRight === null && (stretchLeewayOnRight = 1e5), stretchLeewayOnLeft === null && (stretchLeewayOnLeft = 1e5), maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft), minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);
+ },
+ onResize: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ columnResizeDragging = !0;
+ var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, targetEvent.pageX)) - pageX, x, newCanvasWidthL = 0, newCanvasWidthR = 0, viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ if (d < 0) {
+ for (x = d, j = i2; j >= 0; j--)
+ c = columns[j], c && c.resizable && !c.hidden && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0));
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0));
+ } else {
+ for (x = d, newCanvasWidthL = 0, newCanvasWidthR = 0, j = i2; j >= 0; j--)
+ if (c = columns[j], !(!c || c.hidden) && c.resizable)
+ if (x && c.maxWidth && c.maxWidth - c.previousWidth < x)
+ x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth;
+ else {
+ var newWidth = c.previousWidth + x, resizedCanvasWidthL = canvasWidthL + x;
+ hasFrozenColumns() && j <= options.frozenColumn ? (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < viewportWidth - options.frozenRightViewportMinWidth && (frozenLeftColMaxWidth = newWidth), c.width = resizedCanvasWidthL + options.frozenRightViewportMinWidth > viewportWidth ? frozenLeftColMaxWidth : newWidth) : c.width = newWidth, x = 0;
+ }
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ }
+ hasFrozenColumns() && newCanvasWidthL != canvasWidthL && (Utils.width(_headerL, newCanvasWidthL + 1e3), Utils.setStyleSize(_paneHeaderR, "left", newCanvasWidthL)), applyColumnHeaderWidths(), options.syncColumnCellResize && applyColumnWidths(), trigger(self.onColumnsDrag, {
+ triggeredByColumn: resizeElms.resizeableElement,
+ resizeHandle: resizeElms.resizeableHandleElement
+ });
+ },
+ onResizeEnd: function(e, resizeElms) {
+ resizeElms.resizeableElement.classList.remove("slick-header-column-active");
+ var triggeredByColumn = resizeElms.resizeableElement.id.replace(uid, "");
+ trigger(self.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === !0 && applyColumnHeaderWidths();
+ var newWidth;
+ for (j = 0; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (newWidth = children[j].offsetWidth, c.previousWidth !== newWidth && c.rerenderOnResize && invalidateAllRows());
+ updateCanvasWidth(!0), render(), trigger(self.onColumnsResized, { triggeredByColumn }), setTimeout(function() {
+ columnResizeDragging = !1;
+ }, 300);
+ }
+ })
+ );
+ }
+ }
+ function getVBoxDelta(el) {
+ var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], styles = getComputedStyle(el), delta = 0;
+ return p.forEach(function(val) {
+ delta += Utils.toFloat(styles[val]);
+ }), delta;
+ }
+ function setFrozenOptions() {
+ if (options.frozenColumn = options.frozenColumn >= 0 && options.frozenColumn < columns.length ? parseInt(options.frozenColumn) : -1, options.frozenRow > -1) {
+ hasFrozenRows = !0, frozenRowsHeight = options.frozenRow * options.rowHeight;
+ var dataLength = getDataLength();
+ actualFrozenRow = options.frozenBottom ? dataLength - options.frozenRow : options.frozenRow;
+ } else
+ hasFrozenRows = !1;
+ }
+ function setPaneVisibility() {
+ hasFrozenColumns() ? (show(_paneHeaderR), show(_paneTopR), hasFrozenRows ? (show(_paneBottomL), show(_paneBottomR)) : (hide(_paneBottomR), hide(_paneBottomL))) : (hide(_paneHeaderR), hide(_paneTopR), hide(_paneBottomR), hasFrozenRows ? show(_paneBottomL) : (hide(_paneBottomR), hide(_paneBottomL)));
+ }
+ function setOverflow() {
+ _viewportTopL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportTopR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), hasFrozenRows ? "scroll" : "auto"), _viewportBottomL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportBottomR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), "auto"), options.viewportClass && (_viewportTopL.classList.add(options.viewportClass), _viewportTopR.classList.add(options.viewportClass), _viewportBottomL.classList.add(options.viewportClass), _viewportBottomR.classList.add(options.viewportClass));
+ }
+ function setScroller() {
+ hasFrozenColumns() ? (_headerScrollContainer = _headerScrollerR, _headerRowScrollContainer = _headerRowScrollerR, _footerRowScrollContainer = _footerRowScrollerR, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomR, _viewportScrollContainerY = _viewportTopR) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomR : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopR) : (_headerScrollContainer = _headerScrollerL, _headerRowScrollContainer = _headerRowScrollerL, _footerRowScrollContainer = _footerRowScrollerL, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomL, _viewportScrollContainerY = _viewportTopL) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomL : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopL);
+ }
+ function measureCellPaddingAndBorder() {
+ let h2 = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], header = _headers[0];
+ headerColumnWidthDiff = headerColumnHeightDiff = 0, cellWidthDiff = cellHeightDiff = 0;
+ let el = Utils.createDomElement("div", { className: "ui-state-default slick-state-default slick-header-column", style: { visibility: "hidden" }, textContent: "-" }, header), style = getComputedStyle(el);
+ style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ headerColumnWidthDiff += Utils.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ headerColumnHeightDiff += Utils.toFloat(style[val]);
+ })), el.remove();
+ let r = Utils.createDomElement("div", { className: "slick-row" }, _canvas[0]);
+ el = Utils.createDomElement("div", { className: "slick-cell", id: "", style: { visibility: "hidden", textContent: "-" } }, r), style = getComputedStyle(el), style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ cellWidthDiff += Utils.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ cellHeightDiff += Utils.toFloat(style[val]);
+ })), r.remove(), absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
+ }
+ function createCssRules() {
+ _style = Utils.createDomElement("template", { innerHTML: '' }).content.firstChild, document.head.appendChild(_style);
+ for (var rowHeight = options.rowHeight - cellHeightDiff, rules = [
+ "." + uid + " .slick-group-header-column { left: 1000px; }",
+ "." + uid + " .slick-header-column { left: 1000px; }",
+ "." + uid + " .slick-top-panel { height:" + options.topPanelHeight + "px; }",
+ "." + uid + " .slick-preheader-panel { height:" + options.preHeaderPanelHeight + "px; }",
+ "." + uid + " .slick-headerrow-columns { height:" + options.headerRowHeight + "px; }",
+ "." + uid + " .slick-footerrow-columns { height:" + options.footerRowHeight + "px; }",
+ "." + uid + " .slick-cell { height:" + rowHeight + "px; }",
+ "." + uid + " .slick-row { height:" + options.rowHeight + "px; }"
+ ], i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (rules.push("." + uid + " .l" + i2 + " { }"), rules.push("." + uid + " .r" + i2 + " { }"));
+ _style.styleSheet ? _style.styleSheet.cssText = rules.join(" ") : _style.appendChild(document.createTextNode(rules.join(" ")));
+ }
+ function getColumnCssRules(idx) {
+ var i2;
+ if (!stylesheet) {
+ var sheets = document.styleSheets;
+ for (i2 = 0; i2 < sheets.length; i2++)
+ if ((sheets[i2].ownerNode || sheets[i2].owningElement) == _style) {
+ stylesheet = sheets[i2];
+ break;
+ }
+ if (!stylesheet)
+ throw new Error("SlickGrid Cannot find stylesheet.");
+ columnCssRulesL = [], columnCssRulesR = [];
+ var cssRules = stylesheet.cssRules || stylesheet.rules, matches, columnIdx;
+ for (i2 = 0; i2 < cssRules.length; i2++) {
+ var selector = cssRules[i2].selectorText;
+ (matches = /\.l\d+/.exec(selector)) ? (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesL[columnIdx] = cssRules[i2]) : (matches = /\.r\d+/.exec(selector)) && (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesR[columnIdx] = cssRules[i2]);
+ }
+ }
+ return {
+ left: columnCssRulesL[idx],
+ right: columnCssRulesR[idx]
+ };
+ }
+ function removeCssRules() {
+ _style.remove(), stylesheet = null;
+ }
+ function destroy(shouldDestroyAllElements) {
+ _bindingEventService.unbindAll(), slickDraggableInstance = destroyAllInstances(slickDraggableInstance), slickMouseWheelInstances = destroyAllInstances(slickMouseWheelInstances), slickResizableInstances = destroyAllInstances(slickResizableInstances), getEditorLock().cancelCurrentEdit(), trigger(self.onBeforeDestroy, {});
+ for (var i2 = plugins.length; i2--; )
+ unregisterPlugin(plugins[i2]);
+ options.enableColumnReorder && sortableSideLeftInstance && typeof sortableSideLeftInstance.destroy == "function" && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy()), unbindAncestorScrollEvents(), _bindingEventService.unbindByEventName(_container, "resize.slickgrid", resizeCanvas), removeCssRules(), _canvas.forEach(function(element) {
+ _bindingEventService.unbindByEventName(element, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(element, "click", handleClick), _bindingEventService.unbindByEventName(element, "dblclick", handleDblClick), _bindingEventService.unbindByEventName(element, "contextmenu", handleContextMenu), _bindingEventService.unbindByEventName(element, "mouseover", handleCellMouseOver), _bindingEventService.unbindByEventName(element, "mouseout", handleCellMouseOut);
+ }), _viewport.forEach(function(view) {
+ _bindingEventService.unbindByEventName(view, "scroll", handleScroll);
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.unbindByEventName(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.unbindByEventName(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleHeaderRowScroll);
+ }), _footerRow && _footerRow.forEach(function(footer) {
+ _bindingEventService.unbindByEventName(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.unbindByEventName(footer, "click", handleFooterClick);
+ }), _footerRowScroller && _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleFooterRowScroll);
+ }), _preHeaderPanelScroller && _bindingEventService.unbindByEventName(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.unbindByEventName(_focusSink, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(_focusSink2, "keydown", handleKeyDown);
+ let resizeHandles = _container.querySelectorAll(".slick-resizable-handle");
+ [].forEach.call(resizeHandles, function(handle) {
+ _bindingEventService.unbindByEventName(handle, "dblclick", handleResizeableHandleDoubleClick);
+ });
+ let headerColumns = _container.querySelectorAll(".slick-header-column");
+ [].forEach.call(headerColumns, function(column) {
+ _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseEnter), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseLeave), _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseHoverOff);
+ }), _container.replaceChildren(), _container.classList.remove(uid), shouldDestroyAllElements && destroyAllElements();
+ }
+ function destroyAllInstances(inputInstances) {
+ if (inputInstances) {
+ let instances = Array.isArray(inputInstances) ? inputInstances : [inputInstances], instance;
+ for (; (instance = instances.pop()) != null; )
+ instance && typeof instance.destroy == "function" && instance.destroy();
+ }
+ return inputInstances = Array.isArray(inputInstances) ? [] : null, inputInstances;
+ }
+ function destroyAllElements() {
+ _activeCanvasNode = null, _activeViewportNode = null, _boundAncestors = null, _canvas = null, _canvasTopL = null, _canvasTopR = null, _canvasBottomL = null, _canvasBottomR = null, _container = null, _focusSink = null, _focusSink2 = null, _groupHeaders = null, _groupHeadersL = null, _groupHeadersR = null, _headerL = null, _headerR = null, _headers = null, _headerRows = null, _headerRowL = null, _headerRowR = null, _headerRowSpacerL = null, _headerRowSpacerR = null, _headerRowScrollContainer = null, _headerRowScroller = null, _headerRowScrollerL = null, _headerRowScrollerR = null, _headerScrollContainer = null, _headerScroller = null, _headerScrollerL = null, _headerScrollerR = null, _hiddenParents = null, _footerRow = null, _footerRowL = null, _footerRowR = null, _footerRowSpacerL = null, _footerRowSpacerR = null, _footerRowScroller = null, _footerRowScrollerL = null, _footerRowScrollerR = null, _footerRowScrollContainer = null, _preHeaderPanel = null, _preHeaderPanelR = null, _preHeaderPanelScroller = null, _preHeaderPanelScrollerR = null, _preHeaderPanelSpacer = null, _preHeaderPanelSpacerR = null, _topPanels = null, _topPanelScrollers = null, _style = null, _topPanelScrollerL = null, _topPanelScrollerR = null, _topPanelL = null, _topPanelR = null, _paneHeaderL = null, _paneHeaderR = null, _paneTopL = null, _paneTopR = null, _paneBottomL = null, _paneBottomR = null, _viewport = null, _viewportTopL = null, _viewportTopR = null, _viewportBottomL = null, _viewportBottomR = null, _viewportScrollContainerX = null, _viewportScrollContainerY = null;
+ }
+ var canvas = null, canvas_context = null;
+ function autosizeColumn(columnOrIndexOrId, isInit) {
+ var colDef = null, colIndex = -1;
+ if (typeof columnOrIndexOrId == "number")
+ colDef = columns[columnOrIndexOrId], colIndex = columnOrIndexOrId;
+ else if (typeof columnOrIndexOrId == "string")
+ for (i = 0; i < columns.length; i++)
+ columns[i].Id === columnOrIndexOrId && (colDef = columns[i], colIndex = i);
+ if (!colDef)
+ return;
+ let gridCanvas = getCanvasNode(0, 0);
+ getColAutosizeWidth(colDef, colIndex, gridCanvas, isInit, colIndex);
+ }
+ function treatAsLocked(autoSize) {
+ return !autoSize.ignoreHeaderText && !autoSize.sizeToRemaining && autoSize.contentSizePx === autoSize.headerWidthPx && autoSize.widthPx < 100;
+ }
+ function autosizeColumns(autosizeMode, isInit) {
+ var cssCache = { hiddenParents: null, oldPropArr: [] };
+ cacheCssForHiddenInit(cssCache), internalAutosizeColumns(autosizeMode, isInit), restoreCssFromHiddenInit(cssCache);
+ }
+ function internalAutosizeColumns(autosizeMode, isInit) {
+ if (autosizeMode = autosizeMode || options.autosizeColsMode, autosizeMode === GridAutosizeColsMode.LegacyForceFit || autosizeMode === GridAutosizeColsMode.LegacyOff) {
+ legacyAutosizeColumns();
+ return;
+ }
+ if (autosizeMode !== GridAutosizeColsMode.None) {
+ canvas = document.createElement("canvas"), canvas && canvas.getContext && (canvas_context = canvas.getContext("2d"));
+ var gridCanvas = getCanvasNode(0, 0), viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2, c, colWidth, reRender, totalWidth = 0, totalWidthLessSTR = 0, strColsMinWidth = 0, totalMinWidth = 0, totalLockedColWidth = 0;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], getColAutosizeWidth(c, i2, gridCanvas, isInit, i2), totalLockedColWidth += c.autoSize.autosizeMode === ColAutosizeMode.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : 0, totalMinWidth += c.autoSize.autosizeMode === ColAutosizeMode.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : c.minWidth, totalWidth += c.autoSize.widthPx, totalWidthLessSTR += c.autoSize.sizeToRemaining ? 0 : c.autoSize.widthPx, strColsMinWidth += c.autoSize.sizeToRemaining && c.minWidth || 0;
+ var strColTotalGuideWidth = totalWidth - totalWidthLessSTR;
+ if (autosizeMode === GridAutosizeColsMode.FitViewportToCols) {
+ var setWidth = totalWidth + scrollbarDimensions.width;
+ autosizeMode = GridAutosizeColsMode.IgnoreViewport, options.viewportMaxWidthPx && setWidth > options.viewportMaxWidthPx ? (setWidth = options.viewportMaxWidthPx, autosizeMode = GridAutosizeColsMode.FitColsToViewport) : options.viewportMinWidthPx && setWidth < options.viewportMinWidthPx && (setWidth = options.viewportMinWidthPx, autosizeMode = GridAutosizeColsMode.FitColsToViewport), Utils.width(_container, setWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode.FitColsToViewport)
+ if (strColTotalGuideWidth > 0 && totalWidthLessSTR < viewportWidth - strColsMinWidth) {
+ for (i2 = 0; i2 < columns.length; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var totalSTRViewportWidth = viewportWidth - totalWidthLessSTR;
+ c.autoSize.sizeToRemaining ? colWidth = totalSTRViewportWidth * c.autoSize.widthPx / strColTotalGuideWidth : colWidth = c.autoSize.widthPx, c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth;
+ }
+ } else if (options.viewportSwitchToScrollModeWidthPercent && totalWidthLessSTR + strColsMinWidth > viewportWidth * options.viewportSwitchToScrollModeWidthPercent / 100 || totalMinWidth > viewportWidth)
+ autosizeMode = GridAutosizeColsMode.IgnoreViewport;
+ else {
+ var unallocatedColWidth = totalWidthLessSTR - totalLockedColWidth, unallocatedViewportWidth = viewportWidth - totalLockedColWidth - strColsMinWidth;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (colWidth = c.width, c.autoSize.autosizeMode !== ColAutosizeMode.Locked && !treatAsLocked(c.autoSize) && (c.autoSize.sizeToRemaining ? colWidth = c.minWidth : (colWidth = unallocatedViewportWidth / unallocatedColWidth * c.autoSize.widthPx - 1, colWidth < c.minWidth && (colWidth = c.minWidth), unallocatedColWidth -= c.autoSize.widthPx, unallocatedViewportWidth -= colWidth)), treatAsLocked(c.autoSize) && (colWidth = c.autoSize.widthPx, colWidth < c.minWidth && (colWidth = c.minWidth)), c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode.IgnoreViewport)
+ for (i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (colWidth = columns[i2].autoSize.widthPx, columns[i2].rerenderOnResize && columns[i2].width != colWidth && (reRender = !0), columns[i2].width = colWidth);
+ reRenderColumns(reRender);
+ }
+ }
+ function LogColWidths() {
+ for (var s = "Col Widths:", i2 = 0; i2 < columns.length; i2++)
+ s += " " + (columns[i2].hidden ? "H" : columns[i2].width);
+ console.log(s);
+ }
+ function getColAutosizeWidth(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize;
+ if (autoSize.widthPx = columnDef.width, autoSize.autosizeMode === ColAutosizeMode.Locked || autoSize.autosizeMode === ColAutosizeMode.Guide)
+ return;
+ var dl = getDataLength();
+ let isoDateRegExp = new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z/);
+ if (autoSize.autosizeMode === ColAutosizeMode.ContentIntelligent) {
+ var colDataTypeOf = autoSize.colDataTypeOf, colDataItem;
+ if (dl > 0) {
+ var tempRow = getDataItem(0);
+ tempRow && (colDataItem = tempRow[columnDef.field], isoDateRegExp.test(colDataItem) && (colDataItem = Date.parse(colDataItem)), colDataTypeOf = typeof colDataItem, colDataTypeOf === "object" && (colDataItem instanceof Date && (colDataTypeOf = "date"), typeof moment != "undefined" && colDataItem instanceof moment && (colDataTypeOf = "moment")));
+ }
+ colDataTypeOf === "boolean" && (autoSize.colValueArray = [!0, !1]), colDataTypeOf === "number" && (autoSize.valueFilterMode = ValueFilterMode.GetGreatestAndSub, autoSize.rowSelectionMode = RowSelectionMode.AllRows), colDataTypeOf === "string" && (autoSize.valueFilterMode = ValueFilterMode.GetLongestText, autoSize.rowSelectionMode = RowSelectionMode.AllRows, autoSize.allowAddlPercent = 5), colDataTypeOf === "date" && (autoSize.colValueArray = [new Date(2009, 8, 30, 12, 20, 20)]), colDataTypeOf === "moment" && typeof moment != "undefined" && (autoSize.colValueArray = [moment([2009, 8, 30, 12, 20, 20])]);
+ }
+ var colWidth = autoSize.contentSizePx = getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex);
+ colWidth === 0 && (colWidth = autoSize.widthPx);
+ var addlPercentMultiplier = autoSize.allowAddlPercent ? 1 + autoSize.allowAddlPercent / 100 : 1;
+ colWidth = colWidth * addlPercentMultiplier + options.autosizeColPaddingPx, columnDef.minWidth && colWidth < columnDef.minWidth && (colWidth = columnDef.minWidth), columnDef.maxWidth && colWidth > columnDef.maxWidth && (colWidth = columnDef.maxWidth), (autoSize.autosizeMode === ColAutosizeMode.ContentExpandOnly || columnDef.editor && columnDef.editor.ControlFillsColumn) && colWidth < columnDef.width && (colWidth = columnDef.width), autoSize.widthPx = colWidth;
+ }
+ function getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize, widthAdjustRatio = 1, i2, ii, tempVal, maxLen = 0, maxColWidth = 0;
+ if (autoSize.headerWidthPx = 0, autoSize.ignoreHeaderText || (autoSize.headerWidthPx = getColHeaderWidth(columnDef)), autoSize.headerWidthPx === 0 && (autoSize.headerWidthPx = columnDef.width ? columnDef.width : columnDef.maxWidth ? columnDef.maxWidth : columnDef.minWidth ? columnDef.minWidth : 20), autoSize.colValueArray)
+ return maxColWidth = getColWidth(columnDef, gridCanvas, autoSize.colValueArray), Math.max(autoSize.headerWidthPx, maxColWidth);
+ var rowInfo = {};
+ rowInfo.colIndex = colIndex, rowInfo.rowCount = getDataLength(), rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.rowCount - 1, rowInfo.valueArr = null, rowInfo.getRowVal = function(i3) {
+ return getDataItem(i3)[columnDef.field];
+ };
+ var rowSelectionMode = (isInit ? autoSize.rowSelectionModeOnInit : void 0) || autoSize.rowSelectionMode;
+ if (rowSelectionMode === RowSelectionMode.FirstRow && (rowInfo.endIndex = 0), rowSelectionMode === RowSelectionMode.LastRow && (rowInfo.endIndex = rowInfo.startIndex = rowInfo.rowCount - 1), rowSelectionMode === RowSelectionMode.FirstNRows && (rowInfo.endIndex = Math.min(autoSize.rowSelectionCount, rowInfo.rowCount) - 1), autoSize.valueFilterMode === ValueFilterMode.DeDuplicate) {
+ var rowsDict = {};
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ rowsDict[rowInfo.getRowVal(i2)] = !0;
+ if (Object.keys)
+ rowInfo.valueArr = Object.keys(rowsDict);
+ else {
+ rowInfo.valueArr = [];
+ for (var v in rowsDict)
+ rowInfo.valueArr.push(v);
+ }
+ rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.length - 1;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode.GetGreatestAndSub) {
+ var maxVal, maxAbsVal = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), Math.abs(tempVal) > maxAbsVal && (maxVal = tempVal, maxAbsVal = Math.abs(tempVal));
+ maxVal = "" + maxVal, maxVal = Array(maxVal.length + 1).join("9"), maxVal = +maxVal, rowInfo.valueArr = [maxVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode.GetLongestTextAndSub) {
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length);
+ tempVal = Array(maxLen + 1).join("m"), widthAdjustRatio = options.autosizeTextAvgToMWidthRatio, rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode.GetLongestText) {
+ maxLen = 0;
+ var maxIndex = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length, maxIndex = i2);
+ tempVal = rowInfo.getRowVal(maxIndex), rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ return rowInfo.maxLen && rowInfo.maxLen > 30 && colArrayIndex > 1 && (autoSize.sizeToRemaining = !0), maxColWidth = getColWidth(columnDef, gridCanvas, rowInfo) * widthAdjustRatio, Math.max(autoSize.headerWidthPx, maxColWidth);
+ }
+ function getColWidth(columnDef, gridCanvas, rowInfo) {
+ let rowEl = Utils.createDomElement("div", { className: "slick-row ui-widget-content" }, gridCanvas), cellEl = Utils.createDomElement("div", { className: "slick-cell" }, rowEl);
+ cellEl.style.position = "absolute", cellEl.style.visibility = "hidden", cellEl.style["text-overflow"] = "initial", cellEl.style["white-space"] = "nowrap";
+ var i2, len, max = 0, text, maxText, formatterResult, maxWidth = 0, val, useCanvas = columnDef.autoSize.widthEvalMode === WidthEvalMode.TextOnly;
+ if (columnDef.autoSize.widthEvalMode === WidthEvalMode.Auto) {
+ var noFormatter = !columnDef.formatterOverride && !columnDef.formatter, formatterIsText = columnDef.formatterOverride && columnDef.formatterOverride.ReturnsTextOnly || !columnDef.formatterOverride && columnDef.formatter && columnDef.formatter.ReturnsTextOnly;
+ useCanvas = noFormatter || formatterIsText;
+ }
+ if (canvas_context && useCanvas) {
+ let style = getComputedStyle(cellEl);
+ for (canvas_context.font = style["font-size"] + " " + style["font-family"], i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, len = formatterResult ? canvas_context.measureText(formatterResult).width : 0, len > max && (max = len, maxText = formatterResult);
+ return cellEl.innerHTML = maxText, len = cellEl.offsetWidth, rowEl.remove(), len;
+ }
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, applyFormatResultToCellNode(formatterResult, cellEl), len = cellEl.offsetWidth, len > max && (max = len);
+ return rowEl.remove(), max;
+ }
+ function getColHeaderWidth(columnDef) {
+ var width = 0, headerColElId = getUID() + columnDef.id, headerColEl = document.getElementById(headerColElId), dummyHeaderColElId = headerColElId + "_";
+ if (headerColEl) {
+ var clone = headerColEl.cloneNode(!0);
+ clone.id = dummyHeaderColElId, clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.parentNode.insertBefore(clone, headerColEl), width = clone.offsetWidth, clone.parentNode.removeChild(clone);
+ } else {
+ let header = getHeader(columnDef);
+ headerColEl = Utils.createDomElement("div", { id: dummyHeaderColElId, className: "ui-state-default slick-state-default slick-header-column" }, header), Utils.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(columnDef.name) }, headerColEl), clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.classList.add(columnDef.headerCssClass || ""), width = headerColEl.offsetWidth, header.removeChild(headerColEl);
+ }
+ return width;
+ }
+ function legacyAutosizeColumns() {
+ var i2, c, widths = [], shrinkLeeway = 0, total = 0, prevTotal, availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (widths.push(c.width), total += c.width, c.resizable && (shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth)));
+ for (prevTotal = total; total > availWidth && shrinkLeeway; ) {
+ var shrinkProportion = (total - availWidth) / shrinkLeeway;
+ for (i2 = 0; i2 < columns.length && total > availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var width = widths[i2];
+ if (!(!c.resizable || width <= c.minWidth || width <= absoluteColumnMinWidth)) {
+ var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth), shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;
+ shrinkSize = Math.min(shrinkSize, width - absMinWidth), total -= shrinkSize, shrinkLeeway -= shrinkSize, widths[i2] -= shrinkSize;
+ }
+ }
+ if (prevTotal <= total)
+ break;
+ prevTotal = total;
+ }
+ for (prevTotal = total; total < availWidth; ) {
+ var growProportion = availWidth / total;
+ for (i2 = 0; i2 < columns.length && total < availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var currentWidth = widths[i2], growSize;
+ !c.resizable || c.maxWidth <= currentWidth ? growSize = 0 : growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, c.maxWidth - currentWidth || 1e6) || 1, total += growSize, widths[i2] += total <= availWidth ? growSize : 0;
+ }
+ if (prevTotal >= total)
+ break;
+ prevTotal = total;
+ }
+ var reRender = !1;
+ for (i2 = 0; i2 < columns.length; i2++)
+ !c || c.hidden || (columns[i2].rerenderOnResize && columns[i2].width != widths[i2] && (reRender = !0), columns[i2].width = widths[i2]);
+ reRenderColumns(reRender);
+ }
+ function reRenderColumns(reRender) {
+ applyColumnHeaderWidths(), updateCanvasWidth(!0), trigger(self.onAutosizeColumns, { columns }), reRender && (invalidateAllRows(), render());
+ }
+ function getVisibleColumns() {
+ return columns.filter((c) => !c.hidden);
+ }
+ function trigger(evt, args, e) {
+ return e = e || new EventData(e, args), args = args || {}, args.grid = self, evt.notify(args, e, self);
+ }
+ function getEditorLock() {
+ return options.editorLock;
+ }
+ function getEditController() {
+ return editController;
+ }
+ function getColumnIndex(id) {
+ return columnsById[id];
+ }
+ function applyColumnHeaderWidths() {
+ if (!initialized)
+ return;
+ let columnIndex = 0, vc = getVisibleColumns();
+ _headers.forEach(function(header) {
+ for (let i2 = 0; i2 < header.children.length; i2++, columnIndex++) {
+ let h2 = header.children[i2], width = ((vc[columnIndex] || {}).width || 0) - headerColumnWidthDiff;
+ Utils.width(h2) !== width && Utils.width(h2, width);
+ }
+ }), updateColumnCaches();
+ }
+ function applyColumnWidths() {
+ for (var x = 0, w, rule, i2 = 0; i2 < columns.length; i2++)
+ columns[i2] && columns[i2].hidden || (w = columns[i2].width, rule = getColumnCssRules(i2), rule.left.style.left = x + "px", rule.right.style.right = (options.frozenColumn != -1 && i2 > options.frozenColumn ? canvasWidthR : canvasWidthL) - x - w + "px", options.frozenColumn != i2 && (x += columns[i2].width)), options.frozenColumn == i2 && (x = 0);
+ }
+ function setSortColumn(columnId, ascending) {
+ setSortColumns([{ columnId, sortAsc: ascending }]);
+ }
+ function getColumnByIndex(id) {
+ let result = null;
+ return _headers.every(function(header) {
+ let length = header.children.length;
+ return id < length ? (result = header.children[id], !1) : (id -= length, !0);
+ }), result;
+ }
+ function setSortColumns(cols) {
+ sortColumns = cols;
+ let numberCols = options.numberedMultiColumnSort && sortColumns.length > 1;
+ _headers.forEach(function(header) {
+ let indicators = header.querySelectorAll(".slick-header-column-sorted");
+ indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-header-column-sorted");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator"), indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-sort-indicator-asc"), indicator.classList.remove("slick-sort-indicator-desc");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator-numbered"), indicators.forEach(function(el) {
+ el.textContent = "";
+ });
+ });
+ let i2 = 1;
+ sortColumns.forEach(function(col) {
+ col.sortAsc == null && (col.sortAsc = !0);
+ let columnIndex = getColumnIndex(col.columnId);
+ if (columnIndex != null) {
+ let column = getColumnByIndex(columnIndex);
+ if (column) {
+ column.classList.add("slick-header-column-sorted");
+ let indicator = column.querySelector(".slick-sort-indicator");
+ indicator.classList.add(col.sortAsc ? "slick-sort-indicator-asc" : "slick-sort-indicator-desc"), numberCols && (indicator = column.querySelector(".slick-sort-indicator-numbered"), indicator.textContent = i2);
+ }
+ }
+ i2++;
+ });
+ }
+ function getSortColumns() {
+ return sortColumns;
+ }
+ function handleSelectedRangesChanged(e, ranges) {
+ let ne = e.getNativeEvent();
+ var previousSelectedRows = selectedRows.slice(0);
+ selectedRows = [];
+ for (var hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] || (selectedRows.push(j), hash[j] = {});
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell; k++)
+ canCellBeSelected(j, k) && (hash[j][columns[k].id] = options.selectedCellCssClass);
+ }
+ if (setCellCssStyles(options.selectedCellCssClass, hash), simpleArrayEquals(previousSelectedRows, selectedRows)) {
+ var caller = ne && ne.detail && ne.detail.caller || "click", newSelectedAdditions = getSelectedRows().filter(function(i3) {
+ return previousSelectedRows.indexOf(i3) < 0;
+ }), newSelectedDeletions = previousSelectedRows.filter(function(i3) {
+ return getSelectedRows().indexOf(i3) < 0;
+ });
+ trigger(self.onSelectedRowsChanged, {
+ rows: getSelectedRows(),
+ previousSelectedRows,
+ caller,
+ changedSelectedRows: newSelectedAdditions,
+ changedUnselectedRows: newSelectedDeletions
+ }, e);
+ }
+ }
+ function simpleArrayEquals(arr1, arr2) {
+ return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();
+ }
+ function getColumns() {
+ return columns;
+ }
+ function updateColumnCaches() {
+ columnPosLeft = [], columnPosRight = [];
+ for (var x = 0, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ !columns[i2] || columns[i2].hidden || (columnPosLeft[i2] = x, columnPosRight[i2] = x + columns[i2].width, options.frozenColumn == i2 ? x = 0 : x += columns[i2].width);
+ }
+ function updateColumnProps() {
+ columnsById = {};
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ columns[i2].width && (columns[i2].widthRequest = columns[i2].width);
+ var m = columns[i2] = Utils.extend({}, columnDefaults, columns[i2]);
+ m.autoSize = Utils.extend({}, columnAutosizeDefaults, m.autoSize), columnsById[m.id] = i2, m.minWidth && m.width < m.minWidth && (m.width = m.minWidth), m.maxWidth && m.width > m.maxWidth && (m.width = m.maxWidth);
+ }
+ }
+ function setColumns(columnDefinitions) {
+ trigger(self.onBeforeSetColumns, { previousColumns: columns, newColumns: columnDefinitions, grid: self }), columns = columnDefinitions, columns = columnDefinitions, updateColumnsInternal();
+ }
+ function updateColumns() {
+ trigger(self.onBeforeUpdateColumns, { columns, grid: self }), updateColumnsInternal();
+ }
+ function updateColumnsInternal() {
+ updateColumnProps(), updateColumnCaches(), initialized && (setPaneVisibility(), setOverflow(), invalidateAllRows(), createColumnHeaders(), createColumnFooter(), removeCssRules(), createCssRules(), resizeCanvas(), updateCanvasWidth(), applyColumnHeaderWidths(), applyColumnWidths(), handleScroll(), getSelectionModel() && getSelectionModel().refreshSelections && getSelectionModel().refreshSelections());
+ }
+ function getOptions() {
+ return options;
+ }
+ function setOptions(args, suppressRender, suppressColumnSet, suppressSetOverflow) {
+ if (getEditorLock().commitCurrentEdit()) {
+ makeActiveCellNormal(), args.showColumnHeader !== void 0 && setColumnHeaderVisibility(args.showColumnHeader), options.enableAddRow !== args.enableAddRow && invalidateRow(getDataLength());
+ var originalOptions = Utils.extend(!0, {}, options);
+ options = Utils.extend(options, args), trigger(self.onSetOptions, { optionsBefore: originalOptions, optionsAfter: options }), validateAndEnforceOptions(), setFrozenOptions(), args.frozenBottom !== void 0 && (enforceFrozenRowHeightRecalc = !0), _viewport.forEach(function(view) {
+ view.style["overflow-y"] = options.autoHeight ? "hidden" : "auto";
+ }), suppressRender || render(), setScroller(), suppressSetOverflow || setOverflow(), suppressColumnSet || setColumns(columns), options.enableMouseWheelScrollHandler && _viewport && (!slickMouseWheelInstances || slickMouseWheelInstances.length === 0) ? _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }) : options.enableMouseWheelScrollHandler === !1 && destroyAllInstances(slickMouseWheelInstances);
+ }
+ }
+ function validateAndEnforceOptions() {
+ options.autoHeight && (options.leaveSpaceForNewRows = !1), options.forceFitColumns && (options.autosizeColsMode = GridAutosizeColsMode.LegacyForceFit, console.log("forceFitColumns option is deprecated - use autosizeColsMode"));
+ }
+ function setData(newData, scrollToTop) {
+ data = newData, invalidateAllRows(), updateRowCount(), scrollToTop && scrollTo(0);
+ }
+ function getData() {
+ return data;
+ }
+ function getDataLength() {
+ return data.getLength ? data.getLength() : data && data.length || 0;
+ }
+ function getDataLengthIncludingAddNew() {
+ return getDataLength() + (options.enableAddRow && (!pagingActive || pagingIsLastPage) ? 1 : 0);
+ }
+ function getDataItem(i2) {
+ return data.getItem ? data.getItem(i2) : data[i2];
+ }
+ function getTopPanel() {
+ return _topPanels[0];
+ }
+ function getTopPanels() {
+ return _topPanels;
+ }
+ function togglePanelVisibility(option, container2, visible, animate) {
+ var animated = animate !== !1;
+ if (options[option] != visible)
+ if (options[option] = visible, visible) {
+ if (animated) {
+ Utils.slideDown(container2, resizeCanvas);
+ return;
+ }
+ show(container2), resizeCanvas();
+ } else {
+ if (animated) {
+ Utils.slideUp(container2, resizeCanvas);
+ return;
+ }
+ hide(container2), resizeCanvas();
+ }
+ }
+ function setTopPanelVisibility(visible, animate) {
+ togglePanelVisibility("showTopPanel", _topPanelScrollers, visible, animate);
+ }
+ function setHeaderRowVisibility(visible, animate) {
+ togglePanelVisibility("showHeaderRow", _headerRowScroller, visible, animate);
+ }
+ function setColumnHeaderVisibility(visible, animate) {
+ togglePanelVisibility("showColumnHeader", _headerScroller, visible, animate);
+ }
+ function setFooterRowVisibility(visible, animate) {
+ togglePanelVisibility("showFooterRow", _footerRowScroller, visible, animate);
+ }
+ function setPreHeaderPanelVisibility(visible, animate) {
+ togglePanelVisibility("showPreHeaderPanel", [_preHeaderPanelScroller, _preHeaderPanelScrollerR], visible, animate);
+ }
+ function getContainerNode() {
+ return _container;
+ }
+ function getRowTop(row) {
+ return options.rowHeight * row - offset;
+ }
+ function getRowFromPosition(y) {
+ return Math.floor((y + offset) / options.rowHeight);
+ }
+ function scrollTo(y) {
+ y = Math.max(y, 0), y = Math.min(y, th - Utils.height(_viewportScrollContainerY) + (viewportHasHScroll || hasFrozenColumns() ? scrollbarDimensions.height : 0));
+ var oldOffset = offset;
+ page = Math.min(n - 1, Math.floor(y / ph)), offset = Math.round(page * cj);
+ var newScrollTop = y - offset;
+ if (offset != oldOffset) {
+ var range = getVisibleRange(newScrollTop);
+ cleanupRows(range), updateRowPositions();
+ }
+ prevScrollTop != newScrollTop && (vScrollDir = prevScrollTop + oldOffset < newScrollTop + offset ? 1 : -1, lastRenderedScrollTop = scrollTop = prevScrollTop = newScrollTop, hasFrozenColumns() && (_viewportTopL.scrollTop = newScrollTop), hasFrozenRows && (_viewportBottomL.scrollTop = _viewportBottomR.scrollTop = newScrollTop), _viewportScrollContainerY.scrollTop = newScrollTop, trigger(self.onViewportChanged, {}));
+ }
+ function defaultFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return value == null ? "" : (value + "").replace(/&/g, "&").replace(//g, ">");
+ }
+ function getFormatter(row, column) {
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnOverrides = rowMetadata && rowMetadata.columns && (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
+ return columnOverrides && columnOverrides.formatter || rowMetadata && rowMetadata.formatter || column.formatter || options.formatterFactory && options.formatterFactory.getFormatter(column) || options.defaultFormatter;
+ }
+ function getEditor(row, cell) {
+ var column = columns[cell], rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== void 0 ? columnMetadata[column.id].editor : columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== void 0 ? columnMetadata[cell].editor : column.editor || options.editorFactory && options.editorFactory.getEditor(column);
+ }
+ function getDataItemValueForColumn(item, columnDef) {
+ return options.dataItemColumnValueExtractor ? options.dataItemColumnValueExtractor(item, columnDef) : item[columnDef.field];
+ }
+ function appendRowHtml(stringArrayL, stringArrayR, row, range, dataLength) {
+ var d = getDataItem(row), dataLoading = row < dataLength && !d, rowCss = "slick-row" + (hasFrozenRows && row <= options.frozenRow ? " frozen" : "") + (dataLoading ? " loading" : "") + (row === activeRow && options.showCellSelection ? " active" : "") + (row % 2 == 1 ? " odd" : " even");
+ d || (rowCss += " " + options.addNewRowCssClass);
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata && metadata.cssClasses && (rowCss += " " + metadata.cssClasses);
+ var frozenRowOffset = getFrozenRowOffset(row), rowHtml = `
`;
+ stringArrayL.push(rowHtml), hasFrozenColumns() && stringArrayR.push(rowHtml);
+ for (var colspan, m, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (m = columns[i2], !(!m || m.hidden)) {
+ if (colspan = 1, metadata && metadata.columns) {
+ var columnData = metadata.columns[m.id] || metadata.columns[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ if (columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx) {
+ if (!m.alwaysRenderColumn && columnPosLeft[i2] > range.rightPx)
+ break;
+ hasFrozenColumns() && i2 > options.frozenColumn ? appendCellHtml(stringArrayR, row, i2, colspan, d) : appendCellHtml(stringArrayL, row, i2, colspan, d);
+ } else
+ (m.alwaysRenderColumn || hasFrozenColumns() && i2 <= options.frozenColumn) && appendCellHtml(stringArrayL, row, i2, colspan, d);
+ colspan > 1 && (i2 += colspan - 1);
+ }
+ stringArrayL.push("
"), hasFrozenColumns() && stringArrayR.push("
");
+ }
+ function appendCellHtml(stringArray, row, cell, colspan, item) {
+ var m = columns[cell], cellCss = "slick-cell l" + cell + " r" + Math.min(columns.length - 1, cell + colspan - 1) + (m.cssClass ? " " + m.cssClass : "");
+ hasFrozenColumns() && cell <= options.frozenColumn && (cellCss += " frozen"), row === activeRow && cell === activeCell && options.showCellSelection && (cellCss += " active");
+ for (var key in cellCssClasses)
+ cellCssClasses[key][row] && cellCssClasses[key][row][m.id] && (cellCss += " " + cellCssClasses[key][row][m.id]);
+ var value = null, formatterResult = "";
+ item && (value = getDataItemValueForColumn(item, m), formatterResult = getFormatter(row, m)(row, cell, value, m, item, self), formatterResult == null && (formatterResult = ""));
+ var addlCssClasses = trigger(self.onBeforeAppendCell, { row, cell, value, dataContext: item }).getReturnValue() || "";
+ addlCssClasses += formatterResult && formatterResult.addClasses ? (addlCssClasses ? " " : "") + formatterResult.addClasses : "";
+ var toolTip = formatterResult && formatterResult.toolTip ? "title='" + formatterResult.toolTip + "'" : "", customAttrStr = "";
+ if (m.hasOwnProperty("cellAttrs") && m.cellAttrs instanceof Object)
+ for (var key in m.cellAttrs)
+ m.cellAttrs.hasOwnProperty(key) && (customAttrStr += " " + key + '="' + m.cellAttrs[key] + '" ');
+ stringArray.push(``), item && stringArray.push(Object.prototype.toString.call(formatterResult) !== "[object Object]" ? formatterResult : formatterResult.text), stringArray.push("
"), rowsCache[row].cellRenderQueue.push(cell), rowsCache[row].cellColSpans[cell] = colspan;
+ }
+ function cleanupRows(rangeToKeep) {
+ for (var i2 in rowsCache) {
+ var removeFrozenRow = !0;
+ hasFrozenRows && (options.frozenBottom && i2 >= actualFrozenRow || !options.frozenBottom && i2 <= actualFrozenRow) && (removeFrozenRow = !1), (i2 = parseInt(i2, 10)) !== activeRow && (i2 < rangeToKeep.top || i2 > rangeToKeep.bottom) && removeFrozenRow && removeRowFromCache(i2);
+ }
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function invalidate() {
+ updateRowCount(), invalidateAllRows(), render();
+ }
+ function invalidateAllRows() {
+ currentEditor && makeActiveCellNormal();
+ for (var row in rowsCache)
+ removeRowFromCache(row);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function queuePostProcessedRowForCleanup(cacheEntry, postProcessedRow, rowIdx) {
+ postProcessgroupId++;
+ for (var columnIdx in postProcessedRow)
+ postProcessedRow.hasOwnProperty(columnIdx) && postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cacheEntry.cellNodesByColumnIdx[columnIdx | 0],
+ columnIdx: columnIdx | 0,
+ rowIdx
+ });
+ postProcessedCleanupQueue.push({
+ actionType: "R",
+ groupId: postProcessgroupId,
+ node: cacheEntry.rowNode
+ }), cacheEntry.rowNode.forEach(function(node) {
+ node.remove();
+ });
+ }
+ function queuePostProcessedCellForCleanup(cellnode, columnIdx, rowIdx) {
+ postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cellnode,
+ columnIdx,
+ rowIdx
+ }), cellnode.remove();
+ }
+ function removeRowFromCache(row) {
+ var cacheEntry = rowsCache[row];
+ cacheEntry && (options.enableAsyncPostRenderCleanup && postProcessedRows[row] ? queuePostProcessedRowForCleanup(cacheEntry, postProcessedRows[row], row) : cacheEntry.rowNode.forEach(function(node) {
+ node.parentElement && node.parentElement.removeChild(node);
+ }), delete rowsCache[row], delete postProcessedRows[row], renderedRows--, counter_rows_removed++);
+ }
+ function invalidateRows(rows) {
+ var i2, rl;
+ if (!(!rows || !rows.length)) {
+ for (vScrollDir = 0, rl = rows.length, i2 = 0; i2 < rl; i2++)
+ currentEditor && activeRow === rows[i2] && makeActiveCellNormal(), rowsCache[rows[i2]] && removeRowFromCache(rows[i2]);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ }
+ function invalidateRow(row) {
+ !row && row !== 0 || invalidateRows([row]);
+ }
+ function applyFormatResultToCellNode(formatterResult, cellNode, suppressRemove) {
+ if (formatterResult == null && (formatterResult = ""), Object.prototype.toString.call(formatterResult) !== "[object Object]") {
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult);
+ return;
+ }
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult.text), formatterResult.removeClasses && !suppressRemove && formatterResult.removeClasses.split(" ").forEach(function(c) {
+ cellNode.classList.remove(c);
+ }), formatterResult.addClasses && formatterResult.addClasses.split(" ").forEach(function(c) {
+ cellNode.classList.add(c);
+ }), formatterResult.toolTip && cellNode.setAttribute("title", formatterResult.toolTip);
+ }
+ function updateCell(row, cell) {
+ var cellNode = getCellNode(row, cell);
+ if (cellNode) {
+ var m = columns[cell], d = getDataItem(row);
+ if (currentEditor && activeRow === row && activeCell === cell)
+ currentEditor.loadValue(d);
+ else {
+ var formatterResult = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d, self) : "";
+ applyFormatResultToCellNode(formatterResult, cellNode), invalidatePostProcessingResults(row);
+ }
+ }
+ }
+ function updateRow(row) {
+ var cacheEntry = rowsCache[row];
+ if (cacheEntry) {
+ ensureCellNodesInRowsCache(row);
+ var formatterResult, d = getDataItem(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ row === activeRow && columnIdx === activeCell && currentEditor ? currentEditor.loadValue(d) : d ? (formatterResult = getFormatter(row, m)(row, columnIdx, getDataItemValueForColumn(d, m), m, d, self), applyFormatResultToCellNode(formatterResult, node)) : node.innerHTML = "";
+ }
+ invalidatePostProcessingResults(row);
+ }
+ }
+ function getViewportHeight() {
+ if ((!options.autoHeight || options.frozenColumn != -1) && (topPanelH = options.showTopPanel ? options.topPanelHeight + getVBoxDelta(_topPanelScrollers[0]) : 0, headerRowH = options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, footerRowH = options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0), options.autoHeight) {
+ let fullHeight = _paneHeaderL.offsetHeight;
+ fullHeight += options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, fullHeight += options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0, fullHeight += getCanvasWidth() > viewportW ? scrollbarDimensions.height : 0, viewportH = options.rowHeight * getDataLengthIncludingAddNew() + (options.frozenColumn == -1 ? fullHeight : 0);
+ } else {
+ let columnNamesH = options.showColumnHeader ? Utils.toFloat(Utils.height(_headerScroller[0])) + getVBoxDelta(_headerScroller[0]) : 0, preHeaderH = options.createPreHeaderPanel && options.showPreHeaderPanel ? options.preHeaderPanelHeight + getVBoxDelta(_preHeaderPanelScroller) : 0, style = getComputedStyle(_container);
+ viewportH = Utils.toFloat(style.height) - Utils.toFloat(style.paddingTop) - Utils.toFloat(style.paddingBottom) - columnNamesH - topPanelH - headerRowH - footerRowH - preHeaderH;
+ }
+ return numVisibleRows = Math.ceil(viewportH / options.rowHeight), viewportH;
+ }
+ function getViewportWidth() {
+ viewportW = parseFloat(Utils.innerSize(_container, "width"));
+ }
+ function resizeCanvas() {
+ if (initialized) {
+ if (paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, getViewportWidth(), getViewportHeight(), hasFrozenRows ? options.frozenBottom ? (paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions.height, paneBottomH = frozenRowsHeight + scrollbarDimensions.height) : (paneTopH = frozenRowsHeight, paneBottomH = viewportH - frozenRowsHeight) : paneTopH = viewportH, paneTopH += topPanelH + headerRowH + footerRowH, hasFrozenColumns() && options.autoHeight && (paneTopH += scrollbarDimensions.height), viewportTopH = paneTopH - topPanelH - headerRowH - footerRowH, options.autoHeight) {
+ if (hasFrozenColumns()) {
+ let style = getComputedStyle(_headerScrollerL);
+ Utils.height(_container, paneTopH + Utils.toFloat(style.height));
+ }
+ _paneTopL.style.position = "relative";
+ }
+ Utils.setStyleSize(_paneTopL, "top", Utils.height(_paneHeaderL) || (options.showHeaderRow ? options.headerRowHeight : 0) + (options.showPreHeaderPanel ? options.preHeaderPanelHeight : 0)), Utils.height(_paneTopL, paneTopH);
+ var paneBottomTop = _paneTopL.offsetTop + paneTopH;
+ options.autoHeight || Utils.height(_viewportTopL, viewportTopH), hasFrozenColumns() ? (Utils.setStyleSize(_paneTopR, "top", Utils.height(_paneHeaderL)), Utils.height(_paneTopR, paneTopH), Utils.height(_viewportTopR, viewportTopH), hasFrozenRows && (Utils.setStyleSize(_paneBottomL, "top", paneBottomTop), Utils.height(_paneBottomL, paneBottomH), Utils.setStyleSize(_paneBottomR, "top", paneBottomTop), Utils.height(_paneBottomR, paneBottomH), Utils.height(_viewportBottomR, paneBottomH))) : hasFrozenRows && (Utils.width(_paneBottomL, "100%"), Utils.height(_paneBottomL, paneBottomH), Utils.setStyleSize(_paneBottomL, "top", paneBottomTop)), hasFrozenRows ? (Utils.height(_viewportBottomL, paneBottomH), options.frozenBottom ? (Utils.height(_canvasBottomL, frozenRowsHeight), hasFrozenColumns() && Utils.height(_canvasBottomR, frozenRowsHeight)) : (Utils.height(_canvasTopL, frozenRowsHeight), hasFrozenColumns() && Utils.height(_canvasTopR, frozenRowsHeight))) : Utils.height(_viewportTopR, viewportTopH), (!scrollbarDimensions || !scrollbarDimensions.width) && (scrollbarDimensions = measureScrollbar()), options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit && autosizeColumns(), updateRowCount(), handleScroll(), lastRenderedScrollLeft = -1, render();
+ }
+ }
+ function updatePagingStatusFromView(pagingInfo) {
+ pagingActive = pagingInfo.pageSize !== 0, pagingIsLastPage = pagingInfo.pageNum == pagingInfo.totalPages - 1;
+ }
+ function updateRowCount() {
+ if (initialized) {
+ var dataLength = getDataLength(), dataLengthIncludingAddNew = getDataLengthIncludingAddNew(), numberOfRows = 0, oldH = hasFrozenRows && !options.frozenBottom ? Utils.height(_canvasBottomL) : Utils.height(_canvasTopL);
+ if (hasFrozenRows)
+ var numberOfRows = getDataLength() - options.frozenRow;
+ else
+ var numberOfRows = dataLengthIncludingAddNew + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);
+ var tempViewportH = Utils.height(_viewportScrollContainerY), oldViewportHasVScroll = viewportHasVScroll;
+ viewportHasVScroll = options.alwaysShowVerticalScroll || !options.autoHeight && numberOfRows * options.rowHeight > tempViewportH, makeActiveCellNormal();
+ var r1 = dataLength - 1;
+ for (var i2 in rowsCache)
+ i2 > r1 && removeRowFromCache(i2);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup(), activeCellNode && activeRow > r1 && resetActiveCell();
+ var oldH = h;
+ options.autoHeight ? h = options.rowHeight * numberOfRows : (th = Math.max(options.rowHeight * numberOfRows, tempViewportH - scrollbarDimensions.height), th < maxSupportedCssHeight ? (h = ph = th, n = 1, cj = 0) : (h = maxSupportedCssHeight, ph = h / 100, n = Math.floor(th / ph), cj = (th - h) / (n - 1))), (h !== oldH || enforceFrozenRowHeightRecalc) && (hasFrozenRows && !options.frozenBottom ? (Utils.height(_canvasBottomL, h), hasFrozenColumns() && Utils.height(_canvasBottomR, h)) : (Utils.height(_canvasTopL, h), Utils.height(_canvasTopR, h)), scrollTop = _viewportScrollContainerY.scrollTop, enforceFrozenRowHeightRecalc = !1);
+ var oldScrollTopInRange = scrollTop + offset <= th - tempViewportH;
+ th == 0 || scrollTop == 0 ? page = offset = 0 : scrollTo(oldScrollTopInRange ? scrollTop + offset : th - tempViewportH + scrollbarDimensions.height), h != oldH && options.autoHeight && resizeCanvas(), options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit && oldViewportHasVScroll != viewportHasVScroll && autosizeColumns(), updateCanvasWidth(!1);
+ }
+ }
+ function getVisibleRange(viewportTop, viewportLeft) {
+ return viewportTop == null && (viewportTop = scrollTop), viewportLeft == null && (viewportLeft = scrollLeft), {
+ top: getRowFromPosition(viewportTop),
+ bottom: getRowFromPosition(viewportTop + viewportH) + 1,
+ leftPx: viewportLeft,
+ rightPx: viewportLeft + viewportW
+ };
+ }
+ function getRenderedRange(viewportTop, viewportLeft) {
+ var range = getVisibleRange(viewportTop, viewportLeft), buffer = Math.round(viewportH / options.rowHeight), minBuffer = options.minRowBuffer;
+ return vScrollDir == -1 ? (range.top -= buffer, range.bottom += minBuffer) : vScrollDir == 1 ? (range.top -= minBuffer, range.bottom += buffer) : (range.top -= minBuffer, range.bottom += minBuffer), range.top = Math.max(0, range.top), range.bottom = Math.min(getDataLengthIncludingAddNew() - 1, range.bottom), range.leftPx -= viewportW, range.rightPx += viewportW, range.leftPx = Math.max(0, range.leftPx), range.rightPx = Math.min(canvasWidth, range.rightPx), range;
+ }
+ function ensureCellNodesInRowsCache(row) {
+ let cacheEntry = rowsCache[row];
+ if (cacheEntry && cacheEntry.cellRenderQueue.length) {
+ let rowNode = cacheEntry.rowNode, children = Array.from(rowNode[0].children);
+ rowNode.length > 1 && (children = children.concat(Array.from(rowNode[1].children)));
+ let i2 = children.length - 1;
+ for (; cacheEntry.cellRenderQueue.length; ) {
+ let columnIdx = cacheEntry.cellRenderQueue.pop();
+ cacheEntry.cellNodesByColumnIdx[columnIdx] = children[i2--];
+ }
+ }
+ }
+ function cleanUpCells(range, row) {
+ if (!(hasFrozenRows && (options.frozenBottom && row > actualFrozenRow || row <= actualFrozenRow))) {
+ var totalCellsRemoved = 0, cacheEntry = rowsCache[row], cellsToRemove = [];
+ for (var i2 in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(i2) && (i2 = i2 | 0, !(i2 <= options.frozenColumn) && !(Array.isArray(columns) && columns[i2] && columns[i2].alwaysRenderColumn))) {
+ var colspan = cacheEntry.cellColSpans[i2];
+ (columnPosLeft[i2] > range.rightPx || columnPosRight[Math.min(columns.length - 1, i2 + colspan - 1)] < range.leftPx) && (row == activeRow && i2 == activeCell || cellsToRemove.push(i2));
+ }
+ for (var cellToRemove, cellNode; (cellToRemove = cellsToRemove.pop()) != null; )
+ cellNode = cacheEntry.cellNodesByColumnIdx[cellToRemove], options.enableAsyncPostRenderCleanup && postProcessedRows[row] && postProcessedRows[row][cellToRemove] ? queuePostProcessedCellForCleanup(cellNode, cellToRemove, row) : cellNode.parentElement.removeChild(cellNode), delete cacheEntry.cellColSpans[cellToRemove], delete cacheEntry.cellNodesByColumnIdx[cellToRemove], postProcessedRows[row] && delete postProcessedRows[row][cellToRemove], totalCellsRemoved++;
+ }
+ }
+ function cleanUpAndRenderCells(range) {
+ for (var cacheEntry, stringArray = [], processedRows = [], cellsAdded, totalCellsAdded = 0, colspan, row = range.top, btm = range.bottom; row <= btm; row++)
+ if (cacheEntry = rowsCache[row], !!cacheEntry) {
+ ensureCellNodesInRowsCache(row), cleanUpCells(range, row), cellsAdded = 0;
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata = metadata && metadata.columns;
+ for (var d = getDataItem(row), i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ if (columnPosLeft[i2] > range.rightPx)
+ break;
+ if ((colspan = cacheEntry.cellColSpans[i2]) != null) {
+ i2 += colspan > 1 ? colspan - 1 : 0;
+ continue;
+ }
+ if (colspan = 1, metadata) {
+ var columnData = metadata[columns[i2].id] || metadata[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx && (appendCellHtml(stringArray, row, i2, colspan, d), cellsAdded++), i2 += colspan > 1 ? colspan - 1 : 0;
+ }
+ cellsAdded && (totalCellsAdded += cellsAdded, processedRows.push(row));
+ }
+ if (stringArray.length)
+ for (var x = Utils.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArray.join("")) }), processedRow, node; (processedRow = processedRows.pop()) != null; ) {
+ cacheEntry = rowsCache[processedRow];
+ for (var columnIdx; (columnIdx = cacheEntry.cellRenderQueue.pop()) != null; )
+ node = x.lastChild, hasFrozenColumns() && columnIdx > options.frozenColumn ? cacheEntry.rowNode[1].appendChild(node) : cacheEntry.rowNode[0].appendChild(node), cacheEntry.cellNodesByColumnIdx[columnIdx] = node;
+ }
+ }
+ function renderRows(range) {
+ for (var stringArrayL = [], stringArrayR = [], rows = [], needToReselectCell = !1, dataLength = getDataLength(), i2 = range.top, ii = range.bottom; i2 <= ii; i2++)
+ rowsCache[i2] || hasFrozenRows && options.frozenBottom && i2 == getDataLength() || (renderedRows++, rows.push(i2), rowsCache[i2] = {
+ rowNode: null,
+ // ColSpans of rendered cells (by column idx).
+ // Can also be used for checking whether a cell has been rendered.
+ cellColSpans: [],
+ // Cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().
+ cellNodesByColumnIdx: [],
+ // Column indices of cell nodes that have been rendered, but not yet indexed in
+ // cellNodesByColumnIdx. These are in the same order as cell nodes added at the
+ // end of the row.
+ cellRenderQueue: []
+ }, appendRowHtml(stringArrayL, stringArrayR, i2, range, dataLength), activeCellNode && activeRow === i2 && (needToReselectCell = !0), counter_rows_rendered++);
+ if (!rows.length)
+ return;
+ let x = Utils.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayL.join("")) }), xRight = Utils.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayR.join("")) });
+ for (var i2 = 0, ii = rows.length; i2 < ii; i2++)
+ hasFrozenRows && rows[i2] >= actualFrozenRow ? hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasBottomL.appendChild(x.firstChild), _canvasBottomR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasBottomL.appendChild(x.firstChild)) : hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasTopL.appendChild(x.firstChild), _canvasTopR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasTopL.appendChild(x.firstChild));
+ needToReselectCell && (activeCellNode = getCellNode(activeRow, activeCell));
+ }
+ function startPostProcessing() {
+ options.enableAsyncPostRender && (clearTimeout(h_postrender), h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay));
+ }
+ function startPostProcessingCleanup() {
+ options.enableAsyncPostRenderCleanup && (clearTimeout(h_postrenderCleanup), h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay));
+ }
+ function invalidatePostProcessingResults(row) {
+ for (var columnIdx in postProcessedRows[row])
+ postProcessedRows[row].hasOwnProperty(columnIdx) && (postProcessedRows[row][columnIdx] = "C");
+ postProcessFromRow = Math.min(postProcessFromRow, row), postProcessToRow = Math.max(postProcessToRow, row), startPostProcessing();
+ }
+ function updateRowPositions() {
+ for (var row in rowsCache) {
+ var rowNumber = row ? parseInt(row) : 0;
+ Utils.setStyleSize("top", getRowTop(rowNumber));
+ }
+ }
+ function render() {
+ if (initialized) {
+ scrollThrottle.dequeue();
+ var visible = getVisibleRange(), rendered = getRenderedRange();
+ if (cleanupRows(rendered), lastRenderedScrollLeft != scrollLeft) {
+ if (hasFrozenRows) {
+ var renderedFrozenRows = Utils.extend(!0, {}, rendered);
+ options.frozenBottom ? (renderedFrozenRows.top = actualFrozenRow, renderedFrozenRows.bottom = getDataLength()) : (renderedFrozenRows.top = 0, renderedFrozenRows.bottom = options.frozenRow), cleanUpAndRenderCells(renderedFrozenRows);
+ }
+ cleanUpAndRenderCells(rendered);
+ }
+ renderRows(rendered), hasFrozenRows && (options.frozenBottom ? renderRows({
+ top: actualFrozenRow,
+ bottom: getDataLength() - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ }) : renderRows({
+ top: 0,
+ bottom: options.frozenRow - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ })), postProcessFromRow = visible.top, postProcessToRow = Math.min(getDataLengthIncludingAddNew() - 1, visible.bottom), startPostProcessing(), lastRenderedScrollTop = scrollTop, lastRenderedScrollLeft = scrollLeft, h_render = null, trigger(self.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: self });
+ }
+ }
+ function handleHeaderRowScroll() {
+ var scrollLeft2 = _headerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleFooterRowScroll() {
+ var scrollLeft2 = _footerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handlePreHeaderPanelScroll() {
+ handleElementScroll(_preHeaderPanelScroller);
+ }
+ function handleElementScroll(element) {
+ var scrollLeft2 = element.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleScroll() {
+ return scrollTop = _viewportScrollContainerY.scrollTop, scrollLeft = _viewportScrollContainerX.scrollLeft, _handleScroll(!1);
+ }
+ function _handleScroll(isMouseWheel) {
+ var maxScrollDistanceY = _viewportScrollContainerY.scrollHeight - _viewportScrollContainerY.clientHeight, maxScrollDistanceX = _viewportScrollContainerY.scrollWidth - _viewportScrollContainerY.clientWidth;
+ maxScrollDistanceY = Math.max(0, maxScrollDistanceY), maxScrollDistanceX = Math.max(0, maxScrollDistanceX), scrollTop > maxScrollDistanceY && (scrollTop = maxScrollDistanceY), scrollLeft > maxScrollDistanceX && (scrollLeft = maxScrollDistanceX);
+ var vScrollDist = Math.abs(scrollTop - prevScrollTop), hScrollDist = Math.abs(scrollLeft - prevScrollLeft);
+ if (hScrollDist && (prevScrollLeft = scrollLeft, Utils.debounce(() => {
+ _viewportScrollContainerX.scrollLeft = scrollLeft, _headerScrollContainer.scrollLeft = scrollLeft, _topPanelScrollers[0].scrollLeft = scrollLeft, options.createFooterRow && (_footerRowScrollContainer.scrollLeft = scrollLeft), options.createPreHeaderPanel && (hasFrozenColumns() ? _preHeaderPanelScrollerR.scrollLeft = scrollLeft : _preHeaderPanelScroller.scrollLeft = scrollLeft), hasFrozenColumns() ? (hasFrozenRows && (_viewportTopR.scrollLeft = scrollLeft), _headerRowScrollerR.scrollLeft = scrollLeft) : (hasFrozenRows && (_viewportTopL.scrollLeft = scrollLeft), _headerRowScrollerL.scrollLeft = scrollLeft);
+ }, options.scrollDebounceDelay)()), vScrollDist && !options.autoHeight)
+ if (vScrollDir = prevScrollTop < scrollTop ? 1 : -1, prevScrollTop = scrollTop, isMouseWheel && (_viewportScrollContainerY.scrollTop = scrollTop), hasFrozenColumns() && (hasFrozenRows && !options.frozenBottom ? _viewportBottomL.scrollTop = scrollTop : _viewportTopL.scrollTop = scrollTop), vScrollDist < viewportH)
+ scrollTo(scrollTop + offset);
+ else {
+ var oldOffset = offset;
+ h == viewportH ? page = 0 : page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph))), offset = Math.round(page * cj), oldOffset != offset && invalidateAllRows();
+ }
+ if (hScrollDist || vScrollDist) {
+ var dx = Math.abs(lastRenderedScrollLeft - scrollLeft), dy = Math.abs(lastRenderedScrollTop - scrollTop);
+ (dx > 20 || dy > 20) && (options.forceSyncScrolling || dy < viewportH && dx < viewportW ? render() : scrollThrottle.enqueue(), trigger(self.onViewportChanged, {}));
+ }
+ return trigger(self.onScroll, { scrollLeft, scrollTop }), !!(hScrollDist || vScrollDist);
+ }
+ function ActionThrottle(action, minPeriod_ms) {
+ var blocked = !1, queued = !1;
+ function enqueue() {
+ blocked ? queued = !0 : blockAndExecute();
+ }
+ function dequeue() {
+ queued = !1;
+ }
+ function blockAndExecute() {
+ blocked = !0, setTimeout(unblock, minPeriod_ms), action();
+ }
+ function unblock() {
+ queued ? (dequeue(), blockAndExecute()) : blocked = !1;
+ }
+ return {
+ enqueue,
+ dequeue
+ };
+ }
+ function asyncPostProcessRows() {
+ for (var dataLength = getDataLength(); postProcessFromRow <= postProcessToRow; ) {
+ var row = vScrollDir >= 0 ? postProcessFromRow++ : postProcessToRow--, cacheEntry = rowsCache[row];
+ if (!(!cacheEntry || row >= dataLength)) {
+ postProcessedRows[row] || (postProcessedRows[row] = {}), ensureCellNodesInRowsCache(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], processedStatus = postProcessedRows[row][columnIdx];
+ if (m.asyncPostRender && processedStatus !== "R") {
+ var node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ node && m.asyncPostRender(node, row, getDataItem(row), m, processedStatus === "C"), postProcessedRows[row][columnIdx] = "R";
+ }
+ }
+ h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);
+ return;
+ }
+ }
+ }
+ function asyncPostProcessCleanupRows() {
+ if (postProcessedCleanupQueue.length > 0) {
+ for (var groupId = postProcessedCleanupQueue[0].groupId; postProcessedCleanupQueue.length > 0 && postProcessedCleanupQueue[0].groupId == groupId; ) {
+ var entry = postProcessedCleanupQueue.shift();
+ if (entry.actionType == "R" && entry.node.forEach(function(node) {
+ node.remove();
+ }), entry.actionType == "C") {
+ var column = columns[entry.columnIdx];
+ column.asyncPostRenderCleanup && entry.node && column.asyncPostRenderCleanup(entry.node, entry.rowIdx, column);
+ }
+ }
+ h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);
+ }
+ }
+ function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {
+ var node, columnId, addedRowHash, removedRowHash;
+ for (var row in rowsCache) {
+ if (removedRowHash = removedHash && removedHash[row], addedRowHash = addedHash && addedHash[row], removedRowHash)
+ for (columnId in removedRowHash)
+ (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.remove(removedRowHash[columnId]));
+ if (addedRowHash)
+ for (columnId in addedRowHash)
+ (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.add(addedRowHash[columnId]));
+ }
+ }
+ function addCellCssStyles(key, hash) {
+ if (cellCssClasses[key])
+ throw new Error("SlickGrid addCellCssStyles: cell CSS hash with key '" + key + "' already exists.");
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, null), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function removeCellCssStyles(key) {
+ cellCssClasses[key] && (updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]), delete cellCssClasses[key], trigger(self.onCellCssStylesChanged, { key, hash: null, grid: self }));
+ }
+ function setCellCssStyles(key, hash) {
+ let prevHash = cellCssClasses[key];
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, prevHash), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function getCellCssStyles(key) {
+ return cellCssClasses[key];
+ }
+ function flashCell(row, cell, speed) {
+ speed = speed || 250;
+ function toggleCellClass(cellNode, times) {
+ times < 1 || setTimeout(function() {
+ times % 2 == 0 ? cellNode.classList.add(options.cellFlashingCssClass) : cellNode.classList.remove(options.cellFlashingCssClass), toggleCellClass(cellNode, times - 1);
+ }, speed);
+ }
+ if (rowsCache[row]) {
+ let cellNode = getCellNode(row, cell);
+ cellNode && toggleCellClass(cellNode, 5);
+ }
+ }
+ function handleMouseWheel(e, delta, deltaX, deltaY) {
+ scrollTop = Math.max(0, _viewportScrollContainerY.scrollTop - deltaY * options.rowHeight), scrollLeft = _viewportScrollContainerX.scrollLeft + deltaX * 10;
+ var handled = _handleScroll(!0);
+ handled && e.preventDefault();
+ }
+ function handleDragInit(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragInit, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDragStart(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragStart, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDrag(e, dd) {
+ return trigger(self.onDrag, dd, e).getReturnValue();
+ }
+ function handleDragEnd(e, dd) {
+ trigger(self.onDragEnd, dd, e);
+ }
+ function handleKeyDown(e) {
+ var handled = trigger(self.onKeyDown, { row: activeRow, cell: activeCell }, e).isImmediatePropagationStopped();
+ if (!handled && !e.shiftKey && !e.altKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ e.which == keyCode.HOME ? handled = e.ctrlKey ? navigateTop() : navigateRowStart() : e.which == keyCode.END && (handled = e.ctrlKey ? navigateBottom() : navigateRowEnd());
+ }
+ if (!handled)
+ if (!e.shiftKey && !e.altKey && !e.ctrlKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ if (e.which == keyCode.ESCAPE) {
+ if (!getEditorLock().isActive())
+ return;
+ cancelEditAndSetFocus();
+ } else
+ e.which == keyCode.PAGE_DOWN ? (navigatePageDown(), handled = !0) : e.which == keyCode.PAGE_UP ? (navigatePageUp(), handled = !0) : e.which == keyCode.LEFT ? handled = navigateLeft() : e.which == keyCode.RIGHT ? handled = navigateRight() : e.which == keyCode.UP ? handled = navigateUp() : e.which == keyCode.DOWN ? handled = navigateDown() : e.which == keyCode.TAB ? handled = navigateNext() : e.which == keyCode.ENTER && (options.editable && (currentEditor ? activeRow === getDataLength() ? navigateDown() : commitEditAndSetFocus() : getEditorLock().commitCurrentEdit() && makeActiveCellEditable(void 0, void 0, e)), handled = !0);
+ } else
+ e.which == keyCode.TAB && e.shiftKey && !e.ctrlKey && !e.altKey && (handled = navigatePrev());
+ if (handled) {
+ e.stopPropagation(), e.preventDefault();
+ try {
+ e.originalEvent.keyCode = 0;
+ } catch (error) {
+ }
+ }
+ }
+ function handleClick(evt) {
+ let e = evt;
+ if (e instanceof EventData ? e = evt.getNativeEvent() : evt = void 0, !currentEditor && (e.target != document.activeElement || e.target.classList.contains("slick-cell"))) {
+ var selection = getTextSelection();
+ setFocus(), setTextSelection(selection);
+ }
+ var cell = getCellFromEvent(e);
+ if (!(!cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell) && (evt = trigger(self.onClick, { row: cell.row, cell: cell.cell }, evt || e), !evt.isImmediatePropagationStopped() && canCellBeActive(cell.row, cell.cell) && (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()))) {
+ scrollRowIntoView(cell.row, !1);
+ var preClickModeOn = e.target && e.target.className === preClickClassName, column = columns[cell.cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);
+ }
+ }
+ function handleContextMenu(e) {
+ var cell = e.target.closest(".slick-cell");
+ cell && (activeCellNode === cell && currentEditor !== null || trigger(self.onContextMenu, {}, e));
+ }
+ function handleDblClick(e) {
+ var cell = getCellFromEvent(e);
+ !cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell || (trigger(self.onDblClick, { row: cell.row, cell: cell.cell }, e), !e.defaultPrevented && options.editable && gotoCell(cell.row, cell.cell, !0, e));
+ }
+ function handleHeaderMouseEnter(e) {
+ let c = Utils.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderMouseLeave(e) {
+ let c = Utils.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseEnter(e) {
+ let c = Utils.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseLeave(e) {
+ let c = Utils.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderContextMenu(e) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils.storage.get(header, "column");
+ trigger(self.onHeaderContextMenu, { column }, e);
+ }
+ function handleHeaderClick(e) {
+ if (!columnResizeDragging) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils.storage.get(header, "column");
+ column && trigger(self.onHeaderClick, { column }, e);
+ }
+ }
+ function handleFooterContextMenu(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils.storage.get(footer, "column");
+ trigger(self.onFooterContextMenu, { column }, e);
+ }
+ function handleFooterClick(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils.storage.get(footer, "column");
+ trigger(self.onFooterClick, { column }, e);
+ }
+ function handleCellMouseOver(e) {
+ trigger(self.onMouseEnter, {}, e);
+ }
+ function handleCellMouseOut(e) {
+ trigger(self.onMouseLeave, {}, e);
+ }
+ function cellExists(row, cell) {
+ return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);
+ }
+ function getCellFromPoint(x, y) {
+ for (var row = getRowFromPosition(y), cell = 0, w = 0, i2 = 0; i2 < columns.length && w < x; i2++)
+ !columns[i2] || columns[i2].hidden || (w += columns[i2].width, cell++);
+ return cell < 0 && (cell = 0), { row, cell: cell - 1 };
+ }
+ function getCellFromNode(cellNode) {
+ var cls = /l\d+/.exec(cellNode.className);
+ if (!cls)
+ throw new Error("SlickGrid getCellFromNode: cannot get cell - " + cellNode.className);
+ return parseInt(cls[0].substr(1, cls[0].length - 1), 10);
+ }
+ function getRowFromNode(rowNode) {
+ for (var row in rowsCache)
+ for (var i2 in rowsCache[row].rowNode)
+ if (rowsCache[row].rowNode[i2] === rowNode)
+ return row ? parseInt(row) : 0;
+ return null;
+ }
+ function getFrozenRowOffset(row) {
+ let offset2 = 0;
+ return hasFrozenRows ? options.frozenBottom ? row >= actualFrozenRow ? h < viewportTopH ? offset2 = actualFrozenRow * options.rowHeight : offset2 = h : offset2 = 0 : row >= actualFrozenRow ? offset2 = frozenRowsHeight : offset2 = 0 : offset2 = 0, offset2;
+ }
+ function getCellFromEvent(e) {
+ e instanceof EventData && (e = e.getNativeEvent());
+ var targetEvent = e.touches ? e.touches[0] : e, row, cell, cellNode = e.target.closest(".slick-cell");
+ if (!cellNode)
+ return null;
+ if (row = getRowFromNode(cellNode.parentNode), hasFrozenRows) {
+ var c = Utils.offset(Utils.parents(cellNode, ".grid-canvas")[0]), rowOffset = 0, isBottom = Utils.parents(cellNode, ".grid-canvas-bottom").length;
+ isBottom && (rowOffset = options.frozenBottom ? Utils.height(_canvasTopL) : frozenRowsHeight), row = getCellFromPoint(targetEvent.clientX - c.left, targetEvent.clientY - c.top + rowOffset + document.documentElement.scrollTop).row;
+ }
+ return cell = getCellFromNode(cellNode), row == null || cell == null ? null : {
+ row,
+ cell
+ };
+ }
+ function getCellNodeBox(row, cell) {
+ if (!cellExists(row, cell))
+ return null;
+ for (var frozenRowOffset = getFrozenRowOffset(row), y1 = getRowTop(row) - frozenRowOffset, y2 = y1 + options.rowHeight - 1, x1 = 0, i2 = 0; i2 < cell; i2++)
+ !columns[i2] || columns[i2].hidden || (x1 += columns[i2].width, options.frozenColumn == i2 && (x1 = 0));
+ var x2 = x1 + columns[cell].width;
+ return {
+ top: y1,
+ left: x1,
+ bottom: y2,
+ right: x2
+ };
+ }
+ function resetActiveCell() {
+ setActiveCellInternal(null, !1);
+ }
+ function setFocus() {
+ tabbingDirection == -1 ? _focusSink.focus() : _focusSink2.focus();
+ }
+ function scrollCellIntoView(row, cell, doPaging) {
+ if (scrollRowIntoView(row, doPaging), !(cell <= options.frozenColumn)) {
+ var colspan = getColspan(row, cell);
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);
+ }
+ }
+ function internalScrollColumnIntoView(left, right) {
+ var scrollRight = scrollLeft + Utils.width(_viewportScrollContainerX) - (viewportHasVScroll ? scrollbarDimensions.width : 0);
+ left < scrollLeft ? (_viewportScrollContainerX.scrollLeft = left, handleScroll(), render()) : right > scrollRight && (_viewportScrollContainerX.scrollLeft = Math.min(left, right - _viewportScrollContainerX.clientWidth), handleScroll(), render());
+ }
+ function scrollColumnIntoView(cell) {
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell]);
+ }
+ function setActiveCellInternal(newCell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent, e) {
+ activeCellNode !== null && (makeActiveCellNormal(), activeCellNode.classList.remove("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.remove("active");
+ }));
+ var activeCellChanged = activeCellNode !== newCell;
+ if (activeCellNode = newCell, activeCellNode != null) {
+ var activeCellOffset = Utils.offset(activeCellNode), rowOffset = Math.floor(Utils.offset(Utils.parents(activeCellNode, ".grid-canvas")[0]).top), isBottom = Utils.parents(activeCellNode, ".grid-canvas-bottom").length;
+ hasFrozenRows && isBottom && (rowOffset -= options.frozenBottom ? Utils.height(_canvasTopL) : frozenRowsHeight);
+ var cell = getCellFromPoint(activeCellOffset.left, Math.ceil(activeCellOffset.top) - rowOffset);
+ activeRow = cell.row, activeCell = activePosX = activeCell = activePosX = getCellFromNode(activeCellNode), opt_editMode == null && (opt_editMode = activeRow == getDataLength() || options.autoEdit), options.showCellSelection && (activeCellNode.classList.add("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.add("active");
+ })), options.editable && opt_editMode && isCellPotentiallyEditable(activeRow, activeCell) && (clearTimeout(h_editorLoader), options.asyncEditorLoading ? h_editorLoader = setTimeout(function() {
+ makeActiveCellEditable(void 0, preClickModeOn, e);
+ }, options.asyncEditorLoadDelay) : makeActiveCellEditable(void 0, preClickModeOn, e));
+ } else
+ activeRow = activeCell = null;
+ suppressActiveCellChangedEvent || trigger(self.onActiveCellChanged, getActiveCell());
+ }
+ function clearTextSelection() {
+ if (document.selection && document.selection.empty)
+ try {
+ document.selection.empty();
+ } catch (e) {
+ }
+ else if (window.getSelection) {
+ var sel = window.getSelection();
+ sel && sel.removeAllRanges && sel.removeAllRanges();
+ }
+ }
+ function isCellPotentiallyEditable(row, cell) {
+ var dataLength = getDataLength();
+ return !(row < dataLength && !getDataItem(row) || columns[cell].cannotTriggerInsert && row >= dataLength || !columns[cell] || columns[cell].hidden || !getEditor(row, cell));
+ }
+ function makeActiveCellNormal() {
+ if (currentEditor) {
+ if (trigger(self.onBeforeCellEditorDestroy, { editor: currentEditor }), currentEditor.destroy(), currentEditor = null, activeCellNode) {
+ var d = getDataItem(activeRow);
+ if (activeCellNode.classList.remove("editable"), activeCellNode.classList.remove("invalid"), d) {
+ var column = columns[activeCell], formatter = getFormatter(activeRow, column), formatterResult = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, d, self);
+ applyFormatResultToCellNode(formatterResult, activeCellNode), invalidatePostProcessingResults(activeRow);
+ }
+ }
+ navigator.userAgent.toLowerCase().match(/msie/) && clearTextSelection(), getEditorLock().deactivate(editController);
+ }
+ }
+ function makeActiveCellEditable(editor, preClickModeOn, e) {
+ if (activeCellNode) {
+ if (!options.editable)
+ throw new Error("SlickGrid makeActiveCellEditable : should never get called when options.editable is false");
+ if (clearTimeout(h_editorLoader), !!isCellPotentiallyEditable(activeRow, activeCell)) {
+ var columnDef = columns[activeCell], item = getDataItem(activeRow);
+ if (trigger(self.onBeforeEditCell, { row: activeRow, cell: activeCell, item, column: columnDef, target: "grid" }).getReturnValue() === !1) {
+ setFocus();
+ return;
+ }
+ getEditorLock().activate(editController), activeCellNode.classList.add("editable");
+ var useEditor = editor || getEditor(activeRow, activeCell);
+ !editor && !useEditor.suppressClearOnEdit && (activeCellNode.innerHTML = "");
+ var metadata = data.getItemMetadata && data.getItemMetadata(activeRow);
+ metadata = metadata && metadata.columns;
+ var columnMetaData = metadata && (metadata[columnDef.id] || metadata[activeCell]);
+ currentEditor = new useEditor({
+ grid: self,
+ gridPosition: absBox(_container),
+ position: absBox(activeCellNode),
+ container: activeCellNode,
+ column: columnDef,
+ columnMetaData,
+ item: item || {},
+ event: e,
+ commitChanges: commitEditAndSetFocus,
+ cancelChanges: cancelEditAndSetFocus
+ }), item && (currentEditor.loadValue(item), preClickModeOn && currentEditor.preClick && currentEditor.preClick()), serializedEditorValue = currentEditor.serializeValue(), currentEditor.position && handleActiveCellPositionChange();
+ }
+ }
+ }
+ function commitEditAndSetFocus() {
+ getEditorLock().commitCurrentEdit() && (setFocus(), options.autoEdit && !options.autoCommitEdit && navigateDown());
+ }
+ function cancelEditAndSetFocus() {
+ getEditorLock().cancelCurrentEdit() && setFocus();
+ }
+ function absBox(elem) {
+ var box = {
+ top: elem.offsetTop,
+ left: elem.offsetLeft,
+ bottom: 0,
+ right: 0,
+ width: elem.offsetWidth,
+ height: elem.offsetWidth,
+ visible: !0
+ };
+ box.bottom = box.top + box.height, box.right = box.left + box.width;
+ for (var offsetParent = elem.offsetParent; (elem = elem.parentNode) != document.body && elem != null; ) {
+ let styles = getComputedStyle(elem);
+ box.visible && elem.scrollHeight != elem.offsetHeight && styles.overflowY != "visible" && (box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight), box.visible && elem.scrollWidth != elem.offsetWidth && styles.overflowX != "visible" && (box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth), box.left -= elem.scrollLeft, box.top -= elem.scrollTop, elem === offsetParent && (box.left += elem.offsetLeft, box.top += elem.offsetTop, offsetParent = elem.offsetParent), box.bottom = box.top + box.height, box.right = box.left + box.width;
+ }
+ return box;
+ }
+ function getActiveCellPosition() {
+ return absBox(activeCellNode);
+ }
+ function getGridPosition() {
+ return absBox(_container);
+ }
+ function handleActiveCellPositionChange() {
+ if (activeCellNode && (trigger(self.onActiveCellPositionChanged, {}), currentEditor)) {
+ var cellBox = getActiveCellPosition();
+ currentEditor.show && currentEditor.hide && (cellBox.visible ? currentEditor.show() : currentEditor.hide()), currentEditor.position && currentEditor.position(cellBox);
+ }
+ }
+ function getCellEditor() {
+ return currentEditor;
+ }
+ function getActiveCell() {
+ return activeCellNode ? { row: activeRow, cell: activeCell } : null;
+ }
+ function getActiveCellNode() {
+ return activeCellNode;
+ }
+ function getTextSelection() {
+ var textSelection = null;
+ if (window.getSelection) {
+ var selection = window.getSelection();
+ selection.rangeCount > 0 && (textSelection = selection.getRangeAt(0));
+ }
+ return textSelection;
+ }
+ function setTextSelection(selection) {
+ if (window.getSelection && selection) {
+ var target = window.getSelection();
+ target.removeAllRanges(), target.addRange(selection);
+ }
+ }
+ function scrollRowIntoView(row, doPaging) {
+ if (!hasFrozenRows || !options.frozenBottom && row > actualFrozenRow - 1 || options.frozenBottom && row < actualFrozenRow - 1) {
+ var viewportScrollH = Utils.height(_viewportScrollContainerY), rowNumber = hasFrozenRows && !options.frozenBottom ? row - options.frozenRow : row, rowAtTop = rowNumber * options.rowHeight, rowAtBottom = (rowNumber + 1) * options.rowHeight - viewportScrollH + (viewportHasHScroll ? scrollbarDimensions.height : 0);
+ (rowNumber + 1) * options.rowHeight > scrollTop + viewportScrollH + offset ? (scrollTo(doPaging ? rowAtTop : rowAtBottom), render()) : rowNumber * options.rowHeight < scrollTop + offset && (scrollTo(doPaging ? rowAtBottom : rowAtTop), render());
+ }
+ }
+ function scrollRowToTop(row) {
+ scrollTo(row * options.rowHeight), render();
+ }
+ function scrollPage(dir) {
+ var deltaRows = dir * numVisibleRows, bottomOfTopmostFullyVisibleRow = scrollTop + options.rowHeight - 1;
+ if (scrollTo((getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * options.rowHeight), render(), options.enableCellNavigation && activeRow != null) {
+ var row = activeRow + deltaRows, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ row >= dataLengthIncludingAddNew && (row = dataLengthIncludingAddNew - 1), row < 0 && (row = 0);
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ }
+ function navigatePageDown() {
+ scrollPage(1);
+ }
+ function navigatePageUp() {
+ scrollPage(-1);
+ }
+ function navigateTop() {
+ navigateToRow(0);
+ }
+ function navigateBottom() {
+ navigateToRow(getDataLength() - 1);
+ }
+ function navigateToRow(row) {
+ var num_rows = getDataLength();
+ if (!num_rows)
+ return !0;
+ if (row < 0 ? row = 0 : row >= num_rows && (row = num_rows - 1), scrollCellIntoView(row, 0, !0), options.enableCellNavigation && activeRow != null) {
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ return !0;
+ }
+ function getColspan(row, cell) {
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (!metadata || !metadata.columns)
+ return 1;
+ var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell], colspan = columnData && columnData.colspan;
+ return colspan === "*" ? colspan = columns.length - cell : colspan = colspan || 1, colspan;
+ }
+ function findFirstFocusableCell(row) {
+ for (var cell = 0; cell < columns.length; ) {
+ if (canCellBeActive(row, cell))
+ return cell;
+ cell += getColspan(row, cell);
+ }
+ return null;
+ }
+ function findLastFocusableCell(row) {
+ for (var cell = 0, lastFocusableCell = null; cell < columns.length; )
+ canCellBeActive(row, cell) && (lastFocusableCell = cell), cell += getColspan(row, cell);
+ return lastFocusableCell;
+ }
+ function gotoRight(row, cell, posX) {
+ if (cell >= columns.length)
+ return null;
+ do
+ cell += getColspan(row, cell);
+ while (cell < columns.length && !canCellBeActive(row, cell));
+ return cell < columns.length ? {
+ row,
+ cell,
+ posX: cell
+ } : null;
+ }
+ function gotoLeft(row, cell, posX) {
+ if (cell <= 0)
+ return null;
+ var firstFocusableCell = findFirstFocusableCell(row);
+ if (firstFocusableCell === null || firstFocusableCell >= cell)
+ return null;
+ for (var prev = {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ }, pos; ; ) {
+ if (pos = gotoRight(prev.row, prev.cell, prev.posX), !pos)
+ return null;
+ if (pos.cell >= cell)
+ return prev;
+ prev = pos;
+ }
+ }
+ function gotoDown(row, cell, posX) {
+ for (var prevCell, dataLengthIncludingAddNew = getDataLengthIncludingAddNew(); ; ) {
+ if (++row >= dataLengthIncludingAddNew)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoUp(row, cell, posX) {
+ for (var prevCell; ; ) {
+ if (--row < 0)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoNext(row, cell, posX) {
+ if (row == null && cell == null && (row = cell = posX = 0, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ var pos = gotoRight(row, cell, posX);
+ if (pos)
+ return pos;
+ var firstFocusableCell = null, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ for (row === dataLengthIncludingAddNew - 1 && row--; ++row < dataLengthIncludingAddNew; )
+ if (firstFocusableCell = findFirstFocusableCell(row), firstFocusableCell !== null)
+ return {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ };
+ return null;
+ }
+ function gotoPrev(row, cell, posX) {
+ if (row == null && cell == null && (row = getDataLengthIncludingAddNew() - 1, cell = posX = columns.length - 1, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ for (var pos, lastSelectableCell; !pos && (pos = gotoLeft(row, cell, posX), !pos); ) {
+ if (--row < 0)
+ return null;
+ cell = 0, lastSelectableCell = findLastFocusableCell(row), lastSelectableCell !== null && (pos = {
+ row,
+ cell: lastSelectableCell,
+ posX: lastSelectableCell
+ });
+ }
+ return pos;
+ }
+ function gotoRowStart(row, cell, posX) {
+ var newCell = findFirstFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function gotoRowEnd(row, cell, posX) {
+ var newCell = findLastFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function navigateRight() {
+ return navigate("right");
+ }
+ function navigateLeft() {
+ return navigate("left");
+ }
+ function navigateDown() {
+ return navigate("down");
+ }
+ function navigateUp() {
+ return navigate("up");
+ }
+ function navigateNext() {
+ return navigate("next");
+ }
+ function navigatePrev() {
+ return navigate("prev");
+ }
+ function navigateRowStart() {
+ return navigate("home");
+ }
+ function navigateRowEnd() {
+ return navigate("end");
+ }
+ function navigate(dir) {
+ if (!options.enableCellNavigation || !activeCellNode && dir != "prev" && dir != "next")
+ return !1;
+ if (!getEditorLock().commitCurrentEdit())
+ return !0;
+ setFocus();
+ var tabbingDirections = {
+ up: -1,
+ down: 1,
+ left: -1,
+ right: 1,
+ prev: -1,
+ next: 1,
+ home: -1,
+ end: 1
+ };
+ tabbingDirection = tabbingDirections[dir];
+ var stepFunctions = {
+ up: gotoUp,
+ down: gotoDown,
+ left: gotoLeft,
+ right: gotoRight,
+ prev: gotoPrev,
+ next: gotoNext,
+ home: gotoRowStart,
+ end: gotoRowEnd
+ }, stepFn = stepFunctions[dir], pos = stepFn(activeRow, activeCell, activePosX);
+ if (pos) {
+ if (hasFrozenRows && options.frozenBottom & pos.row == getDataLength())
+ return;
+ var isAddNewRow = pos.row == getDataLength();
+ return (!options.frozenBottom && pos.row >= actualFrozenRow || options.frozenBottom && pos.row < actualFrozenRow) && scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && options.emulatePagingWhenScrolling), setActiveCellInternal(getCellNode(pos.row, pos.cell)), activePosX = pos.posX, !0;
+ } else
+ return setActiveCellInternal(getCellNode(activeRow, activeCell)), !1;
+ }
+ function getCellNode(row, cell) {
+ if (rowsCache[row]) {
+ ensureCellNodesInRowsCache(row);
+ try {
+ return rowsCache[row].cellNodesByColumnIdx.length > cell ? rowsCache[row].cellNodesByColumnIdx[cell] : null;
+ } catch (e) {
+ return rowsCache[row].cellNodesByColumnIdx[cell];
+ }
+ }
+ return null;
+ }
+ function setActiveCell(row, cell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || options.enableCellNavigation && (scrollCellIntoView(row, cell, !1), setActiveCellInternal(getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent)));
+ }
+ function setActiveRow(row, cell, suppressScrollIntoView) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || (activeRow = row, suppressScrollIntoView || scrollCellIntoView(row, cell || 0, !1)));
+ }
+ function canCellBeActive(row, cell) {
+ if (!options.enableCellNavigation || row >= getDataLengthIncludingAddNew() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.focusable != "undefined")
+ return !!rowMetadata.focusable;
+ var columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[columns[cell].id] && typeof columnMetadata[columns[cell].id].focusable != "undefined" ? !!columnMetadata[columns[cell].id].focusable : columnMetadata && columnMetadata[cell] && typeof columnMetadata[cell].focusable != "undefined" ? !!columnMetadata[cell].focusable : !!columns[cell].focusable;
+ }
+ function canCellBeSelected(row, cell) {
+ if (row >= getDataLength() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.selectable != "undefined")
+ return !!rowMetadata.selectable;
+ var columnMetadata = rowMetadata && rowMetadata.columns && (rowMetadata.columns[columns[cell].id] || rowMetadata.columns[cell]);
+ return columnMetadata && typeof columnMetadata.selectable != "undefined" ? !!columnMetadata.selectable : !!columns[cell].selectable;
+ }
+ function gotoCell(row, cell, forceEdit, e) {
+ if (initialized && canCellBeActive(row, cell) && getEditorLock().commitCurrentEdit()) {
+ scrollCellIntoView(row, cell, !1);
+ var newCell = getCellNode(row, cell), column = columns[cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(newCell, forceEdit || row === getDataLength() || options.autoEdit, null, suppressActiveCellChangedEvent, e), currentEditor || setFocus();
+ }
+ }
+ function commitCurrentEdit() {
+ var item = getDataItem(activeRow), column = columns[activeCell];
+ if (currentEditor) {
+ if (currentEditor.isValueChanged()) {
+ var validationResults = currentEditor.validate();
+ if (validationResults.valid) {
+ if (activeRow < getDataLength()) {
+ var editCommand = {
+ row: activeRow,
+ cell: activeCell,
+ editor: currentEditor,
+ serializedValue: currentEditor.serializeValue(),
+ prevSerializedValue: serializedEditorValue,
+ execute: function() {
+ this.editor.applyValue(item, this.serializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "execute",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ },
+ undo: function() {
+ this.editor.applyValue(item, this.prevSerializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "undo",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ }
+ };
+ options.editCommandHandler ? (makeActiveCellNormal(), options.editCommandHandler(item, column, editCommand)) : (editCommand.execute(), makeActiveCellNormal());
+ } else {
+ var newItem = {};
+ currentEditor.applyValue(newItem, currentEditor.serializeValue()), makeActiveCellNormal(), trigger(self.onAddNewRow, { item: newItem, column });
+ }
+ return !getEditorLock().isActive();
+ } else
+ return activeCellNode.classList.remove("invalid"), Utils.width(activeCellNode), activeCellNode.classList.add("invalid"), trigger(self.onValidationError, {
+ editor: currentEditor,
+ cellNode: activeCellNode,
+ validationResults,
+ row: activeRow,
+ cell: activeCell,
+ column
+ }), currentEditor.focus(), !1;
+ }
+ makeActiveCellNormal();
+ }
+ return !0;
+ }
+ function cancelCurrentEdit() {
+ return makeActiveCellNormal(), !0;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = columns.length - 1, i2 = 0; i2 < rows.length; i2++)
+ ranges.push(new SlickRange(rows[i2], 0, rows[i2], lastCell));
+ return ranges;
+ }
+ function getSelectedRows() {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ return selectedRows.slice(0);
+ }
+ function setSelectedRows(rows, caller) {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ self && self.getEditorLock && !self.getEditorLock().isActive() && selectionModel.setSelectedRanges(rowsToRanges(rows), caller || "SlickGrid.setSelectedRows");
+ }
+ var logMessageCount = 0, logMessageMaxCount = 30;
+ function sanitizeHtmlString(dirtyHtml, suppressLogging) {
+ if (!options.sanitizer || typeof dirtyHtml != "string")
+ return dirtyHtml;
+ var cleanHtml = options.sanitizer(dirtyHtml);
+ return !suppressLogging && options.logSanitizedHtml && logMessageCount <= logMessageMaxCount && cleanHtml !== dirtyHtml && (console.log("sanitizer altered html: " + dirtyHtml + " --> " + cleanHtml), logMessageCount === logMessageMaxCount && console.log("sanitizer: silencing messages after first " + logMessageMaxCount), logMessageCount++), cleanHtml;
+ }
+ this.debug = function() {
+ var s = "";
+ s += `
+counter_rows_rendered: ` + counter_rows_rendered, s += `
+counter_rows_removed: ` + counter_rows_removed, s += `
+renderedRows: ` + renderedRows, s += `
+numVisibleRows: ` + numVisibleRows, s += `
+maxSupportedCssHeight: ` + maxSupportedCssHeight, s += `
+n(umber of pages): ` + n, s += `
+(current) page: ` + page, s += `
+page height (ph): ` + ph, s += `
+vScrollDir: ` + vScrollDir, alert(s);
+ }, Utils.extend(this, {
+ slickGridVersion: "4.0.0",
+ // Events
+ onScroll: new SlickEvent(),
+ onBeforeSort: new SlickEvent(),
+ onSort: new SlickEvent(),
+ onHeaderMouseEnter: new SlickEvent(),
+ onHeaderMouseLeave: new SlickEvent(),
+ onHeaderRowMouseEnter: new SlickEvent(),
+ onHeaderRowMouseLeave: new SlickEvent(),
+ onHeaderContextMenu: new SlickEvent(),
+ onHeaderClick: new SlickEvent(),
+ onHeaderCellRendered: new SlickEvent(),
+ onBeforeHeaderCellDestroy: new SlickEvent(),
+ onHeaderRowCellRendered: new SlickEvent(),
+ onFooterRowCellRendered: new SlickEvent(),
+ onFooterContextMenu: new SlickEvent(),
+ onFooterClick: new SlickEvent(),
+ onBeforeHeaderRowCellDestroy: new SlickEvent(),
+ onBeforeFooterRowCellDestroy: new SlickEvent(),
+ onMouseEnter: new SlickEvent(),
+ onMouseLeave: new SlickEvent(),
+ onClick: new SlickEvent(),
+ onDblClick: new SlickEvent(),
+ onContextMenu: new SlickEvent(),
+ onKeyDown: new SlickEvent(),
+ onAddNewRow: new SlickEvent(),
+ onBeforeAppendCell: new SlickEvent(),
+ onValidationError: new SlickEvent(),
+ onViewportChanged: new SlickEvent(),
+ onColumnsReordered: new SlickEvent(),
+ onColumnsDrag: new SlickEvent(),
+ onColumnsResized: new SlickEvent(),
+ onColumnsResizeDblClick: new SlickEvent(),
+ onBeforeColumnsResize: new SlickEvent(),
+ onCellChange: new SlickEvent(),
+ onCompositeEditorChange: new SlickEvent(),
+ onBeforeEditCell: new SlickEvent(),
+ onBeforeCellEditorDestroy: new SlickEvent(),
+ onBeforeDestroy: new SlickEvent(),
+ onActiveCellChanged: new SlickEvent(),
+ onActiveCellPositionChanged: new SlickEvent(),
+ onDragInit: new SlickEvent(),
+ onDragStart: new SlickEvent(),
+ onDrag: new SlickEvent(),
+ onDragEnd: new SlickEvent(),
+ onSelectedRowsChanged: new SlickEvent(),
+ onCellCssStylesChanged: new SlickEvent(),
+ onAutosizeColumns: new SlickEvent(),
+ onBeforeSetColumns: new SlickEvent(),
+ onBeforeUpdateColumns: new SlickEvent(),
+ onRendered: new SlickEvent(),
+ onSetOptions: new SlickEvent(),
+ // Methods
+ registerPlugin,
+ unregisterPlugin,
+ getPluginByName,
+ getColumns,
+ setColumns,
+ updateColumns,
+ getVisibleColumns,
+ getColumnIndex,
+ updateColumnHeader,
+ setSortColumn,
+ setSortColumns,
+ getSortColumns,
+ autosizeColumns,
+ autosizeColumn,
+ getOptions,
+ setOptions,
+ getData,
+ getDataLength,
+ getDataItem,
+ setData,
+ getSelectionModel,
+ setSelectionModel,
+ getSelectedRows,
+ setSelectedRows,
+ getContainerNode,
+ updatePagingStatusFromView,
+ applyFormatResultToCellNode,
+ render,
+ reRenderColumns,
+ invalidate,
+ invalidateRow,
+ invalidateRows,
+ invalidateAllRows,
+ updateCell,
+ updateRow,
+ getViewport: getVisibleRange,
+ getRenderedRange,
+ resizeCanvas,
+ updateRowCount,
+ scrollRowIntoView,
+ scrollRowToTop,
+ scrollCellIntoView,
+ scrollColumnIntoView,
+ getCanvasNode,
+ getUID,
+ getHeaderColumnWidthDiff,
+ getScrollbarDimensions,
+ getHeadersWidth,
+ getCanvasWidth,
+ getCanvases,
+ getActiveCanvasNode,
+ getViewportNode,
+ getViewports,
+ getActiveViewportNode,
+ setActiveViewportNode,
+ focus: setFocus,
+ scrollTo,
+ cacheCssForHiddenInit,
+ restoreCssFromHiddenInit,
+ getCellFromPoint,
+ getCellFromEvent,
+ getActiveCell,
+ setActiveCell,
+ setActiveRow,
+ getActiveCellNode,
+ getActiveCellPosition,
+ resetActiveCell,
+ editActiveCell: makeActiveCellEditable,
+ getCellEditor,
+ getCellNode,
+ getCellNodeBox,
+ canCellBeSelected,
+ canCellBeActive,
+ navigatePrev,
+ navigateNext,
+ navigateUp,
+ navigateDown,
+ navigateLeft,
+ navigateRight,
+ navigatePageUp,
+ navigatePageDown,
+ navigateTop,
+ navigateBottom,
+ navigateRowStart,
+ navigateRowEnd,
+ gotoCell,
+ getTopPanel,
+ getTopPanels,
+ setTopPanelVisibility,
+ getPreHeaderPanel,
+ getPreHeaderPanelLeft: getPreHeaderPanel,
+ getPreHeaderPanelRight,
+ setPreHeaderPanelVisibility,
+ getHeader,
+ getHeaderColumn,
+ setHeaderRowVisibility,
+ getHeaderRow,
+ getHeaderRowColumn,
+ setFooterRowVisibility,
+ getFooterRow,
+ getFooterRowColumn,
+ getGridPosition,
+ flashCell,
+ addCellCssStyles,
+ setCellCssStyles,
+ removeCellCssStyles,
+ getCellCssStyles,
+ getFrozenRowOffset,
+ setColumnHeaderVisibility,
+ sanitizeHtmlString,
+ getDisplayedScrollbarDimensions,
+ getAbsoluteColumnMinWidth,
+ init: finishInitialization,
+ destroy,
+ // IEditor implementation
+ getEditorLock,
+ getEditController
+ }), init();
+ }
+ window.Slick && Utils.extend(Slick, {
+ Grid: SlickGrid
+ });
+})();
+/**
+ * @license
+ * (c) 2009-2016 Michael Leibman
+ * michael{dot}leibman{at}gmail{dot}com
+ * http://github.com/mleibman/slickgrid
+ *
+ * Distributed under MIT license.
+ * All rights reserved.
+ *
+ * SlickGrid v4.0.0
+ *
+ * NOTES:
+ * Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.
+ * This increases the speed dramatically, but can only be done safely because there are no event handlers
+ * or data associated with any cell/row DOM nodes. Cell editors must make sure they implement .destroy()
+ * and do proper cleanup.
+ */
diff --git a/dist/browser/slick.groupitemmetadataprovider.js b/dist/browser/slick.groupitemmetadataprovider.js
new file mode 100644
index 00000000..54c05b3a
--- /dev/null
+++ b/dist/browser/slick.groupitemmetadataprovider.js
@@ -0,0 +1,110 @@
+"use strict";
+(() => {
+ // src/slick.groupitemmetadataprovider.js
+ var Group = Slick.Group, keyCode = Slick.keyCode, Utils = Slick.Utils;
+ function GroupItemMetadataProvider(inputOptions) {
+ var _grid, _defaults = {
+ checkboxSelect: !1,
+ checkboxSelectCssClass: "slick-group-select-checkbox",
+ checkboxSelectPlugin: null,
+ groupCssClass: "slick-group",
+ groupTitleCssClass: "slick-group-title",
+ totalsCssClass: "slick-group-totals",
+ groupFocusable: !0,
+ totalsFocusable: !1,
+ toggleCssClass: "slick-group-toggle",
+ toggleExpandedCssClass: "expanded",
+ toggleCollapsedCssClass: "collapsed",
+ enableExpandCollapse: !0,
+ groupFormatter: defaultGroupCellFormatter,
+ totalsFormatter: defaultTotalsCellFormatter,
+ includeHeaderTotals: !1
+ }, options = Utils.extend(!0, {}, _defaults, inputOptions);
+ function getOptions() {
+ return options;
+ }
+ function setOptions(inputOptions2) {
+ Utils.extend(!0, options, inputOptions2);
+ }
+ function defaultGroupCellFormatter(row, cell, value, columnDef, item, grid) {
+ if (!options.enableExpandCollapse)
+ return item.title;
+ var indentation = item.level * 15 + "px";
+ return (options.checkboxSelect ? ' ' : "") + "" + item.title + " ";
+ }
+ function defaultTotalsCellFormatter(row, cell, value, columnDef, item, grid) {
+ return columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef, grid) || "";
+ }
+ function init(grid) {
+ _grid = grid, _grid.onClick.subscribe(handleGridClick), _grid.onKeyDown.subscribe(handleGridKeyDown);
+ }
+ function destroy() {
+ _grid && (_grid.onClick.unsubscribe(handleGridClick), _grid.onKeyDown.unsubscribe(handleGridKeyDown));
+ }
+ function handleGridClick(e, args) {
+ var target = e.target, item = this.getDataItem(args.row);
+ if (item && item instanceof Group && target.classList.contains(options.toggleCssClass || "")) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ if (item && item instanceof Group && target.classList.contains(options.checkboxSelectCssClass)) {
+ item.selectChecked = !item.selectChecked, target.classList.remove(item.selectChecked ? "unchecked" : "checked"), target.classList.add(item.selectChecked ? "checked" : "unchecked");
+ var rowIndexes = _grid.getData().mapItemsToRows(item.rows);
+ (item.selectChecked ? options.checkboxSelectPlugin.selectRows : options.checkboxSelectPlugin.deSelectRows)(rowIndexes);
+ }
+ }
+ function handleGridKeyDown(e, args) {
+ if (options.enableExpandCollapse && e.which == keyCode.SPACE) {
+ var activeCell = this.getActiveCell();
+ if (activeCell) {
+ var item = this.getDataItem(activeCell.row);
+ if (item && item instanceof Group) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ }
+ }
+ }
+ function getGroupRowMetadata(item) {
+ var groupLevel = item && item.level;
+ return {
+ selectable: !1,
+ focusable: options.groupFocusable,
+ cssClasses: options.groupCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.includeHeaderTotals && options.totalsFormatter,
+ columns: {
+ 0: {
+ colspan: options.includeHeaderTotals ? "1" : "*",
+ formatter: options.groupFormatter,
+ editor: null
+ }
+ }
+ };
+ }
+ function getTotalsRowMetadata(item) {
+ var groupLevel = item && item.group && item.group.level;
+ return {
+ selectable: !1,
+ focusable: options.totalsFocusable,
+ cssClasses: options.totalsCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.totalsFormatter,
+ editor: null
+ };
+ }
+ return {
+ init,
+ destroy,
+ getGroupRowMetadata,
+ getTotalsRowMetadata,
+ getOptions,
+ setOptions
+ };
+ }
+ window.Slick && (window.Slick.Data = window.Slick.Data || {}, window.Slick.Data.GroupItemMetadataProvider = GroupItemMetadataProvider);
+})();
diff --git a/dist/browser/slick.interactions.js b/dist/browser/slick.interactions.js
new file mode 100644
index 00000000..8e8a5f58
--- /dev/null
+++ b/dist/browser/slick.interactions.js
@@ -0,0 +1,92 @@
+"use strict";
+(() => {
+ // src/slick.interactions.js
+ var Utils = Slick.Utils;
+ function Draggable(options) {
+ let { containerElement, onDragInit, onDragStart, onDrag, onDragEnd } = options, element, startX, startY, deltaX, deltaY, dragStarted;
+ if (containerElement || (containerElement = document), !containerElement || typeof containerElement.addEventListener != "function")
+ throw new Error("[Slick.Draggable] You did not provide a valid container html element that will be used for dragging.");
+ let originaldd = {
+ dragSource: containerElement,
+ dragHandle: null
+ };
+ containerElement && (containerElement.addEventListener("mousedown", userPressed), containerElement.addEventListener("touchstart", userPressed));
+ function executeDragCallbackWhenDefined(callback, e, dd) {
+ typeof callback == "function" && callback(e, dd);
+ }
+ function destroy() {
+ containerElement && (containerElement.removeEventListener("mousedown", userPressed), containerElement.removeEventListener("touchstart", userPressed));
+ }
+ function userPressed(event) {
+ element = event.target;
+ let targetEvent = event.touches ? event.touches[0] : event, { target } = targetEvent;
+ if (!options.allowDragFrom || options.allowDragFrom && element.matches(options.allowDragFrom)) {
+ originaldd.dragHandle = element;
+ let winScrollPos = windowScrollPosition(element);
+ startX = winScrollPos.left + targetEvent.clientX, startY = winScrollPos.top + targetEvent.clientY, deltaX = targetEvent.clientX - targetEvent.clientX, deltaY = targetEvent.clientY - targetEvent.clientY, originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragInit, event, originaldd), document.addEventListener("mousemove", userMoved), document.addEventListener("touchmove", userMoved), document.addEventListener("mouseup", userReleased), document.addEventListener("touchend", userReleased), document.addEventListener("touchcancel", userReleased);
+ }
+ }
+ function userMoved(event) {
+ let targetEvent = event.touches ? event.touches[0] : event;
+ deltaX = targetEvent.clientX - startX, deltaY = targetEvent.clientY - startY;
+ let { target } = targetEvent;
+ dragStarted || (originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragStart, event, originaldd), dragStarted = !0), originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDrag, event, originaldd);
+ }
+ function userReleased(event) {
+ let { target } = event;
+ originaldd = Object.assign(originaldd, { target }), executeDragCallbackWhenDefined(onDragEnd, event, originaldd), document.removeEventListener("mousemove", userMoved), document.removeEventListener("touchmove", userMoved), document.removeEventListener("mouseup", userReleased), document.removeEventListener("touchend", userReleased), document.removeEventListener("touchcancel", userReleased), dragStarted = !1;
+ }
+ function windowScrollPosition() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ return { destroy };
+ }
+ function MouseWheel(options) {
+ let { element, onMouseWheel } = options;
+ function destroy() {
+ element.removeEventListener("wheel", wheelHandler), element.removeEventListener("mousewheel", wheelHandler);
+ }
+ function init() {
+ element.addEventListener("wheel", wheelHandler), element.addEventListener("mousewheel", wheelHandler);
+ }
+ function wheelHandler(event) {
+ let orgEvent = event || window.event, delta = 0, deltaX = 0, deltaY = 0;
+ orgEvent.wheelDelta && (delta = orgEvent.wheelDelta / 120), orgEvent.detail && (delta = -orgEvent.detail / 3), deltaY = delta, orgEvent.axis !== void 0 && orgEvent.axis === orgEvent.HORIZONTAL_AXIS && (deltaY = 0, deltaX = -1 * delta), orgEvent.wheelDeltaY !== void 0 && (deltaY = orgEvent.wheelDeltaY / 120), orgEvent.wheelDeltaX !== void 0 && (deltaX = -1 * orgEvent.wheelDeltaX / 120), typeof onMouseWheel == "function" && onMouseWheel(event, delta, deltaX, deltaY);
+ }
+ return init(), { destroy };
+ }
+ function Resizable(options) {
+ let { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;
+ if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener != "function")
+ throw new Error("[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.");
+ function destroy() {
+ resizeableHandleElement && typeof resizeableHandleElement.removeEventListener == "function" && (resizeableHandleElement.removeEventListener("mousedown", resizeStartHandler), resizeableHandleElement.removeEventListener("touchstart", resizeStartHandler));
+ }
+ function executeResizeCallbackWhenDefined(callback, e) {
+ typeof callback == "function" && callback(e, { resizeableElement, resizeableHandleElement });
+ }
+ function resizeStartHandler(e) {
+ e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeStart, event), document.addEventListener("mousemove", resizingHandler), document.addEventListener("mouseup", resizeEndHandler), document.addEventListener("touchmove", resizingHandler), document.addEventListener("touchend", resizeEndHandler);
+ }
+ function resizingHandler(e) {
+ e.preventDefault && e.type !== "touchmove" && e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ typeof onResize == "function" && (onResize(event, { resizeableElement, resizeableHandleElement }), onResize(event, { resizeableElement, resizeableHandleElement }));
+ }
+ function resizeEndHandler(e) {
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeEnd, event), document.removeEventListener("mousemove", resizingHandler), document.removeEventListener("mouseup", resizeEndHandler), document.removeEventListener("touchmove", resizingHandler), document.removeEventListener("touchend", resizeEndHandler);
+ }
+ return resizeableHandleElement.addEventListener("mousedown", resizeStartHandler), resizeableHandleElement.addEventListener("touchstart", resizeStartHandler), { destroy };
+ }
+ window.Slick && Utils.extend(Slick, {
+ Draggable,
+ MouseWheel,
+ Resizable
+ });
+})();
diff --git a/dist/browser/slick.remotemodel-yahoo.js b/dist/browser/slick.remotemodel-yahoo.js
new file mode 100644
index 00000000..60493d88
--- /dev/null
+++ b/dist/browser/slick.remotemodel-yahoo.js
@@ -0,0 +1,93 @@
+"use strict";
+(() => {
+ // src/slick.remotemodel-yahoo.js
+ (function($) {
+ function RemoteModel() {
+ var PAGESIZE = 10, data = { length: 0 }, h_request = null, req = null, onDataLoading = new Slick.Event(), onDataLoaded = new Slick.Event();
+ function init() {
+ }
+ function isDataLoaded(from, to) {
+ for (var i = from; i <= to; i++)
+ if (data[i] == null || data[i] == null)
+ return !1;
+ return !0;
+ }
+ function clear() {
+ for (var key in data)
+ delete data[key];
+ data.length = 0;
+ }
+ function ensureData(from, to) {
+ if (req) {
+ req.abort();
+ for (var i = req.fromPage; i <= req.toPage; i++)
+ data[i * PAGESIZE] = void 0;
+ }
+ from < 0 && (from = 0), data.length > 0 && (to = Math.min(to, data.length - 1));
+ for (var fromPage = Math.floor(from / PAGESIZE), toPage = Math.floor(to / PAGESIZE); data[fromPage * PAGESIZE] !== void 0 && fromPage < toPage; )
+ fromPage++;
+ for (; data[toPage * PAGESIZE] !== void 0 && fromPage < toPage; )
+ toPage--;
+ if (fromPage > toPage || fromPage == toPage && data[fromPage * PAGESIZE] !== void 0) {
+ onDataLoaded.notify({ from, to });
+ return;
+ }
+ var recStart = fromPage * PAGESIZE, recCount = (toPage - fromPage) * PAGESIZE + PAGESIZE, url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20rss(" + recStart + "%2C" + recCount + ")%20where%20url%3D%22http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%22&format=json";
+ h_request != null && clearTimeout(h_request), h_request = setTimeout(function() {
+ for (var i2 = fromPage; i2 <= toPage; i2++)
+ data[i2 * PAGESIZE] = null;
+ onDataLoading.notify({ from, to }), req = $.jsonp({
+ url,
+ callbackParameter: "callback",
+ cache: !0,
+ success: function(json, textStatus, xOptions) {
+ onSuccess(json, recStart);
+ },
+ error: function() {
+ onError(fromPage, toPage);
+ }
+ }), req.fromPage = fromPage, req.toPage = toPage;
+ }, 50);
+ }
+ function onError(fromPage, toPage) {
+ alert("error loading pages " + fromPage + " to " + toPage);
+ }
+ function onSuccess(json, recStart) {
+ var recEnd = recStart;
+ if (json.query.count > 0) {
+ var results = json.query.results.item;
+ recEnd = recStart + results.length, data.length = 100;
+ for (var i = 0; i < results.length; i++) {
+ var item = results[i];
+ item.pubDate = new Date(item.pubDate), data[recStart + i] = { index: recStart + i }, data[recStart + i].pubDate = item.pubDate, data[recStart + i].title = item.title, data[recStart + i].url = item.link, data[recStart + i].text = item.description;
+ }
+ }
+ req = null, onDataLoaded.notify({ from: recStart, to: recEnd });
+ }
+ function reloadData(from, to) {
+ for (var i = from; i <= to; i++)
+ delete data[i];
+ ensureData(from, to);
+ }
+ return {
+ // properties
+ data,
+ // methods
+ clear,
+ isDataLoaded,
+ ensureData,
+ reloadData,
+ // events
+ onDataLoading,
+ onDataLoaded
+ };
+ }
+ $.extend(!0, window, {
+ Slick: {
+ Data: {
+ RemoteModel
+ }
+ }
+ });
+ })(jQuery);
+})();
diff --git a/dist/browser/slick.remotemodel.js b/dist/browser/slick.remotemodel.js
new file mode 100644
index 00000000..e745ae7c
--- /dev/null
+++ b/dist/browser/slick.remotemodel.js
@@ -0,0 +1,96 @@
+"use strict";
+(() => {
+ // src/slick.remotemodel.js
+ (function($) {
+ function RemoteModel() {
+ var PAGESIZE = 50, data = { length: 0 }, searchstr = "", sortcol = null, sortdir = 1, h_request = null, req = null, onDataLoading = new Slick.Event(), onDataLoaded = new Slick.Event();
+ function init() {
+ }
+ function isDataLoaded(from, to) {
+ for (var i = from; i <= to; i++)
+ if (data[i] == null || data[i] == null)
+ return !1;
+ return !0;
+ }
+ function clear() {
+ for (var key in data)
+ delete data[key];
+ data.length = 0;
+ }
+ function ensureData(from, to) {
+ if (req) {
+ req.abort();
+ for (var i = req.fromPage; i <= req.toPage; i++)
+ data[i * PAGESIZE] = void 0;
+ }
+ from < 0 && (from = 0), data.length > 0 && (to = Math.min(to, data.length - 1));
+ for (var fromPage = Math.floor(from / PAGESIZE), toPage = Math.floor(to / PAGESIZE); data[fromPage * PAGESIZE] !== void 0 && fromPage < toPage; )
+ fromPage++;
+ for (; data[toPage * PAGESIZE] !== void 0 && fromPage < toPage; )
+ toPage--;
+ if (fromPage > toPage || fromPage == toPage && data[fromPage * PAGESIZE] !== void 0) {
+ onDataLoaded.notify({ from, to });
+ return;
+ }
+ var url = "http://octopart.com/api/v3/parts/search?apikey=68b25f31&include[]=short_description&show[]=uid&show[]=manufacturer&show[]=mpn&show[]=brand&show[]=octopart_url&show[]=short_description&q=" + searchstr + "&start=" + fromPage * PAGESIZE + "&limit=" + ((toPage - fromPage) * PAGESIZE + PAGESIZE);
+ sortcol != null && (url += "&sortby=" + sortcol + (sortdir > 0 ? "+asc" : "+desc")), h_request != null && clearTimeout(h_request), h_request = setTimeout(function() {
+ for (var i2 = fromPage; i2 <= toPage; i2++)
+ data[i2 * PAGESIZE] = null;
+ onDataLoading.notify({ from, to }), req = $.jsonp({
+ url,
+ callbackParameter: "callback",
+ cache: !0,
+ success: onSuccess,
+ error: function() {
+ onError(fromPage, toPage);
+ }
+ }), req.fromPage = fromPage, req.toPage = toPage;
+ }, 50);
+ }
+ function onError(fromPage, toPage) {
+ alert("error loading pages " + fromPage + " to " + toPage);
+ }
+ function onSuccess(resp) {
+ var from = resp.request.start, to = from + resp.results.length;
+ data.length = Math.min(parseInt(resp.hits), 1e3);
+ for (var i = 0; i < resp.results.length; i++) {
+ var item = resp.results[i].item;
+ data[from + i] = item, data[from + i].index = from + i;
+ }
+ req = null, onDataLoaded.notify({ from, to });
+ }
+ function reloadData(from, to) {
+ for (var i = from; i <= to; i++)
+ delete data[i];
+ ensureData(from, to);
+ }
+ function setSort(column, dir) {
+ sortcol = column, sortdir = dir, clear();
+ }
+ function setSearch(str) {
+ searchstr = str, clear();
+ }
+ return {
+ // properties
+ data,
+ // methods
+ clear,
+ isDataLoaded,
+ ensureData,
+ reloadData,
+ setSort,
+ setSearch,
+ // events
+ onDataLoading,
+ onDataLoaded
+ };
+ }
+ $.extend(!0, window, {
+ Slick: {
+ Data: {
+ RemoteModel
+ }
+ }
+ });
+ })(jQuery);
+})();
diff --git a/dist/browser/sortable-shim.js b/dist/browser/sortable-shim.js
new file mode 100644
index 00000000..57155b67
--- /dev/null
+++ b/dist/browser/sortable-shim.js
@@ -0,0 +1,29 @@
+"use strict";
+(() => {
+ var __getOwnPropNames = Object.getOwnPropertyNames;
+ var __commonJS = (cb, mod) => function() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+ };
+
+ // import-ns:sortablejs.js
+ var require_sortablejs = __commonJS({
+ "import-ns:sortablejs.js"() {
+ }
+ });
+
+ // import-ns:https://cdn.jsdelivr.net/npm/sortablejs/Sortable.min.js.js
+ var require_Sortable_min_js = __commonJS({
+ "import-ns:https://cdn.jsdelivr.net/npm/sortablejs/Sortable.min.js.js"() {
+ }
+ });
+
+ // src/sortable-shim.js
+ var require_sortable_shim = __commonJS({
+ "src/sortable-shim.js"(exports, module) {
+ var Sortable = require_sortablejs();
+ console.log("sortable shim");
+ module.exports = window.Sortable | require_Sortable_min_js();
+ }
+ });
+ require_sortable_shim();
+})();
diff --git a/dist/cjs/index.js b/dist/cjs/index.js
new file mode 100644
index 00000000..e824ac13
--- /dev/null
+++ b/dist/cjs/index.js
@@ -0,0 +1,7528 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: !0 });
+}, __copyProps = (to, from, except, desc) => {
+ if (from && typeof from == "object" || typeof from == "function")
+ for (let key of __getOwnPropNames(from))
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+ Aggregators: () => Aggregators,
+ AvgAggregator: () => AvgAggregator,
+ BindingEventService: () => BindingEventService,
+ CellCopyManager: () => CellCopyManager,
+ CellExternalCopyManager: () => CellExternalCopyManager,
+ CellMenu: () => CellMenu,
+ CellRangeDecorator: () => CellRangeDecorator,
+ CellRangeSelector: () => CellRangeSelector,
+ CellSelectionModel: () => CellSelectionModel,
+ CheckboxEditor: () => CheckboxEditor,
+ CheckboxFormatter: () => CheckboxFormatter,
+ CheckboxSelectColumn: () => CheckboxSelectColumn,
+ CheckmarkFormatter: () => CheckmarkFormatter,
+ ColAutosizeMode: () => ColAutosizeMode,
+ CompositeEditor: () => CompositeEditor,
+ ContextMenu: () => ContextMenu,
+ CountAggregator: () => CountAggregator,
+ CrossGridRowMoveManager: () => CrossGridRowMoveManager,
+ CustomTooltip: () => CustomTooltip,
+ DataView: () => DataView,
+ Draggable: () => Draggable,
+ DraggableGrouping: () => DraggableGrouping,
+ EditorLock: () => EditorLock,
+ Editors: () => Editors,
+ Event: () => Event,
+ EventData: () => EventData,
+ EventHandler: () => EventHandler,
+ FlatpickrEditor: () => FlatpickrEditor,
+ FloatEditor: () => FloatEditor,
+ Formatters: () => Formatters,
+ GlobalEditorLock: () => GlobalEditorLock,
+ GridAutosizeColsMode: () => GridAutosizeColsMode,
+ Group: () => Group,
+ GroupItemMetadataProvider: () => GroupItemMetadataProvider,
+ GroupTotals: () => GroupTotals,
+ HeaderButtons: () => HeaderButtons,
+ HeaderMenu: () => HeaderMenu,
+ IntegerEditor: () => IntegerEditor,
+ LongTextEditor: () => LongTextEditor,
+ MaxAggregator: () => MaxAggregator,
+ MinAggregator: () => MinAggregator,
+ MouseWheel: () => MouseWheel,
+ NonDataItem: () => NonDataItem,
+ PercentCompleteBarFormatter: () => PercentCompleteBarFormatter,
+ PercentCompleteEditor: () => PercentCompleteEditor,
+ PercentCompleteFormatter: () => PercentCompleteFormatter,
+ Range: () => Range,
+ Resizable: () => Resizable,
+ Resizer: () => Resizer,
+ RowDetailView: () => RowDetailView,
+ RowMoveManager: () => RowMoveManager,
+ RowSelectionMode: () => RowSelectionMode,
+ RowSelectionModel: () => RowSelectionModel,
+ SlickAutoTooltips: () => SlickAutoTooltips,
+ SlickColumnPicker: () => SlickColumnPicker,
+ SlickGrid: () => SlickGrid,
+ SlickGridMenu: () => SlickGridMenu,
+ SlickGridPager: () => SlickGridPager,
+ State: () => State,
+ SumAggregator: () => SumAggregator,
+ TextEditor: () => TextEditor,
+ Utils: () => Utils,
+ ValueFilterMode: () => ValueFilterMode,
+ WidthEvalMode: () => WidthEvalMode,
+ YesNoFormatter: () => YesNoFormatter,
+ YesNoSelectEditor: () => YesNoSelectEditor,
+ keyCode: () => keyCode,
+ preClickClassName: () => preClickClassName
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/slick.core.js
+function EventData(event, args) {
+ this.event = event;
+ let nativeEvent = event, arguments_ = args, isPropagationStopped = !1, isImmediatePropagationStopped = !1, isDefaultPrevented = !1, returnValues = [], returnValue;
+ if (event) {
+ let eventProps = [
+ "altKey",
+ "ctrlKey",
+ "metaKey",
+ "shiftKey",
+ "key",
+ "keyCode",
+ "clientX",
+ "clientY",
+ "offsetX",
+ "offsetY",
+ "pageX",
+ "pageY",
+ "bubbles",
+ "type",
+ "which",
+ "x",
+ "y"
+ ];
+ for (let key of eventProps)
+ this[key] = event[key];
+ }
+ this.target = nativeEvent ? nativeEvent.target : void 0, this.stopPropagation = function() {
+ isPropagationStopped = !0, nativeEvent && nativeEvent.stopPropagation();
+ }, this.isPropagationStopped = function() {
+ return isPropagationStopped;
+ }, this.stopImmediatePropagation = function() {
+ isImmediatePropagationStopped = !0, nativeEvent && nativeEvent.stopImmediatePropagation();
+ }, this.isImmediatePropagationStopped = function() {
+ return isImmediatePropagationStopped;
+ }, this.getNativeEvent = function() {
+ return nativeEvent;
+ }, this.preventDefault = function() {
+ nativeEvent && nativeEvent.preventDefault(), isDefaultPrevented = !0;
+ }, this.isDefaultPrevented = function() {
+ return nativeEvent ? nativeEvent.defaultPrevented : isDefaultPrevented;
+ }, this.addReturnValue = function(value) {
+ returnValues.push(value), returnValue === void 0 && value !== void 0 && (returnValue = value);
+ }, this.getReturnValue = function() {
+ return returnValue;
+ }, this.getArguments = function() {
+ return arguments_;
+ };
+}
+function Event() {
+ var handlers = [];
+ this.subscribe = function(fn) {
+ handlers.push(fn);
+ }, this.unsubscribe = function(fn) {
+ for (var i2 = handlers.length - 1; i2 >= 0; i2--)
+ handlers[i2] === fn && handlers.splice(i2, 1);
+ }, this.notify = function(args, e, scope) {
+ e instanceof EventData || (e = new EventData(e, args)), scope = scope || this;
+ for (var i2 = 0; i2 < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i2++) {
+ let returnValue = handlers[i2].call(scope, e, args);
+ e.addReturnValue(returnValue);
+ }
+ return e;
+ };
+}
+function EventHandler() {
+ var handlers = [];
+ this.subscribe = function(event, handler) {
+ return handlers.push({
+ event,
+ handler
+ }), event.subscribe(handler), this;
+ }, this.unsubscribe = function(event, handler) {
+ for (var i2 = handlers.length; i2--; )
+ if (handlers[i2].event === event && handlers[i2].handler === handler) {
+ handlers.splice(i2, 1), event.unsubscribe(handler);
+ return;
+ }
+ return this;
+ }, this.unsubscribeAll = function() {
+ for (var i2 = handlers.length; i2--; )
+ handlers[i2].event.unsubscribe(handlers[i2].handler);
+ return handlers = [], this;
+ };
+}
+function Range(fromRow, fromCell, toRow, toCell) {
+ toRow === void 0 && toCell === void 0 && (toRow = fromRow, toCell = fromCell), this.fromRow = Math.min(fromRow, toRow), this.fromCell = Math.min(fromCell, toCell), this.toRow = Math.max(fromRow, toRow), this.toCell = Math.max(fromCell, toCell), this.isSingleRow = function() {
+ return this.fromRow == this.toRow;
+ }, this.isSingleCell = function() {
+ return this.fromRow == this.toRow && this.fromCell == this.toCell;
+ }, this.contains = function(row, cell) {
+ return row >= this.fromRow && row <= this.toRow && cell >= this.fromCell && cell <= this.toCell;
+ }, this.toString = function() {
+ return this.isSingleCell() ? "(" + this.fromRow + ":" + this.fromCell + ")" : "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";
+ };
+}
+function NonDataItem() {
+ this.__nonDataRow = !0;
+}
+function Group() {
+ this.__group = !0, this.level = 0, this.count = 0, this.value = null, this.title = null, this.collapsed = !1, this.selectChecked = !1, this.totals = null, this.rows = [], this.groups = null, this.groupingKey = null;
+}
+Group.prototype = new NonDataItem();
+Group.prototype.equals = function(group) {
+ return this.value === group.value && this.count === group.count && this.collapsed === group.collapsed && this.title === group.title;
+};
+function GroupTotals() {
+ this.__groupTotals = !0, this.group = null, this.initialized = !1;
+}
+GroupTotals.prototype = new NonDataItem();
+function EditorLock() {
+ var activeEditController = null;
+ this.isActive = function(editController) {
+ return editController ? activeEditController === editController : activeEditController !== null;
+ }, this.activate = function(editController) {
+ if (editController !== activeEditController) {
+ if (activeEditController !== null)
+ throw new Error("SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController");
+ if (!editController.commitCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()");
+ if (!editController.cancelCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()");
+ activeEditController = editController;
+ }
+ }, this.deactivate = function(editController) {
+ if (activeEditController) {
+ if (activeEditController !== editController)
+ throw new Error("SlickGrid.EditorLock.deactivate: specified editController is not the currently active one");
+ activeEditController = null;
+ }
+ }, this.commitCurrentEdit = function() {
+ return activeEditController ? activeEditController.commitCurrentEdit() : !0;
+ }, this.cancelCurrentEdit = function() {
+ return activeEditController ? activeEditController.cancelCurrentEdit() : !0;
+ };
+}
+function regexSanitizer(dirtyHtml) {
+ return dirtyHtml.replace(/(\b)(on[a-z]+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(<)(\/*)(script|script defer)(.*)(>|>">)/gi, "");
+}
+function calculateAvailableSpace(element) {
+ let bottom = 0, top = 0, left = 0, right = 0, windowHeight = window.innerHeight || 0, windowWidth = window.innerWidth || 0, scrollPosition = windowScrollPosition(), pageScrollTop = scrollPosition.top, pageScrollLeft = scrollPosition.left, elmOffset = offset(element);
+ if (elmOffset) {
+ let elementOffsetTop = elmOffset.top || 0, elementOffsetLeft = elmOffset.left || 0;
+ top = elementOffsetTop - pageScrollTop, bottom = windowHeight - (elementOffsetTop - pageScrollTop), left = elementOffsetLeft - pageScrollLeft, right = windowWidth - (elementOffsetLeft - pageScrollLeft);
+ }
+ return { top, bottom, left, right };
+}
+function createDomElement(tagName, elementOptions, appendToParent) {
+ let elm = document.createElement(tagName);
+ return elementOptions && Object.keys(elementOptions).forEach((elmOptionKey) => {
+ let elmValue = elementOptions[elmOptionKey];
+ typeof elmValue == "object" ? Object.assign(elm[elmOptionKey], elmValue) : elm[elmOptionKey] = elementOptions[elmOptionKey];
+ }), appendToParent && appendToParent.appendChild && appendToParent.appendChild(elm), elm;
+}
+function debounce(callback, wait) {
+ let timeoutId = null;
+ return (...args) => {
+ wait >= 0 ? (clearTimeout(timeoutId), timeoutId = setTimeout(() => callback.apply(null, args), wait)) : callback.apply(null);
+ };
+}
+function emptyElement(element) {
+ if (element && element.firstChild)
+ for (; element.firstChild; )
+ element.lastChild && element.removeChild(element.lastChild);
+ return element;
+}
+function innerSize(elm, type) {
+ let size = 0;
+ if (elm) {
+ let clientSize = type === "height" ? "clientHeight" : "clientWidth", sides = type === "height" ? ["top", "bottom"] : ["left", "right"];
+ size = elm[clientSize];
+ for (let side of sides) {
+ let sideSize = parseFloat(getElementProp(elm, `padding-${side}`)) || 0;
+ size -= sideSize;
+ }
+ }
+ return size;
+}
+function getElementProp(elm, property) {
+ return elm && elm.getComputedStyle ? window.getComputedStyle(elm, null).getPropertyValue(property) : null;
+}
+function isEmptyObject(obj) {
+ return obj == null ? !0 : Object.entries(obj).length === 0;
+}
+function noop() {
+}
+function offset(el) {
+ if (!el || !el.getBoundingClientRect)
+ return;
+ let box = el.getBoundingClientRect(), docElem = document.documentElement;
+ return {
+ top: box.top + window.pageYOffset - docElem.clientTop,
+ left: box.left + window.pageXOffset - docElem.clientLeft
+ };
+}
+function windowScrollPosition() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+}
+function width(el, value) {
+ if (!(!el || !el.getBoundingClientRect)) {
+ if (value === void 0)
+ return el.getBoundingClientRect().width;
+ setStyleSize(el, "width", value);
+ }
+}
+function height(el, value) {
+ if (el) {
+ if (value === void 0)
+ return el.getBoundingClientRect().height;
+ setStyleSize(el, "height", value);
+ }
+}
+function setStyleSize(el, style, val) {
+ typeof val == "function" ? val = val() : typeof val == "string" ? el.style[style] = val : el.style[style] = val + "px";
+}
+function contains(parent, child) {
+ return !parent || !child ? !1 : !parents(child).every(function(p) {
+ return parent != p;
+ });
+}
+function isHidden(el) {
+ return el.offsetWidth === 0 && el.offsetHeight === 0;
+}
+function parents(el, selector) {
+ let parents2 = [], visible = selector == ":visible", hidden = selector == ":hidden";
+ for (; (el = el.parentNode) && el !== document && !(!el || !el.parentNode); )
+ hidden ? isHidden(el) && parents2.push(el) : visible ? isHidden(el) || parents2.push(el) : (!selector || el.matches(selector)) && parents2.push(el);
+ return parents2;
+}
+function toFloat(value) {
+ var x = parseFloat(value);
+ return isNaN(x) ? 0 : x;
+}
+function show(el, type) {
+ type = type || "", Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = type;
+ }) : el.style.display = type;
+}
+function hide(el) {
+ Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = "none";
+ }) : el.style.display = "none";
+}
+function slideUp(el, callback) {
+ return slideAnimation(el, "slideUp", callback);
+}
+function slideDown(el, callback) {
+ return slideAnimation(el, "slideDown", callback);
+}
+function slideAnimation(el, slideDirection, callback) {
+ if (window.jQuery !== void 0) {
+ window.jQuery(el)[slideDirection]("fast", callback);
+ return;
+ }
+ slideDirection === "slideUp" ? hide(el) : show(el), callback();
+}
+var getProto = Object.getPrototypeOf, class2type = {}, toString = class2type.toString, hasOwn = class2type.hasOwnProperty, fnToString = hasOwn.toString, ObjectFunctionString = fnToString.call(Object);
+function isFunction(obj) {
+ return typeof obj == "function" && typeof obj.nodeType != "number" && typeof obj.item != "function";
+}
+function isPlainObject(obj) {
+ var proto, Ctor;
+ return !obj || toString.call(obj) !== "[object Object]" ? !1 : (proto = getProto(obj), proto ? (Ctor = hasOwn.call(proto, "constructor") && proto.constructor, typeof Ctor == "function" && fnToString.call(Ctor) === ObjectFunctionString) : !0);
+}
+function extend() {
+ var options, name, src, copy, copyIsArray, clone, target = arguments[0], i2 = 1, length = arguments.length, deep = !1;
+ for (typeof target == "boolean" ? (deep = target, target = arguments[i2] || {}, i2++) : target = target || {}, typeof target != "object" && !isFunction(target) && (target = {}), i2 === length && (target = this, i2--); i2 < length; i2++)
+ if ((options = arguments[i2]) != null)
+ for (name in options)
+ copy = options[name], !(name === "__proto__" || target === copy) && (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy))) ? (src = target[name], copyIsArray && !Array.isArray(src) ? clone = [] : !copyIsArray && !isPlainObject(src) ? clone = {} : clone = src, copyIsArray = !1, target[name] = extend(deep, clone, copy)) : copy !== void 0 && (target[name] = copy));
+ return target;
+}
+function BindingEventService() {
+ this.boundedEvents = [], this.destroy = function() {
+ this.unbindAll(), this.boundedEvents = [];
+ }, this.bind = function(element, eventName, listener, options) {
+ element.addEventListener(eventName, listener, options), this.boundedEvents.push({ element, eventName, listener });
+ }, this.unbind = function(element, eventName, listener) {
+ element && element.removeEventListener && element.removeEventListener(eventName, listener);
+ }, this.unbindByEventName = function(element, eventName) {
+ let boundedEvent = this.boundedEvents.find((e) => e.element === element && e.eventName === eventName);
+ boundedEvent && this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);
+ }, this.unbindAll = function() {
+ for (; this.boundedEvents.length > 0; ) {
+ let boundedEvent = this.boundedEvents.pop(), { element, eventName, listener } = boundedEvent;
+ this.unbind(element, eventName, listener);
+ }
+ };
+}
+var SlickCore = {
+ // "Event": Event,
+ // "EventData": EventData,
+ // "EventHandler": EventHandler,
+ // "Range": Range,
+ // "NonDataRow": NonDataItem,
+ // "Group": Group,
+ // "GroupTotals": GroupTotals,
+ // "EditorLock": EditorLock,
+ RegexSanitizer: regexSanitizer,
+ // "BindingEventService": BindingEventService,
+ Utils: {
+ debounce,
+ extend,
+ calculateAvailableSpace,
+ createDomElement,
+ emptyElement,
+ innerSize,
+ isEmptyObject,
+ noop,
+ offset,
+ height,
+ width,
+ setStyleSize,
+ contains,
+ toFloat,
+ parents,
+ show,
+ hide,
+ slideUp,
+ slideDown,
+ storage: {
+ // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati
+ _storage: /* @__PURE__ */ new WeakMap(),
+ put: function(element, key, obj) {
+ this._storage.has(element) || this._storage.set(element, /* @__PURE__ */ new Map()), this._storage.get(element).set(key, obj);
+ },
+ get: function(element, key) {
+ let el = this._storage.get(element);
+ return el ? el.get(key) : null;
+ },
+ remove: function(element, key) {
+ var ret = this._storage.get(element).delete(key);
+ return !this._storage.get(element).size === 0 && this._storage.delete(element), ret;
+ }
+ }
+ },
+ /***
+ * A global singleton editor lock.
+ * @class GlobalEditorLock
+ * @static
+ * @constructor
+ */
+ GlobalEditorLock: new EditorLock(),
+ keyCode: {
+ SPACE: 8,
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ RIGHT: 39,
+ TAB: 9,
+ UP: 38,
+ A: 65
+ },
+ preClickClassName: "slick-edit-preclick",
+ GridAutosizeColsMode: {
+ None: "NOA",
+ LegacyOff: "LOF",
+ LegacyForceFit: "LFF",
+ IgnoreViewport: "IGV",
+ FitColsToViewport: "FCV",
+ FitViewportToCols: "FVC"
+ },
+ ColAutosizeMode: {
+ Locked: "LCK",
+ Guide: "GUI",
+ Content: "CON",
+ ContentExpandOnly: "CXO",
+ ContentIntelligent: "CTI"
+ },
+ RowSelectionMode: {
+ FirstRow: "FS1",
+ FirstNRows: "FSN",
+ AllRows: "ALL",
+ LastRow: "LS1"
+ },
+ ValueFilterMode: {
+ None: "NONE",
+ DeDuplicate: "DEDP",
+ GetGreatestAndSub: "GR8T",
+ GetLongestTextAndSub: "LNSB",
+ GetLongestText: "LNSC"
+ },
+ WidthEvalMode: {
+ Auto: "AUTO",
+ TextOnly: "CANV",
+ HTML: "HTML"
+ }
+}, {
+ Utils,
+ GlobalEditorLock,
+ keyCode,
+ preClickClassName,
+ GridAutosizeColsMode,
+ ColAutosizeMode,
+ RowSelectionMode,
+ ValueFilterMode,
+ WidthEvalMode
+} = SlickCore;
+
+// src/slick.compositeeditor.js
+function CompositeEditor(columns, containers, options) {
+ var defaultOptions = {
+ modalType: "edit",
+ // available type (create, edit, mass)
+ validationFailedMsg: "Some of the fields have failed validation",
+ validationMsgPrefix: null,
+ show: null,
+ hide: null,
+ position: null,
+ destroy: null,
+ formValues: {},
+ editors: {}
+ }, noop2 = function() {
+ }, firstInvalidEditor;
+ options = Slick.Utils.extend({}, defaultOptions, options);
+ function getContainerBox(i2) {
+ var c = containers[i2], offset2 = Slick.Utils.offset(c), w = Slick.Utils.width(c), h = Slick.Utils.height(c);
+ return {
+ top: offset2 && offset2.top,
+ left: offset2 && offset2.left,
+ bottom: offset2 && offset2.top + h,
+ right: offset2 && offset2.left + w,
+ width: w,
+ height: h,
+ visible: !0
+ };
+ }
+ function editor(args) {
+ var editors = [];
+ function init() {
+ for (var newArgs = {}, idx = 0; idx < columns.length; ) {
+ if (columns[idx].editor) {
+ var column = columns[idx];
+ newArgs = Slick.Utils.extend(!1, {}, args), newArgs.container = containers[idx], newArgs.column = column, newArgs.position = getContainerBox(idx), newArgs.commitChanges = noop2, newArgs.cancelChanges = noop2, newArgs.compositeEditorOptions = options, newArgs.formValues = {};
+ var currentEditor = new column.editor(newArgs);
+ options.editors[column.id] = currentEditor, editors.push(currentEditor);
+ }
+ idx++;
+ }
+ setTimeout(function() {
+ Array.isArray(editors) && editors.length > 0 && editors[0].focus && editors[0].focus();
+ }, 0);
+ }
+ this.destroy = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].destroy(), idx++;
+ options.destroy && options.destroy(), editors = [];
+ }, this.focus = function() {
+ (firstInvalidEditor || editors[0]).focus();
+ }, this.isValueChanged = function() {
+ for (var idx = 0; idx < editors.length; ) {
+ if (editors[idx].isValueChanged())
+ return !0;
+ idx++;
+ }
+ return !1;
+ }, this.serializeValue = function() {
+ for (var serializedValue = [], idx = 0; idx < editors.length; )
+ serializedValue[idx] = editors[idx].serializeValue(), idx++;
+ return serializedValue;
+ }, this.applyValue = function(item, state) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].applyValue(item, state[idx]), idx++;
+ }, this.loadValue = function(item) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].loadValue(item), idx++;
+ }, this.validate = function(target) {
+ var validationResults, errors = [], targetElm = target || null;
+ firstInvalidEditor = null;
+ for (var idx = 0; idx < editors.length; ) {
+ var columnDef = editors[idx].args && editors[idx].args.column || {};
+ if (columnDef) {
+ var validationElm = document.querySelector(".item-details-validation.editor-" + columnDef.id), labelElm = document.querySelector(".item-details-label.editor-" + columnDef.id), editorElm = document.querySelector("[data-editorid=" + columnDef.id + "]"), validationMsgPrefix = options && options.validationMsgPrefix || "";
+ (!targetElm || Slick.Utils.contains(editorElm, targetElm)) && (validationResults = editors[idx].validate(), validationResults.valid ? validationElm && (validationElm.textContent = "", editorElm.classList.remove("invalid"), labelElm.classList.remove("invalid")) : (firstInvalidEditor = editors[idx], errors.push({
+ index: idx,
+ editor: editors[idx],
+ container: containers[idx],
+ msg: validationResults.msg
+ }), validationElm && (validationElm.textContent = validationMsgPrefix + validationResults.msg, labelElm.classList.add("invalid"), editorElm.classList.add("invalid")))), validationElm = null, labelElm = null, editorElm = null;
+ }
+ idx++;
+ }
+ return targetElm = null, errors.length ? {
+ valid: !1,
+ msg: options.validationFailedMsg,
+ errors
+ } : {
+ valid: !0,
+ msg: ""
+ };
+ }, this.hide = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].hide && editors[idx].hide(), idx++;
+ options.hide && options.hide();
+ }, this.show = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].show && editors[idx].show(), idx++;
+ options.show && options.show();
+ }, this.position = function(box) {
+ options.position && options.position(box);
+ }, init();
+ }
+ return editor.prototype = this, editor;
+}
+
+// src/slick.groupitemmetadataprovider.js
+var Group2 = Group, keyCode2 = keyCode, Utils2 = Utils;
+function GroupItemMetadataProvider(inputOptions) {
+ var _grid, _defaults = {
+ checkboxSelect: !1,
+ checkboxSelectCssClass: "slick-group-select-checkbox",
+ checkboxSelectPlugin: null,
+ groupCssClass: "slick-group",
+ groupTitleCssClass: "slick-group-title",
+ totalsCssClass: "slick-group-totals",
+ groupFocusable: !0,
+ totalsFocusable: !1,
+ toggleCssClass: "slick-group-toggle",
+ toggleExpandedCssClass: "expanded",
+ toggleCollapsedCssClass: "collapsed",
+ enableExpandCollapse: !0,
+ groupFormatter: defaultGroupCellFormatter,
+ totalsFormatter: defaultTotalsCellFormatter,
+ includeHeaderTotals: !1
+ }, options = Utils2.extend(!0, {}, _defaults, inputOptions);
+ function getOptions() {
+ return options;
+ }
+ function setOptions(inputOptions2) {
+ Utils2.extend(!0, options, inputOptions2);
+ }
+ function defaultGroupCellFormatter(row, cell, value, columnDef, item, grid) {
+ if (!options.enableExpandCollapse)
+ return item.title;
+ var indentation = item.level * 15 + "px";
+ return (options.checkboxSelect ? ' ' : "") + "" + item.title + " ";
+ }
+ function defaultTotalsCellFormatter(row, cell, value, columnDef, item, grid) {
+ return columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef, grid) || "";
+ }
+ function init(grid) {
+ _grid = grid, _grid.onClick.subscribe(handleGridClick), _grid.onKeyDown.subscribe(handleGridKeyDown);
+ }
+ function destroy() {
+ _grid && (_grid.onClick.unsubscribe(handleGridClick), _grid.onKeyDown.unsubscribe(handleGridKeyDown));
+ }
+ function handleGridClick(e, args) {
+ var target = e.target, item = this.getDataItem(args.row);
+ if (item && item instanceof Group2 && target.classList.contains(options.toggleCssClass || "")) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ if (item && item instanceof Group2 && target.classList.contains(options.checkboxSelectCssClass)) {
+ item.selectChecked = !item.selectChecked, target.classList.remove(item.selectChecked ? "unchecked" : "checked"), target.classList.add(item.selectChecked ? "checked" : "unchecked");
+ var rowIndexes = _grid.getData().mapItemsToRows(item.rows);
+ (item.selectChecked ? options.checkboxSelectPlugin.selectRows : options.checkboxSelectPlugin.deSelectRows)(rowIndexes);
+ }
+ }
+ function handleGridKeyDown(e, args) {
+ if (options.enableExpandCollapse && e.which == keyCode2.SPACE) {
+ var activeCell = this.getActiveCell();
+ if (activeCell) {
+ var item = this.getDataItem(activeCell.row);
+ if (item && item instanceof Group2) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ }
+ }
+ }
+ function getGroupRowMetadata(item) {
+ var groupLevel = item && item.level;
+ return {
+ selectable: !1,
+ focusable: options.groupFocusable,
+ cssClasses: options.groupCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.includeHeaderTotals && options.totalsFormatter,
+ columns: {
+ 0: {
+ colspan: options.includeHeaderTotals ? "1" : "*",
+ formatter: options.groupFormatter,
+ editor: null
+ }
+ }
+ };
+ }
+ function getTotalsRowMetadata(item) {
+ var groupLevel = item && item.group && item.group.level;
+ return {
+ selectable: !1,
+ focusable: options.totalsFocusable,
+ cssClasses: options.totalsCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.totalsFormatter,
+ editor: null
+ };
+ }
+ return {
+ init,
+ destroy,
+ getGroupRowMetadata,
+ getTotalsRowMetadata,
+ getOptions,
+ setOptions
+ };
+}
+
+// src/slick.dataview.js
+var SlickEvent = Event, EventData2 = EventData, Group3 = Group, GroupTotals2 = GroupTotals, Utils3 = Utils, GroupItemMetadataProvider2 = GroupItemMetadataProvider;
+function DataView(options) {
+ var self = this, defaults2 = {
+ groupItemMetadataProvider: null,
+ inlineFilters: !1
+ }, idProperty = "id", items = [], rows = [], idxById = /* @__PURE__ */ new Map(), rowsById = null, filter = null, updated = null, suspend = !1, isBulkSuspend = !1, bulkDeleteIds = /* @__PURE__ */ new Map(), sortAsc = !0, fastSortField, sortComparer, refreshHints = {}, prevRefreshHints = {}, filterArgs, filteredItems = [], compiledFilter, compiledFilterWithCaching, filterCache = [], _grid = null, groupingInfoDefaults = {
+ getter: null,
+ formatter: null,
+ comparer: function(a, b) {
+ return a.value === b.value ? 0 : a.value > b.value ? 1 : -1;
+ },
+ predefinedValues: [],
+ aggregators: [],
+ aggregateEmpty: !1,
+ aggregateCollapsed: !1,
+ aggregateChildGroups: !1,
+ collapsed: !1,
+ displayTotalsRow: !0,
+ lazyTotalsCalculation: !1
+ }, groupingInfos = [], groups = [], toggledGroupsByLevel = [], groupingDelimiter = ":|:", selectedRowIds = null, preSelectedRowIdsChangeFn, pagesize = 0, pagenum = 0, totalRows = 0, onSelectedRowIdsChanged = new SlickEvent(), onSetItemsCalled = new SlickEvent(), onRowCountChanged = new SlickEvent(), onRowsChanged = new SlickEvent(), onRowsOrCountChanged = new SlickEvent(), onBeforePagingInfoChanged = new SlickEvent(), onPagingInfoChanged = new SlickEvent(), onGroupExpanded = new SlickEvent(), onGroupCollapsed = new SlickEvent();
+ options = Utils3.extend(!0, {}, defaults2, options);
+ function beginUpdate(bulkUpdate) {
+ suspend = !0, isBulkSuspend = bulkUpdate === !0;
+ }
+ function endUpdate() {
+ var wasBulkSuspend = isBulkSuspend;
+ isBulkSuspend = !1, suspend = !1, wasBulkSuspend && (processBulkDelete(), ensureIdUniqueness()), refresh();
+ }
+ function destroy() {
+ items = [], idxById = null, rowsById = null, filter = null, updated = null, sortComparer = null, filterCache = [], filteredItems = [], compiledFilter = null, compiledFilterWithCaching = null, _grid && _grid.onSelectedRowsChanged && _grid.onCellCssStylesChanged && (_grid.onSelectedRowsChanged.unsubscribe(), _grid.onCellCssStylesChanged.unsubscribe()), self.onRowsOrCountChanged && self.onRowsOrCountChanged.unsubscribe();
+ }
+ function setRefreshHints(hints) {
+ refreshHints = hints;
+ }
+ function setFilterArgs(args) {
+ filterArgs = args;
+ }
+ function processBulkDelete() {
+ if (idxById) {
+ for (var id, item, newIdx = 0, i2 = 0, l = items.length; i2 < l; i2++) {
+ if (item = items[i2], id = item[idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ bulkDeleteIds.has(id) ? idxById.delete(id) : (items[newIdx] = item, idxById.set(id, newIdx), ++newIdx);
+ }
+ items.length = newIdx, bulkDeleteIds = /* @__PURE__ */ new Map();
+ }
+ }
+ function updateIdxById(startingIndex) {
+ if (!(isBulkSuspend || !idxById)) {
+ startingIndex = startingIndex || 0;
+ for (var id, i2 = startingIndex, l = items.length; i2 < l; i2++) {
+ if (id = items[i2][idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ idxById.set(id, i2);
+ }
+ }
+ }
+ function ensureIdUniqueness() {
+ if (!(isBulkSuspend || !idxById)) {
+ for (var id, i2 = 0, l = items.length; i2 < l; i2++)
+ if (id = items[i2][idProperty], id === void 0 || idxById.get(id) !== i2)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ }
+ }
+ function getItems() {
+ return items;
+ }
+ function getIdPropertyName() {
+ return idProperty;
+ }
+ function setItems(data, objectIdProperty) {
+ objectIdProperty !== void 0 && (idProperty = objectIdProperty), items = filteredItems = data, onSetItemsCalled.notify({ idProperty: objectIdProperty, itemCount: items.length }, null, self), idxById = /* @__PURE__ */ new Map(), updateIdxById(), ensureIdUniqueness(), refresh();
+ }
+ function setPagingOptions(args) {
+ onBeforePagingInfoChanged.notify(getPagingInfo(), null, self).getReturnValue() !== !1 && (args.pageSize != null && (pagesize = args.pageSize, pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0), args.pageNum != null && (pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1))), onPagingInfoChanged.notify(getPagingInfo(), null, self), refresh());
+ }
+ function getPagingInfo() {
+ var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;
+ return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self };
+ }
+ function sort(comparer, ascending) {
+ sortAsc = ascending, sortComparer = comparer, fastSortField = null, ascending === !1 && items.reverse(), items.sort(comparer), ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function fastSort(field, ascending) {
+ sortAsc = ascending, fastSortField = field, sortComparer = null;
+ var oldToString = Object.prototype.toString;
+ Object.prototype.toString = typeof field == "function" ? field : function() {
+ return this[field];
+ }, ascending === !1 && items.reverse(), items.sort(), Object.prototype.toString = oldToString, ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function reSort() {
+ sortComparer ? sort(sortComparer, sortAsc) : fastSortField && fastSort(fastSortField, sortAsc);
+ }
+ function getFilteredItems() {
+ return filteredItems;
+ }
+ function getFilteredItemCount() {
+ return filteredItems.length;
+ }
+ function getFilter() {
+ return filter;
+ }
+ function setFilter(filterFn) {
+ filter = filterFn, options.inlineFilters && (compiledFilter = compileFilter(), compiledFilterWithCaching = compileFilterWithCaching()), refresh();
+ }
+ function getGrouping() {
+ return groupingInfos;
+ }
+ function setGrouping(groupingInfo) {
+ options.groupItemMetadataProvider || (options.groupItemMetadataProvider = new GroupItemMetadataProvider2()), groups = [], toggledGroupsByLevel = [], groupingInfo = groupingInfo || [], groupingInfos = groupingInfo instanceof Array ? groupingInfo : [groupingInfo];
+ for (var i2 = 0; i2 < groupingInfos.length; i2++) {
+ var gi = groupingInfos[i2] = Utils3.extend(!0, {}, groupingInfoDefaults, groupingInfos[i2]);
+ gi.getterIsAFn = typeof gi.getter == "function", gi.compiledAccumulators = [];
+ for (var idx = gi.aggregators.length; idx--; )
+ gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);
+ toggledGroupsByLevel[i2] = {};
+ }
+ refresh();
+ }
+ function groupBy(valueGetter, valueFormatter, sortComparer2) {
+ if (valueGetter == null) {
+ setGrouping([]);
+ return;
+ }
+ setGrouping({
+ getter: valueGetter,
+ formatter: valueFormatter,
+ comparer: sortComparer2
+ });
+ }
+ function setAggregators(groupAggregators, includeCollapsed) {
+ if (!groupingInfos.length)
+ throw new Error("[SlickGrid DataView] At least one grouping must be specified before calling setAggregators().");
+ groupingInfos[0].aggregators = groupAggregators, groupingInfos[0].aggregateCollapsed = includeCollapsed, setGrouping(groupingInfos);
+ }
+ function getItemByIdx(i2) {
+ return items[i2];
+ }
+ function getIdxById(id) {
+ return idxById && idxById.get(id);
+ }
+ function ensureRowsByIdCache() {
+ if (!rowsById) {
+ rowsById = {};
+ for (var i2 = 0, l = rows.length; i2 < l; i2++)
+ rowsById[rows[i2][idProperty]] = i2;
+ }
+ }
+ function getRowByItem(item) {
+ return ensureRowsByIdCache(), rowsById[item[idProperty]];
+ }
+ function getRowById(id) {
+ return ensureRowsByIdCache(), rowsById[id];
+ }
+ function getItemById(id) {
+ return items[idxById && idxById.get(id)];
+ }
+ function mapItemsToRows(itemArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i2 = 0, l = itemArray.length; i2 < l; i2++) {
+ var row = rowsById[itemArray[i2][idProperty]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapIdsToRows(idArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i2 = 0, l = idArray.length; i2 < l; i2++) {
+ var row = rowsById[idArray[i2]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapRowsToIds(rowArray) {
+ for (var ids = [], i2 = 0, l = rowArray.length; i2 < l; i2++)
+ if (rowArray[i2] < rows.length) {
+ let rowItem = rows[rowArray[i2]];
+ ids[ids.length] = rowItem && rowItem[idProperty];
+ }
+ return ids;
+ }
+ function updateSingleItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id))
+ throw new Error("[SlickGrid DataView] Invalid id");
+ if (id !== item[idProperty]) {
+ var newId = item[idProperty];
+ if (newId == null)
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a null id");
+ if (idxById.has(newId))
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a non-unique id");
+ idxById.set(newId, idxById.get(id)), idxById.delete(id), updated && updated[id] && delete updated[id], id = newId;
+ }
+ items[idxById.get(id)] = item, updated || (updated = {}), updated[id] = !0;
+ }
+ }
+ function updateItem(id, item) {
+ updateSingleItem(id, item), refresh();
+ }
+ function updateItems(ids, newItems) {
+ if (ids.length !== newItems.length)
+ throw new Error("[SlickGrid DataView] Mismatch on the length of ids and items provided to update");
+ for (var i2 = 0, l = newItems.length; i2 < l; i2++)
+ updateSingleItem(ids[i2], newItems[i2]);
+ refresh();
+ }
+ function insertItem(insertBefore, item) {
+ items.splice(insertBefore, 0, item), updateIdxById(insertBefore), refresh();
+ }
+ function insertItems(insertBefore, newItems) {
+ Array.prototype.splice.apply(items, [insertBefore, 0].concat(newItems)), updateIdxById(insertBefore), refresh();
+ }
+ function addItem(item) {
+ items.push(item), updateIdxById(items.length - 1), refresh();
+ }
+ function addItems(newItems) {
+ items = items.concat(newItems), updateIdxById(items.length - newItems.length), refresh();
+ }
+ function deleteItem(id) {
+ if (idxById)
+ if (isBulkSuspend)
+ bulkDeleteIds.set(id, !0);
+ else {
+ var idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), items.splice(idx, 1), updateIdxById(idx), refresh();
+ }
+ }
+ function deleteItems(ids) {
+ if (!(ids.length === 0 || !idxById))
+ if (isBulkSuspend)
+ for (var i2 = 0, l = ids.length; i2 < l; i2++) {
+ var id = ids[i2], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ bulkDeleteIds.set(id, !0);
+ }
+ else {
+ for (var indexesToDelete = [], i2 = 0, l = ids.length; i2 < l; i2++) {
+ var id = ids[i2], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), indexesToDelete.push(idx);
+ }
+ indexesToDelete.sort();
+ for (var i2 = indexesToDelete.length - 1; i2 >= 0; --i2)
+ items.splice(indexesToDelete[i2], 1);
+ updateIdxById(indexesToDelete[0]), refresh();
+ }
+ }
+ function sortedAddItem(item) {
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()");
+ insertItem(sortedIndex(item), item);
+ }
+ function sortedUpdateItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id) || id !== item[idProperty])
+ throw new Error("[SlickGrid DataView] Invalid or non-matching id " + idxById.get(id));
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()");
+ var oldItem = getItemById(id);
+ sortComparer(oldItem, item) !== 0 ? (deleteItem(id), sortedAddItem(item)) : updateItem(id, item);
+ }
+ }
+ function sortedIndex(searchItem) {
+ for (var low = 0, high = items.length; low < high; ) {
+ var mid = low + high >>> 1;
+ sortComparer(items[mid], searchItem) === -1 ? low = mid + 1 : high = mid;
+ }
+ return low;
+ }
+ function getItemCount() {
+ return items.length;
+ }
+ function getLength() {
+ return rows.length;
+ }
+ function getItem(i2) {
+ var item = rows[i2];
+ if (item && item.__group && item.totals && !item.totals.initialized) {
+ var gi = groupingInfos[item.level];
+ gi.displayTotalsRow || (calculateTotals(item.totals), item.title = gi.formatter ? gi.formatter(item) : item.value);
+ } else
+ item && item.__groupTotals && !item.initialized && calculateTotals(item);
+ return item;
+ }
+ function getItemMetadata(i2) {
+ var item = rows[i2];
+ return item === void 0 ? null : item.__group ? options.groupItemMetadataProvider.getGroupRowMetadata(item) : item.__groupTotals ? options.groupItemMetadataProvider.getTotalsRowMetadata(item) : null;
+ }
+ function expandCollapseAllGroups(level, collapse) {
+ if (level == null)
+ for (var i2 = 0; i2 < groupingInfos.length; i2++)
+ toggledGroupsByLevel[i2] = {}, groupingInfos[i2].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level: i2, groupingKey: null }) : onGroupExpanded.notify({ level: i2, groupingKey: null });
+ else
+ toggledGroupsByLevel[level] = {}, groupingInfos[level].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level, groupingKey: null }) : onGroupExpanded.notify({ level, groupingKey: null });
+ refresh();
+ }
+ function collapseAllGroups(level) {
+ expandCollapseAllGroups(level, !0);
+ }
+ function expandAllGroups(level) {
+ expandCollapseAllGroups(level, !1);
+ }
+ function expandCollapseGroup(level, groupingKey, collapse) {
+ toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse, refresh();
+ }
+ function collapseGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (groupingKey = arg0, level = arg0.split(groupingDelimiter).length - 1) : (groupingKey = args.join(groupingDelimiter), level = args.length - 1), expandCollapseGroup(level, groupingKey, !0), onGroupCollapsed.notify({ level, groupingKey });
+ }
+ function expandGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (level = arg0.split(groupingDelimiter).length - 1, groupingKey = arg0) : (level = args.length - 1, groupingKey = args.join(groupingDelimiter)), expandCollapseGroup(level, groupingKey, !1), onGroupExpanded.notify({ level, groupingKey });
+ }
+ function getGroups() {
+ return groups;
+ }
+ function extractGroups(rows2, parentGroup) {
+ for (var group, val, groups2 = [], groupsByVal = {}, r, level = parentGroup ? parentGroup.level + 1 : 0, gi = groupingInfos[level], i2 = 0, l = gi.predefinedValues.length; i2 < l; i2++)
+ val = gi.predefinedValues[i2], group = groupsByVal[val], group || (group = new Group3(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group);
+ for (var i2 = 0, l = rows2.length; i2 < l; i2++)
+ r = rows2[i2], val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter], group = groupsByVal[val], group || (group = new Group3(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group), group.rows[group.count++] = r;
+ if (level < groupingInfos.length - 1)
+ for (var i2 = 0; i2 < groups2.length; i2++)
+ group = groups2[i2], group.groups = extractGroups(group.rows, group);
+ return groups2.length && addTotals(groups2, level), groups2.sort(groupingInfos[level].comparer), groups2;
+ }
+ function calculateTotals(totals) {
+ var group = totals.group, gi = groupingInfos[group.level], isLeafLevel = group.level == groupingInfos.length, agg, idx = gi.aggregators.length;
+ if (!isLeafLevel && gi.aggregateChildGroups)
+ for (var i2 = group.groups.length; i2--; )
+ group.groups[i2].totals.initialized || calculateTotals(group.groups[i2].totals);
+ for (; idx--; )
+ agg = gi.aggregators[idx], agg.init(), !isLeafLevel && gi.aggregateChildGroups ? gi.compiledAccumulators[idx].call(agg, group.groups) : gi.compiledAccumulators[idx].call(agg, group.rows), agg.storeResult(totals);
+ totals.initialized = !0;
+ }
+ function addGroupTotals(group) {
+ var gi = groupingInfos[group.level], totals = new GroupTotals2();
+ totals.group = group, group.totals = totals, gi.lazyTotalsCalculation || calculateTotals(totals);
+ }
+ function addTotals(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupCollapsed = gi.collapsed, toggledGroups = toggledGroupsByLevel[level], idx = groups2.length, g; idx--; )
+ g = groups2[idx], !(g.collapsed && !gi.aggregateCollapsed) && (g.groups && addTotals(g.groups, level + 1), gi.aggregators.length && (gi.aggregateEmpty || g.rows.length || g.groups && g.groups.length) && addGroupTotals(g), g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey], g.title = gi.formatter ? gi.formatter(g) : g.value);
+ }
+ function flattenGroupedRows(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupedRows = [], rows2, gl = 0, g, i2 = 0, l = groups2.length; i2 < l; i2++) {
+ if (g = groups2[i2], groupedRows[gl++] = g, !g.collapsed) {
+ rows2 = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;
+ for (var j = 0, jj = rows2.length; j < jj; j++)
+ groupedRows[gl++] = rows2[j];
+ }
+ g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed) && (groupedRows[gl++] = g.totals);
+ }
+ return groupedRows;
+ }
+ function getFunctionInfo(fn) {
+ var fnStr = fn.toString(), usingEs5 = fnStr.indexOf("function") >= 0, fnRegex = usingEs5 ? /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/ : /^[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/, matches = fn.toString().match(fnRegex);
+ return {
+ params: matches[1].split(","),
+ body: matches[2]
+ };
+ }
+ function compileAccumulatorLoop(aggregator) {
+ if (aggregator.accumulate) {
+ var accumulatorInfo = getFunctionInfo(aggregator.accumulate), fn = new Function(
+ "_items",
+ "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" + accumulatorInfo.params[0] + " = _items[_i]; " + accumulatorInfo.body + "}"
+ ), fnName = "compiledAccumulatorLoop";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ } else
+ return function() {
+ };
+ }
+ function compileFilter() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args", tpl), fnName = "compiledFilter";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function compileFilterWithCaching() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args, _cache) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "if (_cache[_i]) { ",
+ "_retval[_idx++] = $item$; ",
+ "continue _coreloop; ",
+ "} ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args,_cache", tpl), fnName = "compiledFilterWithCaching";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function setFunctionName(fn, fnName) {
+ try {
+ Object.defineProperty(fn, "name", {
+ writable: !0,
+ value: fnName
+ });
+ } catch {
+ fn.name = fnName;
+ }
+ }
+ function uncompiledFilter(items2, args) {
+ for (var retval = [], idx = 0, i2 = 0, ii = items2.length; i2 < ii; i2++)
+ filter(items2[i2], args) && (retval[idx++] = items2[i2]);
+ return retval;
+ }
+ function uncompiledFilterWithCaching(items2, args, cache) {
+ for (var retval = [], idx = 0, item, i2 = 0, ii = items2.length; i2 < ii; i2++)
+ item = items2[i2], cache[i2] ? retval[idx++] = item : filter(item, args) && (retval[idx++] = item, cache[i2] = !0);
+ return retval;
+ }
+ function getFilteredAndPagedItems(items2) {
+ if (filter) {
+ var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter, batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
+ refreshHints.isFilterNarrowing ? filteredItems = batchFilter(filteredItems, filterArgs) : refreshHints.isFilterExpanding ? filteredItems = batchFilterWithCaching(items2, filterArgs, filterCache) : refreshHints.isFilterUnchanged || (filteredItems = batchFilter(items2, filterArgs));
+ } else
+ filteredItems = pagesize ? items2 : items2.concat();
+ var paged;
+ return pagesize ? (filteredItems.length <= pagenum * pagesize && (filteredItems.length === 0 ? pagenum = 0 : pagenum = Math.floor((filteredItems.length - 1) / pagesize)), paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize)) : paged = filteredItems, { totalRows: filteredItems.length, rows: paged };
+ }
+ function getRowDiffs(rows2, newRows) {
+ var item, r, eitherIsNonData, diff = [], from = 0, to = Math.max(newRows.length, rows2.length);
+ refreshHints && refreshHints.ignoreDiffsBefore && (from = Math.max(
+ 0,
+ Math.min(newRows.length, refreshHints.ignoreDiffsBefore)
+ )), refreshHints && refreshHints.ignoreDiffsAfter && (to = Math.min(
+ newRows.length,
+ Math.max(0, refreshHints.ignoreDiffsAfter)
+ ));
+ for (var i2 = from, rl = rows2.length; i2 < to; i2++)
+ i2 >= rl ? diff[diff.length] = i2 : (item = newRows[i2], r = rows2[i2], (!item || groupingInfos.length && (eitherIsNonData = item.__nonDataRow || r.__nonDataRow) && item.__group !== r.__group || item.__group && !item.equals(r) || eitherIsNonData && // no good way to compare totals since they are arbitrary DTOs
+ // deep object comparison is pretty expensive
+ // always considering them 'dirty' seems easier for the time being
+ (item.__groupTotals || r.__groupTotals) || item[idProperty] != r[idProperty] || updated && updated[item[idProperty]]) && (diff[diff.length] = i2));
+ return diff;
+ }
+ function recalc(_items) {
+ rowsById = null, (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing || refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) && (filterCache = []);
+ var filteredItems2 = getFilteredAndPagedItems(_items);
+ totalRows = filteredItems2.totalRows;
+ var newRows = filteredItems2.rows;
+ groups = [], groupingInfos.length && (groups = extractGroups(newRows), groups.length && (newRows = flattenGroupedRows(groups)));
+ var diff = getRowDiffs(rows, newRows);
+ return rows = newRows, diff;
+ }
+ function refresh() {
+ if (!suspend) {
+ var previousPagingInfo = Utils3.extend(!0, {}, getPagingInfo()), countBefore = rows.length, totalRowsBefore = totalRows, diff = recalc(items, filter);
+ pagesize && totalRows < pagenum * pagesize && (pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1), diff = recalc(items, filter)), updated = null, prevRefreshHints = refreshHints, refreshHints = {}, totalRowsBefore !== totalRows && onBeforePagingInfoChanged.notify(previousPagingInfo, null, self) !== !1 && onPagingInfoChanged.notify(getPagingInfo(), null, self), countBefore !== rows.length && onRowCountChanged.notify({ previous: countBefore, current: rows.length, itemCount: items.length, dataView: self, callingOnRowsChanged: diff.length > 0 }, null, self), diff.length > 0 && onRowsChanged.notify({ rows: diff, itemCount: items.length, dataView: self, calledOnRowCountChanged: countBefore !== rows.length }, null, self), (countBefore !== rows.length || diff.length > 0) && onRowsOrCountChanged.notify({
+ rowsDiff: diff,
+ previousRowCount: countBefore,
+ currentRowCount: rows.length,
+ itemCount: items.length,
+ rowCountChanged: countBefore !== rows.length,
+ rowsChanged: diff.length > 0,
+ dataView: self
+ }, null, self);
+ }
+ }
+ function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {
+ var self2 = this;
+ _grid = grid;
+ var inHandler;
+ selectedRowIds = self2.mapRowsToIds(grid.getSelectedRows());
+ function setSelectedRowIds(rowIds) {
+ rowIds === !1 ? selectedRowIds = [] : selectedRowIds.sort().join(",") !== rowIds.sort().join(",") && (selectedRowIds = rowIds);
+ }
+ function update() {
+ if (selectedRowIds.length > 0 && !inHandler) {
+ inHandler = !0;
+ var selectedRows = self2.mapIdsToRows(selectedRowIds);
+ if (!preserveHidden) {
+ var selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: self2.mapRowsToIds(selectedRows),
+ rows: selectedRows,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData2(), self2);
+ }
+ grid.setSelectedRows(selectedRows), inHandler = !1;
+ }
+ }
+ return grid.onSelectedRowsChanged.subscribe(function(e, args) {
+ if (!inHandler) {
+ var newSelectedRowIds = self2.mapRowsToIds(args.rows), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: newSelectedRowIds,
+ rows: args.rows,
+ added: !0,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData2(), self2);
+ }
+ }), preSelectedRowIdsChangeFn = function(args) {
+ if (!inHandler) {
+ inHandler = !0;
+ var overwrite = typeof args.added > "u";
+ if (overwrite)
+ setSelectedRowIds(args.ids);
+ else {
+ var rowIds;
+ if (args.added)
+ if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {
+ var hiddenSelectedRowIds = selectedRowIds.filter(function(id) {
+ return self2.getRowById(id) === void 0;
+ });
+ rowIds = hiddenSelectedRowIds.concat(args.ids);
+ } else
+ rowIds = args.ids;
+ else
+ preserveHiddenOnSelectionChange && grid.getOptions().multiSelect ? rowIds = selectedRowIds.filter(function(id) {
+ return args.ids.indexOf(id) === -1;
+ }) : rowIds = [];
+ setSelectedRowIds(rowIds);
+ }
+ inHandler = !1;
+ }
+ }, this.onRowsOrCountChanged.subscribe(update), onSelectedRowIdsChanged;
+ }
+ function getAllSelectedIds() {
+ return selectedRowIds;
+ }
+ function getAllSelectedFilteredIds() {
+ return getAllSelectedFilteredItems().map(function(item) {
+ return item[idProperty];
+ });
+ }
+ function setSelectedIds(selectedIds, options2) {
+ var isRowBeingAdded = options2 && options2.isRowBeingAdded, shouldTriggerEvent = options2 && options2.shouldTriggerEvent, applyRowSelectionToGrid = options2 && options2.applyRowSelectionToGrid;
+ isRowBeingAdded !== !1 && (isRowBeingAdded = !0);
+ var selectedRows = self.mapIdsToRows(selectedIds), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: selectedIds,
+ rows: selectedRows,
+ added: isRowBeingAdded,
+ dataView: self
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), shouldTriggerEvent !== !1 && onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self.getAllSelectedFilteredIds()
+ }), new EventData2(), self), applyRowSelectionToGrid !== !1 && _grid && _grid.setSelectedRows(selectedRows);
+ }
+ function getAllSelectedItems() {
+ var selectedData = [], selectedIds = getAllSelectedIds();
+ return selectedIds.forEach(function(id) {
+ selectedData.push(self.getItemById(id));
+ }), selectedData;
+ }
+ function getAllSelectedFilteredItems() {
+ if (!Array.isArray(selectedRowIds))
+ return [];
+ var intersection = filteredItems.filter(function(a) {
+ return selectedRowIds.some(function(b) {
+ return a[idProperty] === b;
+ });
+ });
+ return intersection || [];
+ }
+ function syncGridCellCssStyles(grid, key) {
+ var hashById, inHandler;
+ storeCellCssStyles(grid.getCellCssStyles(key));
+ function storeCellCssStyles(hash) {
+ hashById = {};
+ for (var row in hash) {
+ var id = rows[row][idProperty];
+ hashById[id] = hash[row];
+ }
+ }
+ function update() {
+ if (hashById) {
+ inHandler = !0, ensureRowsByIdCache();
+ var newHash = {};
+ for (var id in hashById) {
+ var row = rowsById[id];
+ row != null && (newHash[row] = hashById[id]);
+ }
+ grid.setCellCssStyles(key, newHash), inHandler = !1;
+ }
+ }
+ grid.onCellCssStylesChanged.subscribe(function(e, args) {
+ debugger;
+ inHandler || key == args.key && (args.hash ? storeCellCssStyles(args.hash) : (grid.onCellCssStylesChanged.unsubscribe(), self.onRowsOrCountChanged.unsubscribe(update)));
+ }), this.onRowsOrCountChanged.subscribe(update);
+ }
+ Utils3.extend(this, {
+ // methods
+ beginUpdate,
+ endUpdate,
+ destroy,
+ setPagingOptions,
+ getPagingInfo,
+ getIdPropertyName,
+ getItems,
+ setItems,
+ setFilter,
+ getFilter,
+ getFilteredItems,
+ getFilteredItemCount,
+ sort,
+ fastSort,
+ reSort,
+ setGrouping,
+ getGrouping,
+ groupBy,
+ setAggregators,
+ collapseAllGroups,
+ expandAllGroups,
+ collapseGroup,
+ expandGroup,
+ getGroups,
+ getAllSelectedIds,
+ getAllSelectedItems,
+ getAllSelectedFilteredIds,
+ getAllSelectedFilteredItems,
+ setSelectedIds,
+ getIdxById,
+ getRowByItem,
+ getRowById,
+ getItemById,
+ getItemByIdx,
+ mapItemsToRows,
+ mapRowsToIds,
+ mapIdsToRows,
+ setRefreshHints,
+ setFilterArgs,
+ refresh,
+ updateItem,
+ updateItems,
+ insertItem,
+ insertItems,
+ addItem,
+ addItems,
+ deleteItem,
+ deleteItems,
+ sortedAddItem,
+ sortedUpdateItem,
+ syncGridSelection,
+ syncGridCellCssStyles,
+ // data provider methods
+ getItemCount,
+ getLength,
+ getItem,
+ getItemMetadata,
+ // events
+ onSelectedRowIdsChanged,
+ // NOTE this will only work when used with "syncGridSelection"
+ onSetItemsCalled,
+ onRowCountChanged,
+ onRowsChanged,
+ onRowsOrCountChanged,
+ onBeforePagingInfoChanged,
+ onPagingInfoChanged,
+ onGroupExpanded,
+ onGroupCollapsed
+ });
+}
+function AvgAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.count_ = 0, this.nonNullCount_ = 0, this.sum_ = 0;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ this.count_++, val != null && val !== "" && !isNaN(val) && (this.nonNullCount_++, this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.avg || (groupTotals.avg = {}), this.nonNullCount_ !== 0 && (groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_);
+ };
+}
+function MinAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.min_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.min_ == null || val < this.min_) && (this.min_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.min || (groupTotals.min = {}), groupTotals.min[this.field_] = this.min_;
+ };
+}
+function MaxAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.max_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.max_ == null || val > this.max_) && (this.max_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.max || (groupTotals.max = {}), groupTotals.max[this.field_] = this.max_;
+ };
+}
+function SumAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.sum_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.sum || (groupTotals.sum = {}), groupTotals.sum[this.field_] = this.sum_;
+ };
+}
+function CountAggregator(field) {
+ this.field_ = field, this.init = function() {
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.count || (groupTotals.count = {}), groupTotals.count[this.field_] = groupTotals.group.rows.length;
+ };
+}
+var Aggregators = {
+ Avg: AvgAggregator,
+ Min: MinAggregator,
+ Max: MaxAggregator,
+ Sum: SumAggregator,
+ Count: CountAggregator
+};
+
+// src/slick.editors.js
+var keyCode3 = keyCode, Utils4 = Utils;
+function TextEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.getValue = function() {
+ return input.value;
+ }, this.setValue = function(val) {
+ input.value = val;
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field] || "", input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function IntegerEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid integer"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function FloatEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ };
+ function getDecimalPlaces() {
+ var rtn = args.column.editorFixedDecimalPlaces;
+ return typeof rtn > "u" && (rtn = FloatEditor.DefaultDecimalPlaces), !rtn && rtn !== 0 ? null : rtn;
+ }
+ this.loadValue = function(item) {
+ defaultValue = item[args.column.field];
+ var decPlaces = getDecimalPlaces();
+ decPlaces !== null && (defaultValue || defaultValue === 0) && defaultValue.toFixed && (defaultValue = defaultValue.toFixed(decPlaces)), input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ var rtn = parseFloat(input.value);
+ FloatEditor.AllowEmptyValue ? !rtn && rtn !== 0 && (rtn = "") : rtn = rtn || 0;
+ var decPlaces = getDecimalPlaces();
+ return decPlaces !== null && (rtn || rtn === 0) && rtn.toFixed && (rtn = parseFloat(rtn.toFixed(decPlaces))), rtn;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid number"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+FloatEditor.DefaultDecimalPlaces = null;
+FloatEditor.AllowEmptyValue = !1;
+function FlatpickrEditor(args) {
+ if (typeof flatpickr > "u")
+ throw new Error("Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/");
+ var input, defaultValue, scope = this;
+ this.args = args;
+ var flatpickrInstance;
+ this.init = function() {
+ input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.focus(), input.select(), flatpickrInstance = flatpickr(input, {
+ closeOnSelect: !0,
+ allowInput: !0,
+ altInput: !0,
+ altFormat: "m/d/Y",
+ dateFormat: "m/d/Y",
+ onChange: () => {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ }
+ }), args.compositeEditorOptions || setTimeout(() => {
+ scope.show(), scope.focus();
+ }, 50), Utils4.width(input, Utils4.width(input) - (args.compositeEditorOptions ? 28 : 18));
+ }, this.destroy = function() {
+ scope.hide(), flatpickrInstance && flatpickrInstance.destroy(), input.remove();
+ }, this.show = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.open();
+ }, this.hide = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.close();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select(), flatpickrInstance && flatpickrInstance.setDate(defaultValue);
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function YesNoSelectEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils4.createDomElement("select", { tabIndex: 0, className: "editor-yesno" }, args.container), Utils4.createDomElement("option", { value: "yes", textContent: "Yes" }, select), Utils4.createDomElement("option", { value: "no", textContent: "No" }, select), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ select.value = (defaultValue = item[args.column.field]) ? "yes" : "no";
+ }, this.serializeValue = function() {
+ return select.value == "yes";
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return select.value != defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function CheckboxEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils4.createDomElement("input", { className: "editor-checkbox", type: "checkbox", value: "true" }, args.container), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = !!item[args.column.field], defaultValue ? select.checked = !0 : select.checked = !1;
+ }, this.serializeValue = function() {
+ return select.checked;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return this.serializeValue() !== defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function PercentCompleteEditor(args) {
+ var input, picker, defaultValue, scope = this;
+ this.args = args;
+ var slider, sliderInputHandler = function() {
+ input.value = this.value;
+ }, sliderChangeHandler = function() {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ };
+ this.init = function() {
+ input = Utils4.createDomElement("input", { className: "editor-percentcomplete", type: "text" }, args.container), Utils4.width(input, args.container.clientWidth - 25), picker = Utils4.createDomElement("div", { className: "editor-percentcomplete-picker" }, args.container);
+ let pickerIcon = Utils4.createDomElement("span", { className: "editor-percentcomplete-picker-icon" }, picker), containerHelper = Utils4.createDomElement("div", { className: "editor-percentcomplete-helper" }, picker), containerWrapper = Utils4.createDomElement("div", { className: "editor-percentcomplete-wrapper" }, containerHelper);
+ Utils4.createDomElement("div", { className: "editor-percentcomplete-slider" }, containerWrapper), Utils4.createDomElement("input", { className: "editor-percentcomplete-slider", type: "range" }, containerWrapper);
+ let containerButtons = Utils4.createDomElement("div", { className: "editor-percentcomplete-buttons" }, containerWrapper);
+ Utils4.createDomElement("button", { value: "0", className: "slick-btn slick-btn-default", textContent: "Not started" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils4.createDomElement("button", { value: "50", className: "slick-btn slick-btn-default", textContent: "In Progress" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils4.createDomElement("button", { value: "100", className: "slick-btn slick-btn-default", textContent: "Complete" }, containerButtons), input.focus(), input.select(), slider = picker.querySelector("input.editor-percentcomplete-slider"), slider.value = defaultValue, slider.addEventListener("input", sliderInputHandler), slider.addEventListener("change", sliderChangeHandler);
+ let buttons = picker.querySelectorAll(".editor-percentcomplete-buttons button");
+ [].forEach.call(buttons, (button) => {
+ button.addEventListener("click", this.onClick);
+ });
+ }, this.onClick = function() {
+ input.value = this.value, slider.value = this.value;
+ }, this.destroy = function() {
+ slider.removeEventListener("input", sliderInputHandler), slider.removeEventListener("change", sliderChangeHandler), picker.querySelectorAll(".editor-percentcomplete-buttons button").forEach((button) => button.removeEventListener("click", this.onClick)), input.remove(), picker.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], slider.value = defaultValue, input.value = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && (parseInt(input.value, 10) || 0) != defaultValue;
+ }, this.validate = function() {
+ return isNaN(parseInt(input.value, 10)) ? {
+ valid: !1,
+ msg: "Please enter a valid positive number"
+ } : {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function LongTextEditor(args) {
+ var input, wrapper, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ var compositeEditorOptions = args.compositeEditorOptions;
+ args.grid.getOptions().editorCellNavOnLRKeys;
+ var container = compositeEditorOptions ? args.container : document.body;
+ if (wrapper = Utils4.createDomElement("div", { className: "slick-large-editor-text" }, container), compositeEditorOptions ? (wrapper.style.position = "relative", Utils4.setStyleSize(wrapper, "padding", 0), Utils4.setStyleSize(wrapper, "border", 0)) : wrapper.style.position = "absolute", input = Utils4.createDomElement("textarea", { rows: 5, style: { background: "white", width: "250px", height: "80px", border: "0", outline: "0" } }, wrapper), compositeEditorOptions)
+ input.addEventListener("change", this.onChange);
+ else {
+ let btnContainer = Utils4.createDomElement("div", { style: "text-align:right" }, wrapper);
+ Utils4.createDomElement("button", { id: "save", className: "slick-btn slick-btn-primary", textContent: "Save" }, btnContainer), Utils4.createDomElement("button", { id: "cancel", className: "slick-btn slick-btn-default", textContent: "Cancel" }, btnContainer), wrapper.querySelector("#save").addEventListener("click", this.save), wrapper.querySelector("#cancel").addEventListener("click", this.cancel), input.addEventListener("keydown", this.handleKeyDown), scope.position(args.position);
+ }
+ input.focus(), input.select();
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.handleKeyDown = function(e) {
+ if (e.which == keyCode3.ENTER && e.ctrlKey)
+ scope.save();
+ else if (e.which == keyCode3.ESCAPE)
+ e.preventDefault(), scope.cancel();
+ else if (e.which == keyCode3.TAB && e.shiftKey)
+ e.preventDefault(), args.grid.navigatePrev();
+ else if (e.which == keyCode3.TAB)
+ e.preventDefault(), args.grid.navigateNext();
+ else if ((e.which == keyCode3.LEFT || e.which == keyCode3.RIGHT) && args.grid.getOptions().editorCellNavOnLRKeys) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ e.keyCode === keyCode3.LEFT && cursorPosition === 0 && args.grid.navigatePrev(), e.keyCode === keyCode3.RIGHT && cursorPosition >= textLength - 1 && args.grid.navigateNext();
+ }
+ }, this.save = function() {
+ (args.grid.getOptions() || {}).autoCommitEdit ? args.grid.getEditorLock().commitCurrentEdit() : args.commitChanges();
+ }, this.cancel = function() {
+ input.value = defaultValue, args.cancelChanges();
+ }, this.hide = function() {
+ Utils4.hide(wrapper);
+ }, this.show = function() {
+ Utils4.show(wrapper);
+ }, this.position = function(position) {
+ Utils4.setStyleSize(wrapper, "top", position.top - 5), Utils4.setStyleSize(wrapper, "left", position.left - 2);
+ }, this.destroy = function() {
+ args.compositeEditorOptions ? input.removeEventListener("change", this.onChange) : (wrapper.querySelector("#save").removeEventListener("click", this.save), wrapper.querySelector("#cancel").removeEventListener("click", this.cancel), input.removeEventListener("keydown", this.handleKeyDown)), wrapper.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ input.value = defaultValue = item[args.column.field], input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function handleKeydownLRNav(e) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ (e.keyCode === keyCode3.LEFT && cursorPosition > 0 || e.keyCode === keyCode3.RIGHT && cursorPosition < textLength - 1) && e.stopImmediatePropagation();
+}
+function handleKeydownLRNoNav(e) {
+ (e.keyCode === keyCode3.LEFT || e.keyCode === keyCode3.RIGHT) && e.stopImmediatePropagation();
+}
+var Editors = {
+ Text: TextEditor,
+ Integer: IntegerEditor,
+ Float: FloatEditor,
+ Flatpickr: FlatpickrEditor,
+ YesNoSelect: YesNoSelectEditor,
+ Checkbox: CheckboxEditor,
+ PercentComplete: PercentCompleteEditor,
+ LongText: LongTextEditor
+};
+
+// src/slick.formatters.js
+function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {
+ return value == null || value === "" ? "-" : value < 50 ? "" + value + "% " : "" + value + "% ";
+}
+function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {
+ if (value == null || value === "")
+ return "";
+ var color;
+ return value < 30 ? color = "red" : value < 70 ? color = "silver" : color = "green", " ";
+}
+function YesNoFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? "Yes" : "No";
+}
+function CheckboxFormatter(row, cell, value, columnDef, dataContext) {
+ return ` `;
+}
+function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? ' ' : "";
+}
+var Formatters = {
+ PercentComplete: PercentCompleteFormatter,
+ PercentCompleteBar: PercentCompleteBarFormatter,
+ YesNo: YesNoFormatter,
+ Checkmark: CheckmarkFormatter,
+ Checkbox: CheckboxFormatter
+};
+
+// src/slick.interactions.js
+function Draggable(options) {
+ let { containerElement, onDragInit, onDragStart, onDrag, onDragEnd } = options, element, startX, startY, deltaX, deltaY, dragStarted;
+ if (containerElement || (containerElement = document), !containerElement || typeof containerElement.addEventListener != "function")
+ throw new Error("[Slick.Draggable] You did not provide a valid container html element that will be used for dragging.");
+ let originaldd = {
+ dragSource: containerElement,
+ dragHandle: null
+ };
+ containerElement && (containerElement.addEventListener("mousedown", userPressed), containerElement.addEventListener("touchstart", userPressed));
+ function executeDragCallbackWhenDefined(callback, e, dd) {
+ typeof callback == "function" && callback(e, dd);
+ }
+ function destroy() {
+ containerElement && (containerElement.removeEventListener("mousedown", userPressed), containerElement.removeEventListener("touchstart", userPressed));
+ }
+ function userPressed(event) {
+ element = event.target;
+ let targetEvent = event.touches ? event.touches[0] : event, { target } = targetEvent;
+ if (!options.allowDragFrom || options.allowDragFrom && element.matches(options.allowDragFrom)) {
+ originaldd.dragHandle = element;
+ let winScrollPos = windowScrollPosition2(element);
+ startX = winScrollPos.left + targetEvent.clientX, startY = winScrollPos.top + targetEvent.clientY, deltaX = targetEvent.clientX - targetEvent.clientX, deltaY = targetEvent.clientY - targetEvent.clientY, originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragInit, event, originaldd), document.addEventListener("mousemove", userMoved), document.addEventListener("touchmove", userMoved), document.addEventListener("mouseup", userReleased), document.addEventListener("touchend", userReleased), document.addEventListener("touchcancel", userReleased);
+ }
+ }
+ function userMoved(event) {
+ let targetEvent = event.touches ? event.touches[0] : event;
+ deltaX = targetEvent.clientX - startX, deltaY = targetEvent.clientY - startY;
+ let { target } = targetEvent;
+ dragStarted || (originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragStart, event, originaldd), dragStarted = !0), originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDrag, event, originaldd);
+ }
+ function userReleased(event) {
+ let { target } = event;
+ originaldd = Object.assign(originaldd, { target }), executeDragCallbackWhenDefined(onDragEnd, event, originaldd), document.removeEventListener("mousemove", userMoved), document.removeEventListener("touchmove", userMoved), document.removeEventListener("mouseup", userReleased), document.removeEventListener("touchend", userReleased), document.removeEventListener("touchcancel", userReleased), dragStarted = !1;
+ }
+ function windowScrollPosition2() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ return { destroy };
+}
+function MouseWheel(options) {
+ let { element, onMouseWheel } = options;
+ function destroy() {
+ element.removeEventListener("wheel", wheelHandler), element.removeEventListener("mousewheel", wheelHandler);
+ }
+ function init() {
+ element.addEventListener("wheel", wheelHandler), element.addEventListener("mousewheel", wheelHandler);
+ }
+ function wheelHandler(event) {
+ let orgEvent = event || window.event, delta = 0, deltaX = 0, deltaY = 0;
+ orgEvent.wheelDelta && (delta = orgEvent.wheelDelta / 120), orgEvent.detail && (delta = -orgEvent.detail / 3), deltaY = delta, orgEvent.axis !== void 0 && orgEvent.axis === orgEvent.HORIZONTAL_AXIS && (deltaY = 0, deltaX = -1 * delta), orgEvent.wheelDeltaY !== void 0 && (deltaY = orgEvent.wheelDeltaY / 120), orgEvent.wheelDeltaX !== void 0 && (deltaX = -1 * orgEvent.wheelDeltaX / 120), typeof onMouseWheel == "function" && onMouseWheel(event, delta, deltaX, deltaY);
+ }
+ return init(), { destroy };
+}
+function Resizable(options) {
+ let { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;
+ if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener != "function")
+ throw new Error("[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.");
+ function destroy() {
+ resizeableHandleElement && typeof resizeableHandleElement.removeEventListener == "function" && (resizeableHandleElement.removeEventListener("mousedown", resizeStartHandler), resizeableHandleElement.removeEventListener("touchstart", resizeStartHandler));
+ }
+ function executeResizeCallbackWhenDefined(callback, e) {
+ typeof callback == "function" && callback(e, { resizeableElement, resizeableHandleElement });
+ }
+ function resizeStartHandler(e) {
+ e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeStart, event), document.addEventListener("mousemove", resizingHandler), document.addEventListener("mouseup", resizeEndHandler), document.addEventListener("touchmove", resizingHandler), document.addEventListener("touchend", resizeEndHandler);
+ }
+ function resizingHandler(e) {
+ e.preventDefault && e.type !== "touchmove" && e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ typeof onResize == "function" && (onResize(event, { resizeableElement, resizeableHandleElement }), onResize(event, { resizeableElement, resizeableHandleElement }));
+ }
+ function resizeEndHandler(e) {
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeEnd, event), document.removeEventListener("mousemove", resizingHandler), document.removeEventListener("mouseup", resizeEndHandler), document.removeEventListener("touchmove", resizingHandler), document.removeEventListener("touchend", resizeEndHandler);
+ }
+ return resizeableHandleElement.addEventListener("mousedown", resizeStartHandler), resizeableHandleElement.addEventListener("touchstart", resizeStartHandler), { destroy };
+}
+
+// src/slick.grid.js
+var BindingEventService2 = BindingEventService, ColAutosizeMode2 = ColAutosizeMode, SlickEvent2 = Event, EventData3 = EventData, GlobalEditorLock2 = GlobalEditorLock, GridAutosizeColsMode2 = GridAutosizeColsMode;
+var keyCode4 = keyCode, preClickClassName2 = preClickClassName, SlickRange = Range, RowSelectionMode2 = RowSelectionMode, ValueFilterMode2 = ValueFilterMode, Utils5 = Utils, WidthEvalMode2 = WidthEvalMode, Draggable2 = Draggable, MouseWheel2 = MouseWheel, Resizable2 = Resizable, scrollbarDimensions, maxSupportedCssHeight;
+function SlickGrid(container, data, columns, options) {
+ var defaults2 = {
+ alwaysShowVerticalScroll: !1,
+ alwaysAllowHorizontalScroll: !1,
+ explicitInitialization: !1,
+ rowHeight: 25,
+ defaultColumnWidth: 80,
+ enableAddRow: !1,
+ leaveSpaceForNewRows: !1,
+ editable: !1,
+ autoEdit: !0,
+ autoCommitEdit: !1,
+ suppressActiveCellChangeOnEdit: !1,
+ enableCellNavigation: !0,
+ enableColumnReorder: !0,
+ asyncEditorLoading: !1,
+ asyncEditorLoadDelay: 100,
+ forceFitColumns: !1,
+ enableAsyncPostRender: !1,
+ asyncPostRenderDelay: 50,
+ enableAsyncPostRenderCleanup: !1,
+ asyncPostRenderCleanupDelay: 40,
+ auto: !1,
+ editorLock: GlobalEditorLock2,
+ showColumnHeader: !0,
+ showHeaderRow: !1,
+ headerRowHeight: 25,
+ createFooterRow: !1,
+ showFooterRow: !1,
+ footerRowHeight: 25,
+ createPreHeaderPanel: !1,
+ showPreHeaderPanel: !1,
+ preHeaderPanelHeight: 25,
+ showTopPanel: !1,
+ topPanelHeight: 25,
+ formatterFactory: null,
+ editorFactory: null,
+ cellFlashingCssClass: "flashing",
+ selectedCellCssClass: "selected",
+ multiSelect: !0,
+ enableTextSelectionOnCells: !1,
+ dataItemColumnValueExtractor: null,
+ frozenBottom: !1,
+ frozenColumn: -1,
+ frozenRow: -1,
+ frozenRightViewportMinWidth: 100,
+ fullWidthRows: !1,
+ multiColumnSort: !1,
+ numberedMultiColumnSort: !1,
+ tristateMultiColumnSort: !1,
+ sortColNumberInSeparateSpan: !1,
+ defaultFormatter,
+ forceSyncScrolling: !1,
+ addNewRowCssClass: "new-row",
+ preserveCopiedSelectionOnPaste: !1,
+ showCellSelection: !0,
+ viewportClass: null,
+ minRowBuffer: 3,
+ emulatePagingWhenScrolling: !0,
+ // when scrolling off bottom of viewport, place new row at top of viewport
+ editorCellNavOnLRKeys: !1,
+ enableMouseWheelScrollHandler: !0,
+ doPaging: !0,
+ autosizeColsMode: GridAutosizeColsMode2.LegacyOff,
+ autosizeColPaddingPx: 4,
+ autosizeTextAvgToMWidthRatio: 0.75,
+ viewportSwitchToScrollModeWidthPercent: void 0,
+ viewportMinWidthPx: void 0,
+ viewportMaxWidthPx: void 0,
+ suppressCssChangesOnHiddenInit: !1,
+ scrollDebounceDelay: -1,
+ // add a scroll delay to avoid screen flickering, -1 to disable delay
+ ffMaxSupportedCssHeight: 6e6,
+ maxSupportedCssHeight: 1e9,
+ sanitizer: void 0,
+ // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)
+ logSanitizedHtml: !1
+ // log to console when sanitised - recommend true for testing of dev and production
+ }, columnDefaults = {
+ name: "",
+ resizable: !0,
+ sortable: !1,
+ minWidth: 30,
+ maxWidth: void 0,
+ rerenderOnResize: !1,
+ headerCssClass: null,
+ defaultSortAsc: !0,
+ focusable: !0,
+ selectable: !0,
+ hidden: !1
+ }, columnAutosizeDefaults = {
+ ignoreHeaderText: !1,
+ colValueArray: void 0,
+ allowAddlPercent: void 0,
+ formatterOverride: void 0,
+ autosizeMode: ColAutosizeMode2.ContentIntelligent,
+ rowSelectionModeOnInit: void 0,
+ rowSelectionMode: RowSelectionMode2.FirstNRows,
+ rowSelectionCount: 100,
+ valueFilterMode: ValueFilterMode2.None,
+ widthEvalMode: WidthEvalMode2.Auto,
+ sizeToRemaining: void 0,
+ widthPx: void 0,
+ contentSizePx: 0,
+ headerWidthPx: 0,
+ colDataTypeOf: void 0
+ }, th, h, ph, n, cj, page = 0, offset2 = 0, vScrollDir = 1;
+ let show2 = Utils5.show, hide2 = Utils5.hide;
+ var _bindingEventService = new BindingEventService2(), initialized = !1, _container, uid = "slickgrid_" + Math.round(1e6 * Math.random()), self = this, _focusSink, _focusSink2, _groupHeaders = [], _headerScroller = [], _headers = [], _headerRows, _headerRowScroller, _headerRowSpacerL, _headerRowSpacerR, _footerRow, _footerRowScroller, _footerRowSpacerL, _footerRowSpacerR, _preHeaderPanel, _preHeaderPanelScroller, _preHeaderPanelSpacer, _preHeaderPanelR, _preHeaderPanelScrollerR, _preHeaderPanelSpacerR, _topPanelScrollers, _topPanels, _viewport, _canvas, _style, _boundAncestors = [], stylesheet, columnCssRulesL, columnCssRulesR, viewportH, viewportW, canvasWidth, canvasWidthL, canvasWidthR, headersWidth, headersWidthL, headersWidthR, viewportHasHScroll, viewportHasVScroll, headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, cellWidthDiff = 0, cellHeightDiff = 0, absoluteColumnMinWidth, hasFrozenRows = !1, frozenRowsHeight = 0, actualFrozenRow = -1, paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, topPanelH = 0, headerRowH = 0, footerRowH = 0, tabbingDirection = 1, _activeCanvasNode, _activeViewportNode, activePosX, activeRow, activeCell, activeCellNode = null, currentEditor = null, serializedEditorValue, editController, rowsCache = {}, renderedRows = 0, numVisibleRows = 0, prevScrollTop = 0, scrollTop = 0, lastRenderedScrollTop = 0, lastRenderedScrollLeft = 0, prevScrollLeft = 0, scrollLeft = 0, selectionModel, selectedRows = [], plugins = [], cellCssClasses = {}, columnsById = {}, sortColumns = [], columnPosLeft = [], columnPosRight = [], pagingActive = !1, pagingIsLastPage = !1, scrollThrottle = ActionThrottle(render, 50), h_editorLoader = null, h_render = null, h_postrender = null, h_postrenderCleanup = null, postProcessedRows = {}, postProcessToRow = null, postProcessFromRow = null, postProcessedCleanupQueue = [], postProcessgroupId = 0, counter_rows_rendered = 0, counter_rows_removed = 0, _paneHeaderL, _paneHeaderR, _paneTopL, _paneTopR, _paneBottomL, _paneBottomR, _headerScrollerL, _headerScrollerR, _headerL, _headerR, _groupHeadersL, _groupHeadersR, _headerRowScrollerL, _headerRowScrollerR, _footerRowScrollerL, _footerRowScrollerR, _headerRowL, _headerRowR, _footerRowL, _footerRowR, _topPanelScrollerL, _topPanelScrollerR, _topPanelL, _topPanelR, _viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR, _canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR, _viewportScrollContainerX, _viewportScrollContainerY, _headerScrollContainer, _headerRowScrollContainer, _footerRowScrollContainer, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, _hiddenParents, oldProps = [], enforceFrozenRowHeightRecalc = !1, columnResizeDragging = !1, slickDraggableInstance = null, slickMouseWheelInstances = [], slickResizableInstances = [], sortableSideLeftInstance, sortableSideRightInstance;
+ function init() {
+ if (typeof container == "string" ? _container = document.querySelector(container) : _container = container, !_container)
+ throw new Error("SlickGrid requires a valid container, " + container + " does not exist in the DOM.");
+ if (maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight(), options = Utils5.extend(!0, {}, defaults2, options), validateAndEnforceOptions(), columnDefaults.width = options.defaultColumnWidth, options.suppressCssChangesOnHiddenInit || cacheCssForHiddenInit(), updateColumnProps(), options.enableColumnReorder && (!Sortable || !Sortable.create))
+ throw new Error("SlickGrid requires Sortable.js module to be loaded");
+ editController = {
+ commitCurrentEdit,
+ cancelCurrentEdit
+ }, _container.replaceChildren(), _container.style.overflow = "hidden", _container.style.outline = 0, _container.classList.add(uid), _container.classList.add("ui-widget");
+ let containerStyles = window.getComputedStyle(_container);
+ /relative|absolute|fixed/.test(containerStyles.position) || (_container.style.position = "relative"), _focusSink = Utils5.createDomElement("div", { tabIndex: 0, style: { position: "fixed", width: "0px", height: "0px", top: "0px", left: "0px", outline: "0px" } }, _container), _paneHeaderL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-left", tabIndex: 0 }, _container), _paneHeaderR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-right", tabIndex: 0 }, _container), _paneTopL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-left", tabIndex: 0 }, _container), _paneTopR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-right", tabIndex: 0 }, _container), _paneBottomL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-left", tabIndex: 0 }, _container), _paneBottomR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-right", tabIndex: 0 }, _container), options.createPreHeaderPanel && (_preHeaderPanelScroller = Utils5.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderL), _preHeaderPanelScroller.appendChild(document.createElement("div")), _preHeaderPanel = Utils5.createDomElement("div", null, _preHeaderPanelScroller), _preHeaderPanelSpacer = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScroller), _preHeaderPanelScrollerR = Utils5.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderR), _preHeaderPanelR = Utils5.createDomElement("div", null, _preHeaderPanelScrollerR), _preHeaderPanelSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScrollerR), options.showPreHeaderPanel || (hide2(_preHeaderPanelScroller), hide2(_preHeaderPanelScrollerR))), _headerScrollerL = Utils5.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-left" }, _paneHeaderL), _headerScrollerR = Utils5.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-right" }, _paneHeaderR), _headerScroller.push(_headerScrollerL), _headerScroller.push(_headerScrollerR), _headerL = Utils5.createDomElement("div", { className: "slick-header-columns slick-header-columns-left", style: { left: "-1000px" } }, _headerScrollerL), _headerR = Utils5.createDomElement("div", { className: "slick-header-columns slick-header-columns-right", style: { left: "-1000px" } }, _headerScrollerR), _headers = [_headerL, _headerR], _headerRowScrollerL = Utils5.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopL), _headerRowScrollerR = Utils5.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopR), _headerRowScroller = [_headerRowScrollerL, _headerRowScrollerR], _headerRowSpacerL = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerL), _headerRowSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerR), _headerRowL = Utils5.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-left" }, _headerRowScrollerL), _headerRowR = Utils5.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-right" }, _headerRowScrollerR), _headerRows = [_headerRowL, _headerRowR], _topPanelScrollerL = Utils5.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopL), _topPanelScrollerR = Utils5.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopR), _topPanelScrollers = [_topPanelScrollerL, _topPanelScrollerR], _topPanelL = Utils5.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerL), _topPanelR = Utils5.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerR), _topPanels = [_topPanelL, _topPanelR], options.showColumnHeader || _headerScroller.forEach(function(el) {
+ hide2(el);
+ }), options.showTopPanel || _topPanelScrollers.forEach(function(scroller) {
+ hide2(scroller);
+ }), options.showHeaderRow || _headerRowScroller.forEach(function(scroller) {
+ hide2(scroller);
+ }), _viewportTopL = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-left", tabIndex: 0 }, _paneTopL), _viewportTopR = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-right", tabIndex: 0 }, _paneTopR), _viewportBottomL = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-left", tabIndex: 0 }, _paneBottomL), _viewportBottomR = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-right", tabIndex: 0 }, _paneBottomR), _viewport = [_viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR], options.viewportClass && _viewport.forEach(function(view) {
+ view.classList.add(options.viewportClass);
+ }), _activeViewportNode = _viewportTopL, _canvasTopL = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-left", tabIndex: 0 }, _viewportTopL), _canvasTopR = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-right", tabIndex: 0 }, _viewportTopR), _canvasBottomL = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-left", tabIndex: 0 }, _viewportBottomL), _canvasBottomR = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-right", tabIndex: 0 }, _viewportBottomR), _canvas = [_canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR], scrollbarDimensions = scrollbarDimensions || measureScrollbar(), _activeCanvasNode = _canvasTopL, _preHeaderPanelSpacer && Utils5.width(_preHeaderPanelSpacer, getCanvasWidth() + scrollbarDimensions.width), _headers.forEach(function(el) {
+ Utils5.width(el, getHeadersWidth());
+ }), Utils5.width(_headerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), Utils5.width(_headerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), options.createFooterRow && (_footerRowScrollerR = Utils5.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopR), _footerRowScrollerL = Utils5.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopL), _footerRowScroller = [_footerRowScrollerL, _footerRowScrollerR], _footerRowSpacerL = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerL), Utils5.width(_footerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), _footerRowSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerR), Utils5.width(_footerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), _footerRowL = Utils5.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-left" }, _footerRowScrollerL), _footerRowR = Utils5.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-right" }, _footerRowScrollerR), _footerRow = [_footerRowL, _footerRowR], options.showFooterRow || _footerRowScroller.forEach(function(scroller) {
+ hide2(scroller);
+ })), _focusSink2 = _focusSink.cloneNode(!0), _container.append(_focusSink2), options.explicitInitialization || finishInitialization();
+ }
+ function finishInitialization() {
+ initialized || (initialized = !0, getViewportWidth(), getViewportHeight(), measureCellPaddingAndBorder(), disableSelection(_headers), options.enableTextSelectionOnCells || _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "selectstart.ui", function(event) {
+ event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement;
+ });
+ }), setFrozenOptions(), setPaneVisibility(), setScroller(), setOverflow(), updateColumnCaches(), createColumnHeaders(), createColumnFooter(), setupColumnSort(), createCssRules(), resizeCanvas(), bindAncestorScrollEvents(), _bindingEventService.bind(_container, "resize.slickgrid", resizeCanvas), _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "scroll", handleScroll);
+ }), options.enableMouseWheelScrollHandler && _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel2({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.bind(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.bind(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleHeaderRowScroll);
+ }), options.createFooterRow && (_footerRow.forEach(function(footer) {
+ _bindingEventService.bind(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.bind(footer, "click", handleFooterClick);
+ }), _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleFooterRowScroll);
+ })), options.createPreHeaderPanel && _bindingEventService.bind(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.bind(_focusSink, "keydown", handleKeyDown), _bindingEventService.bind(_focusSink2, "keydown", handleKeyDown), _canvas.forEach(function(element) {
+ _bindingEventService.bind(element, "keydown", handleKeyDown), _bindingEventService.bind(element, "click", handleClick), _bindingEventService.bind(element, "dblclick", handleDblClick), _bindingEventService.bind(element, "contextmenu", handleContextMenu), _bindingEventService.bind(element, "mouseover", handleCellMouseOver), _bindingEventService.bind(element, "mouseout", handleCellMouseOut);
+ }), Draggable2 && (slickDraggableInstance = Draggable2({
+ containerElement: _container,
+ allowDragFrom: "div.slick-cell",
+ onDragInit: handleDragInit,
+ onDragStart: handleDragStart,
+ onDrag: handleDrag,
+ onDragEnd: handleDragEnd
+ })), options.suppressCssChangesOnHiddenInit || restoreCssFromHiddenInit());
+ }
+ function cacheCssForHiddenInit() {
+ _hiddenParents = Utils5.parents(_container, ":hidden");
+ for (let el of _hiddenParents) {
+ var old = {};
+ for (let name in cssShow)
+ old[name] = el.style[name], el.style[name] = cssShow[name];
+ oldProps.push(old);
+ }
+ }
+ function restoreCssFromHiddenInit() {
+ let i2 = 0;
+ for (let el of _hiddenParents) {
+ var old = oldProps[i2++];
+ for (let name in cssShow)
+ el.style[name] = old[name];
+ }
+ }
+ function hasFrozenColumns() {
+ return options.frozenColumn > -1;
+ }
+ function registerPlugin(plugin) {
+ plugins.unshift(plugin), plugin.init(self);
+ }
+ function unregisterPlugin(plugin) {
+ for (var i2 = plugins.length; i2 >= 0; i2--)
+ if (plugins[i2] === plugin) {
+ plugins[i2].destroy && plugins[i2].destroy(), plugins.splice(i2, 1);
+ break;
+ }
+ }
+ function getPluginByName(name) {
+ for (var i2 = plugins.length - 1; i2 >= 0; i2--)
+ if (plugins[i2].pluginName === name)
+ return plugins[i2];
+ }
+ function setSelectionModel(model) {
+ selectionModel && (selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged), selectionModel.destroy && selectionModel.destroy()), selectionModel = model, selectionModel && (selectionModel.init(self), selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged));
+ }
+ function getSelectionModel() {
+ return selectionModel;
+ }
+ function getCanvasNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getCanvases(), columnIdOrIdx, rowIndex);
+ }
+ function getActiveCanvasNode(e) {
+ return e === void 0 || (e instanceof EventData3 && (e = e.getNativeEvent()), _activeCanvasNode = e.target.closest(".grid-canvas")), _activeCanvasNode;
+ }
+ function getCanvases() {
+ return _canvas;
+ }
+ function getViewportNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getViewports(), columnIdOrIdx, rowIndex);
+ }
+ function getViewports() {
+ return _viewport;
+ }
+ function getActiveViewportNode(e) {
+ return setActiveViewportNode(e), _activeViewportNode;
+ }
+ function setActiveViewportNode(e) {
+ return e instanceof EventData3 && (e = e.getNativeEvent()), _activeViewportNode = e.target.closest(".slick-viewport"), _activeViewportNode;
+ }
+ function _getContainerElement(targetContainers, columnIdOrIdx, rowIndex) {
+ if (targetContainers) {
+ columnIdOrIdx || (columnIdOrIdx = 0), rowIndex || (rowIndex = 0);
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), isBottomSide = hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1), isRightSide = hasFrozenColumns() && idx > options.frozenColumn;
+ return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];
+ }
+ }
+ function measureScrollbar() {
+ var outerdiv = Utils5.createDomElement("div", { className: _viewport.className, style: { position: "absolute", top: "-10000px", left: "-10000px", overflow: "auto", width: "100px", height: "100px" } }, document.body), innerdiv = Utils5.createDomElement("div", { style: { width: "200px", height: "200px", overflow: "auto" } }, outerdiv), dim = {
+ width: outerdiv.offsetWidth - outerdiv.clientWidth,
+ height: outerdiv.offsetHeight - outerdiv.clientHeight
+ };
+ return innerdiv.remove(), outerdiv.remove(), dim;
+ }
+ function getHeadersWidth() {
+ headersWidth = headersWidthL = headersWidthR = 0;
+ for (var includeScrollbar = !options.autoHeight, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ var width2 = columns[i2].width;
+ options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += width2 : headersWidthL += width2;
+ }
+ return includeScrollbar && (options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += scrollbarDimensions.width : headersWidthL += scrollbarDimensions.width), hasFrozenColumns() ? (headersWidthL = headersWidthL + 1e3, headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL, headersWidthR += scrollbarDimensions.width) : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidth = headersWidthL + headersWidthR, Math.max(headersWidth, viewportW) + 1e3;
+ }
+ function getHeadersWidthL() {
+ return headersWidthL = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn || (headersWidthL += column.width);
+ }), hasFrozenColumns() ? headersWidthL += 1e3 : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidthL;
+ }
+ function getHeadersWidthR() {
+ return headersWidthR = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn && (headersWidthR += column.width);
+ }), hasFrozenColumns() && (headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL(), headersWidthR += scrollbarDimensions.width), headersWidthR;
+ }
+ function getCanvasWidth() {
+ var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2 = columns.length;
+ for (canvasWidthL = canvasWidthR = 0; i2--; )
+ !columns[i2] || columns[i2].hidden || (hasFrozenColumns() && i2 > options.frozenColumn ? canvasWidthR += columns[i2].width : canvasWidthL += columns[i2].width);
+ var totalRowWidth = canvasWidthL + canvasWidthR;
+ if (options.fullWidthRows) {
+ var extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;
+ extraWidth > 0 && (totalRowWidth += extraWidth, hasFrozenColumns() ? canvasWidthR += extraWidth : canvasWidthL += extraWidth);
+ }
+ return totalRowWidth;
+ }
+ function updateCanvasWidth(forceColumnWidthsUpdate) {
+ var oldCanvasWidth = canvasWidth, oldCanvasWidthL = canvasWidthL, oldCanvasWidthR = canvasWidthR, widthChanged;
+ if (canvasWidth = getCanvasWidth(), widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR, widthChanged || hasFrozenColumns() || hasFrozenRows)
+ if (Utils5.width(_canvasTopL, canvasWidthL), getHeadersWidth(), Utils5.width(_headerL, headersWidthL), Utils5.width(_headerR, headersWidthR), hasFrozenColumns()) {
+ let cWidth = Utils5.width(_container) || 0;
+ if (cWidth > 0 && canvasWidthL > cWidth)
+ throw new Error("[SlickGrid] Frozen columns cannot be wider than the actual grid container width. Make sure to have less columns freezed or make your grid container wider");
+ Utils5.width(_canvasTopR, canvasWidthR), Utils5.width(_paneHeaderL, canvasWidthL), Utils5.setStyleSize(_paneHeaderR, "left", canvasWidthL), Utils5.setStyleSize(_paneHeaderR, "width", viewportW - canvasWidthL), Utils5.width(_paneTopL, canvasWidthL), Utils5.setStyleSize(_paneTopR, "left", canvasWidthL), Utils5.width(_paneTopR, viewportW - canvasWidthL), Utils5.width(_headerRowScrollerL, canvasWidthL), Utils5.width(_headerRowScrollerR, viewportW - canvasWidthL), Utils5.width(_headerRowL, canvasWidthL), Utils5.width(_headerRowR, canvasWidthR), options.createFooterRow && (Utils5.width(_footerRowScrollerL, canvasWidthL), Utils5.width(_footerRowScrollerR, viewportW - canvasWidthL), Utils5.width(_footerRowL, canvasWidthL), Utils5.width(_footerRowR, canvasWidthR)), options.createPreHeaderPanel && Utils5.width(_preHeaderPanel, canvasWidth), Utils5.width(_viewportTopL, canvasWidthL), Utils5.width(_viewportTopR, viewportW - canvasWidthL), hasFrozenRows && (Utils5.width(_paneBottomL, canvasWidthL), Utils5.setStyleSize(_paneBottomR, "left", canvasWidthL), Utils5.width(_viewportBottomL, canvasWidthL), Utils5.width(_viewportBottomR, viewportW - canvasWidthL), Utils5.width(_canvasBottomL, canvasWidthL), Utils5.width(_canvasBottomR, canvasWidthR));
+ } else
+ Utils5.width(_paneHeaderL, "100%"), Utils5.width(_paneTopL, "100%"), Utils5.width(_headerRowScrollerL, "100%"), Utils5.width(_headerRowL, canvasWidth), options.createFooterRow && (Utils5.width(_footerRowScrollerL, "100%"), Utils5.width(_footerRowL, canvasWidth)), options.createPreHeaderPanel && Utils5.width(_preHeaderPanel, canvasWidth), Utils5.width(_viewportTopL, "100%"), hasFrozenRows && (Utils5.width(_viewportBottomL, "100%"), Utils5.width(_canvasBottomL, canvasWidthL));
+ viewportHasHScroll = canvasWidth >= viewportW - scrollbarDimensions.width, Utils5.width(_headerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils5.width(_headerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), options.createFooterRow && (Utils5.width(_footerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils5.width(_footerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0))), (widthChanged || forceColumnWidthsUpdate) && applyColumnWidths();
+ }
+ function disableSelection(target) {
+ target.forEach(function(el) {
+ el.setAttribute("unselectable", "on"), el.style.MozUserSelect = "none", _bindingEventService.bind(el, "selectstart.ui", function() {
+ return !1;
+ });
+ });
+ }
+ function getMaxSupportedCssHeight() {
+ let supportedHeight = 1e6, testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? options.ffMaxSupportedCssHeight : options.maxSupportedCssHeight, div = Utils5.createDomElement("div", { style: { display: "hidden" } }, document.body);
+ for (; ; ) {
+ let test = supportedHeight * 2;
+ Utils5.height(div, test);
+ let height2 = Utils5.height(div);
+ if (test > testUpTo || height2 !== test)
+ break;
+ supportedHeight = test;
+ }
+ return div.remove(), supportedHeight;
+ }
+ function getUID() {
+ return uid;
+ }
+ function getHeaderColumnWidthDiff() {
+ return headerColumnWidthDiff;
+ }
+ function getScrollbarDimensions() {
+ return scrollbarDimensions;
+ }
+ function getDisplayedScrollbarDimensions() {
+ return {
+ width: viewportHasVScroll ? scrollbarDimensions.width : 0,
+ height: viewportHasHScroll ? scrollbarDimensions.height : 0
+ };
+ }
+ function getAbsoluteColumnMinWidth() {
+ return absoluteColumnMinWidth;
+ }
+ function bindAncestorScrollEvents() {
+ for (var elem = hasFrozenRows && !options.frozenBottom ? _canvasBottomL : _canvasTopL; (elem = elem.parentNode) != document.body && elem != null; )
+ (elem == _viewportTopL || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) && (_boundAncestors.push(elem), _bindingEventService.bind(elem, "scroll." + uid, handleActiveCellPositionChange));
+ }
+ function unbindAncestorScrollEvents() {
+ _boundAncestors.forEach(function(ancestor) {
+ _bindingEventService.unbindByEventName(ancestor, "scroll." + uid);
+ }), _boundAncestors = [];
+ }
+ function updateColumnHeader(columnId, title, toolTip) {
+ if (initialized) {
+ var idx = getColumnIndex(columnId);
+ if (idx != null) {
+ var columnDef = columns[idx], header = getColumnByIndex(idx);
+ header && (title !== void 0 && (columns[idx].name = title), toolTip !== void 0 && (columns[idx].toolTip = toolTip), trigger(self.onBeforeHeaderCellDestroy, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }), header.setAttribute("title", toolTip || ""), title !== void 0 && (header.children[0].innerHTML = sanitizeHtmlString(title)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }));
+ }
+ }
+ }
+ function getHeader(columnDef) {
+ if (!columnDef)
+ return hasFrozenColumns() ? _headers : _headerL;
+ var idx = getColumnIndex(columnDef.id);
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL;
+ }
+ function getHeaderColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), targetHeader = hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL, targetIndex = hasFrozenColumns() ? idx <= options.frozenColumn ? idx : idx - options.frozenColumn - 1 : idx;
+ return targetHeader.children[targetIndex];
+ }
+ function getHeaderRow() {
+ return hasFrozenColumns() ? _headerRows : _headerRows[0];
+ }
+ function getFooterRow() {
+ return hasFrozenColumns() ? _footerRow : _footerRow[0];
+ }
+ function getPreHeaderPanel() {
+ return _preHeaderPanel;
+ }
+ function getPreHeaderPanelRight() {
+ return _preHeaderPanelR;
+ }
+ function getHeaderRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), headerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? headerRowTarget = _headerRowL : (headerRowTarget = _headerRowR, idx -= options.frozenColumn + 1) : headerRowTarget = _headerRowL, headerRowTarget.children[idx];
+ }
+ function getFooterRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), footerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? footerRowTarget = _footerRowL : (footerRowTarget = _footerRowR, idx -= options.frozenColumn + 1) : footerRowTarget = _footerRowL, footerRowTarget.children[idx];
+ }
+ function createColumnFooter() {
+ if (options.createFooterRow) {
+ _footerRow.forEach(function(footer) {
+ footer.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ let columnDef = Utils5.storage.get(column, "column");
+ trigger(self.onBeforeFooterRowCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _footerRowL.replaceChildren(), _footerRowR.replaceChildren();
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ var m = columns[i2];
+ if (!m || m.hidden)
+ continue;
+ let footerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, hasFrozenColumns() && i2 > options.frozenColumn ? _footerRowR : _footerRowL), className = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ className && footerRowCell.classList.add(className), Utils5.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ }
+ function handleHeaderMouseHoverOn(e) {
+ e.target.classList.add("ui-state-hover", "slick-state-hover");
+ }
+ function handleHeaderMouseHoverOff(e) {
+ e.target.classList.remove("ui-state-hover", "slick-state-hover");
+ }
+ function createColumnHeaders() {
+ _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerL.replaceChildren(), _headerR.replaceChildren(), getHeadersWidth(), Utils5.width(_headerL, headersWidthL), Utils5.width(_headerR, headersWidthR), _headerRows.forEach(function(row) {
+ row.querySelectorAll(".slick-headerrow-column").forEach(function(column) {
+ let columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerRowL.replaceChildren(), _headerRowR.replaceChildren(), options.createFooterRow && (_footerRowL.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowL.replaceChildren(), hasFrozenColumns() && (_footerRowR.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowR.replaceChildren()));
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ let m = columns[i2], headerTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerL : _headerR : _headerL, headerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerRowL : _headerRowR : _headerRowL, header = Utils5.createDomElement("div", { id: `${uid + m.id}`, dataset: { id: m.id }, className: "ui-state-default slick-state-default slick-header-column", title: m.toolTip || "" }, headerTarget);
+ Utils5.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(m.name) }, header), Utils5.width(header, m.width - headerColumnWidthDiff);
+ let classname = m.headerCssClass || null;
+ if (classname && header.classList.add(classname), classname = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null, classname && header.classList.add(classname), _bindingEventService.bind(header, "mouseenter", handleHeaderMouseEnter), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseLeave), Utils5.storage.put(header, "column", m), (options.enableColumnReorder || m.sortable) && (_bindingEventService.bind(header, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseHoverOff)), m.hasOwnProperty("headerCellAttrs") && m.headerCellAttrs instanceof Object)
+ for (var key in m.headerCellAttrs)
+ m.headerCellAttrs.hasOwnProperty(key) && header.setAttribute(key, m.headerCellAttrs[key]);
+ if (m.sortable && (header.classList.add("slick-header-sortable"), Utils5.createDomElement("div", { className: `slick-sort-indicator ${options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? " slick-sort-indicator-numbered" : ""}` }, header), options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan && Utils5.createDomElement("div", { className: "slick-sort-indicator-numbered" }, header)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: m,
+ grid: self
+ }), options.showHeaderRow) {
+ let headerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-headerrow-column l${i2} r${i2}` }, headerRowTarget), classname2 = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ classname2 && headerRowCell.classList.add(classname2), _bindingEventService.bind(headerRowCell, "mouseenter", handleHeaderRowMouseEnter), _bindingEventService.bind(headerRowCell, "mouseleave", handleHeaderRowMouseLeave), Utils5.storage.put(headerRowCell, "column", m), trigger(self.onHeaderRowCellRendered, {
+ node: headerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ if (options.createFooterRow && options.showFooterRow) {
+ let footerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _footerRow[0] : _footerRow[1] : _footerRow[0], footerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, footerRowTarget);
+ Utils5.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ setSortColumns(sortColumns), setupColumnResize(), options.enableColumnReorder && (typeof options.enableColumnReorder == "function" ? options.enableColumnReorder(self, _headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger) : setupColumnReorder());
+ }
+ function setupColumnSort() {
+ _headers.forEach(function(header) {
+ _bindingEventService.bind(header, "click", function(e) {
+ if (!columnResizeDragging && !e.target.classList.contains("slick-resizable-handle")) {
+ var coll = e.target.closest(".slick-header-column");
+ if (coll) {
+ var column = Utils5.storage.get(coll, "column");
+ if (column.sortable) {
+ if (!getEditorLock().commitCurrentEdit())
+ return;
+ for (var previousSortColumns = sortColumns.slice(), sortColumn = null, i2 = 0; i2 < sortColumns.length; i2++)
+ if (sortColumns[i2].columnId == column.id) {
+ sortColumn = sortColumns[i2], sortColumn.sortAsc = !sortColumn.sortAsc;
+ break;
+ }
+ var hadSortCol = !!sortColumn;
+ options.tristateMultiColumnSort ? (sortColumn || (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }), hadSortCol && sortColumn.sortAsc && (sortColumns.splice(i2, 1), sortColumn = null), options.multiColumnSort || (sortColumns = []), sortColumn && (!hadSortCol || !options.multiColumnSort) && sortColumns.push(sortColumn)) : e.metaKey && options.multiColumnSort ? sortColumn && sortColumns.splice(i2, 1) : ((!e.shiftKey && !e.metaKey || !options.multiColumnSort) && (sortColumns = []), sortColumn ? sortColumns.length === 0 && sortColumns.push(sortColumn) : (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }, sortColumns.push(sortColumn)));
+ var onSortArgs;
+ options.multiColumnSort ? onSortArgs = {
+ multiColumnSort: !0,
+ previousSortColumns,
+ sortCols: sortColumns.map(function(col) {
+ return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc };
+ })
+ } : onSortArgs = {
+ multiColumnSort: !1,
+ previousSortColumns,
+ columnId: sortColumns.length > 0 ? column.id : null,
+ sortCol: sortColumns.length > 0 ? column : null,
+ sortAsc: sortColumns.length > 0 ? sortColumns[0].sortAsc : !0
+ }, trigger(self.onBeforeSort, onSortArgs, e).getReturnValue() !== !1 && (setSortColumns(sortColumns), trigger(self.onSort, onSortArgs, e));
+ }
+ }
+ }
+ });
+ });
+ }
+ function currentPositionInHeader(id) {
+ let currentPosition = 0;
+ return _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ column.id == id && (currentPosition = i);
+ });
+ }), currentPosition;
+ }
+ function remove(arr, elem) {
+ var index = arr.lastIndexOf(elem);
+ index > -1 && (arr.splice(index, 1), remove(arr, elem));
+ }
+ function setupColumnReorder() {
+ sortableSideLeftInstance && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy());
+ var columnScrollTimer = null;
+ function scrollColumnsRight() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft + 10;
+ }
+ function scrollColumnsLeft() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft - 10;
+ }
+ var canDragScroll, sortableOptions = {
+ animation: 50,
+ direction: "horizontal",
+ chosenClass: "slick-header-column-active",
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dragoverBubble: !1,
+ revertClone: !0,
+ scroll: !hasFrozenColumns(),
+ // enable auto-scroll
+ onStart: function(e) {
+ canDragScroll = !hasFrozenColumns() || Utils5.offset(e.item).left > Utils5.offset(_viewportScrollContainerX).left, canDragScroll && e.originalEvent.pageX > _container.clientWidth ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsRight, 100)) : canDragScroll && e.originalEvent.pageX < Utils5.offset(_viewportScrollContainerX).left ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsLeft, 100)) : (clearInterval(columnScrollTimer), columnScrollTimer = null);
+ },
+ onEnd: function(e) {
+ var cancel = !1;
+ clearInterval(columnScrollTimer), columnScrollTimer = null;
+ var limit = null;
+ if (!(cancel || !getEditorLock().commitCurrentEdit())) {
+ var reorderedIds = sortableSideLeftInstance.toArray();
+ reorderedIds = reorderedIds.concat(sortableSideRightInstance.toArray());
+ for (var reorderedColumns = [], i2 = 0; i2 < reorderedIds.length; i2++)
+ reorderedColumns.push(columns[getColumnIndex(reorderedIds[i2])]);
+ setColumns(reorderedColumns), trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(limit) }), e.stopPropagation(), setupColumnResize();
+ }
+ }
+ };
+ sortableSideLeftInstance = Sortable.create(_headerL, sortableOptions), sortableSideRightInstance = Sortable.create(_headerR, sortableOptions);
+ }
+ function getHeaderChildren() {
+ let a = Array.from(_headers[0].children), b = Array.from(_headers[1].children);
+ return a.concat(b);
+ }
+ function getImpactedColumns(limit) {
+ var impactedColumns = [];
+ if (limit)
+ for (var i2 = limit.start; i2 <= limit.end; i2++)
+ impactedColumns.push(columns[i2]);
+ else
+ impactedColumns = columns;
+ return impactedColumns;
+ }
+ function handleResizeableHandleDoubleClick(evt) {
+ let triggeredByColumn = evt.target.parentElement.id.replace(uid, "");
+ trigger(self.onColumnsResizeDblClick, { triggeredByColumn });
+ }
+ function setupColumnResize() {
+ if (typeof Resizable2 > "u")
+ throw new Error('Slick.Resizable is undefined, make sure to import "slick.interactions.js"');
+ var j, k, c, pageX, minPageX, maxPageX, firstResizable, lastResizable, frozenLeftColMaxWidth = 0;
+ let children = getHeaderChildren();
+ for (let i2 = 0; i2 < children.length; i2++)
+ children[i2].querySelectorAll(".slick-resizable-handle").forEach(function(handle) {
+ handle.remove();
+ }), !(i2 >= columns.length || !columns[i2] || columns[i2].hidden) && columns[i2].resizable && (firstResizable === void 0 && (firstResizable = i2), lastResizable = i2);
+ if (firstResizable !== void 0)
+ for (let i2 = 0; i2 < children.length; i2++) {
+ let colElm = children[i2];
+ if (i2 >= columns.length || !columns[i2] || columns[i2].hidden || i2 < firstResizable || options.forceFitColumns && i2 >= lastResizable)
+ continue;
+ let resizeableHandle = Utils5.createDomElement("div", { className: "slick-resizable-handle", role: "separator", ariaOrientation: "horizontal" }, colElm);
+ _bindingEventService.bind(resizeableHandle, "dblclick", handleResizeableHandleDoubleClick), slickResizableInstances.push(
+ Resizable2({
+ resizeableElement: colElm,
+ resizeableHandleElement: resizeableHandle,
+ onResizeStart: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ if (!getEditorLock().commitCurrentEdit())
+ return !1;
+ pageX = targetEvent.pageX, frozenLeftColMaxWidth = 0, resizeElms.resizeableElement.classList.add("slick-header-column-active");
+ var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;
+ for (let pw = 0; pw < children.length; pw++)
+ pw >= columns.length || !columns[pw] || columns[pw].hidden || (columns[pw].previousWidth = children[pw].offsetWidth);
+ if (options.forceFitColumns)
+ for (shrinkLeewayOnRight = 0, stretchLeewayOnRight = 0, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnRight !== null && (c.maxWidth ? stretchLeewayOnRight += c.maxWidth - c.previousWidth : stretchLeewayOnRight = null), shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;
+ for (j = 0; j <= i2; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnLeft !== null && (c.maxWidth ? stretchLeewayOnLeft += c.maxWidth - c.previousWidth : stretchLeewayOnLeft = null), shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ shrinkLeewayOnRight === null && (shrinkLeewayOnRight = 1e5), shrinkLeewayOnLeft === null && (shrinkLeewayOnLeft = 1e5), stretchLeewayOnRight === null && (stretchLeewayOnRight = 1e5), stretchLeewayOnLeft === null && (stretchLeewayOnLeft = 1e5), maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft), minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);
+ },
+ onResize: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ columnResizeDragging = !0;
+ var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, targetEvent.pageX)) - pageX, x, newCanvasWidthL = 0, newCanvasWidthR = 0, viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ if (d < 0) {
+ for (x = d, j = i2; j >= 0; j--)
+ c = columns[j], c && c.resizable && !c.hidden && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0));
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0));
+ } else {
+ for (x = d, newCanvasWidthL = 0, newCanvasWidthR = 0, j = i2; j >= 0; j--)
+ if (c = columns[j], !(!c || c.hidden) && c.resizable)
+ if (x && c.maxWidth && c.maxWidth - c.previousWidth < x)
+ x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth;
+ else {
+ var newWidth = c.previousWidth + x, resizedCanvasWidthL = canvasWidthL + x;
+ hasFrozenColumns() && j <= options.frozenColumn ? (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < viewportWidth - options.frozenRightViewportMinWidth && (frozenLeftColMaxWidth = newWidth), c.width = resizedCanvasWidthL + options.frozenRightViewportMinWidth > viewportWidth ? frozenLeftColMaxWidth : newWidth) : c.width = newWidth, x = 0;
+ }
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ }
+ hasFrozenColumns() && newCanvasWidthL != canvasWidthL && (Utils5.width(_headerL, newCanvasWidthL + 1e3), Utils5.setStyleSize(_paneHeaderR, "left", newCanvasWidthL)), applyColumnHeaderWidths(), options.syncColumnCellResize && applyColumnWidths(), trigger(self.onColumnsDrag, {
+ triggeredByColumn: resizeElms.resizeableElement,
+ resizeHandle: resizeElms.resizeableHandleElement
+ });
+ },
+ onResizeEnd: function(e, resizeElms) {
+ resizeElms.resizeableElement.classList.remove("slick-header-column-active");
+ var triggeredByColumn = resizeElms.resizeableElement.id.replace(uid, "");
+ trigger(self.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === !0 && applyColumnHeaderWidths();
+ var newWidth;
+ for (j = 0; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (newWidth = children[j].offsetWidth, c.previousWidth !== newWidth && c.rerenderOnResize && invalidateAllRows());
+ updateCanvasWidth(!0), render(), trigger(self.onColumnsResized, { triggeredByColumn }), setTimeout(function() {
+ columnResizeDragging = !1;
+ }, 300);
+ }
+ })
+ );
+ }
+ }
+ function getVBoxDelta(el) {
+ var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], styles = getComputedStyle(el), delta = 0;
+ return p.forEach(function(val) {
+ delta += Utils5.toFloat(styles[val]);
+ }), delta;
+ }
+ function setFrozenOptions() {
+ if (options.frozenColumn = options.frozenColumn >= 0 && options.frozenColumn < columns.length ? parseInt(options.frozenColumn) : -1, options.frozenRow > -1) {
+ hasFrozenRows = !0, frozenRowsHeight = options.frozenRow * options.rowHeight;
+ var dataLength = getDataLength();
+ actualFrozenRow = options.frozenBottom ? dataLength - options.frozenRow : options.frozenRow;
+ } else
+ hasFrozenRows = !1;
+ }
+ function setPaneVisibility() {
+ hasFrozenColumns() ? (show2(_paneHeaderR), show2(_paneTopR), hasFrozenRows ? (show2(_paneBottomL), show2(_paneBottomR)) : (hide2(_paneBottomR), hide2(_paneBottomL))) : (hide2(_paneHeaderR), hide2(_paneTopR), hide2(_paneBottomR), hasFrozenRows ? show2(_paneBottomL) : (hide2(_paneBottomR), hide2(_paneBottomL)));
+ }
+ function setOverflow() {
+ _viewportTopL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportTopR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), hasFrozenRows ? "scroll" : "auto"), _viewportBottomL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportBottomR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), "auto"), options.viewportClass && (_viewportTopL.classList.add(options.viewportClass), _viewportTopR.classList.add(options.viewportClass), _viewportBottomL.classList.add(options.viewportClass), _viewportBottomR.classList.add(options.viewportClass));
+ }
+ function setScroller() {
+ hasFrozenColumns() ? (_headerScrollContainer = _headerScrollerR, _headerRowScrollContainer = _headerRowScrollerR, _footerRowScrollContainer = _footerRowScrollerR, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomR, _viewportScrollContainerY = _viewportTopR) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomR : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopR) : (_headerScrollContainer = _headerScrollerL, _headerRowScrollContainer = _headerRowScrollerL, _footerRowScrollContainer = _footerRowScrollerL, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomL, _viewportScrollContainerY = _viewportTopL) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomL : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopL);
+ }
+ function measureCellPaddingAndBorder() {
+ let h2 = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], header = _headers[0];
+ headerColumnWidthDiff = headerColumnHeightDiff = 0, cellWidthDiff = cellHeightDiff = 0;
+ let el = Utils5.createDomElement("div", { className: "ui-state-default slick-state-default slick-header-column", style: { visibility: "hidden" }, textContent: "-" }, header), style = getComputedStyle(el);
+ style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ headerColumnWidthDiff += Utils5.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ headerColumnHeightDiff += Utils5.toFloat(style[val]);
+ })), el.remove();
+ let r = Utils5.createDomElement("div", { className: "slick-row" }, _canvas[0]);
+ el = Utils5.createDomElement("div", { className: "slick-cell", id: "", style: { visibility: "hidden", textContent: "-" } }, r), style = getComputedStyle(el), style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ cellWidthDiff += Utils5.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ cellHeightDiff += Utils5.toFloat(style[val]);
+ })), r.remove(), absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
+ }
+ function createCssRules() {
+ _style = Utils5.createDomElement("template", { innerHTML: '' }).content.firstChild, document.head.appendChild(_style);
+ for (var rowHeight = options.rowHeight - cellHeightDiff, rules = [
+ "." + uid + " .slick-group-header-column { left: 1000px; }",
+ "." + uid + " .slick-header-column { left: 1000px; }",
+ "." + uid + " .slick-top-panel { height:" + options.topPanelHeight + "px; }",
+ "." + uid + " .slick-preheader-panel { height:" + options.preHeaderPanelHeight + "px; }",
+ "." + uid + " .slick-headerrow-columns { height:" + options.headerRowHeight + "px; }",
+ "." + uid + " .slick-footerrow-columns { height:" + options.footerRowHeight + "px; }",
+ "." + uid + " .slick-cell { height:" + rowHeight + "px; }",
+ "." + uid + " .slick-row { height:" + options.rowHeight + "px; }"
+ ], i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (rules.push("." + uid + " .l" + i2 + " { }"), rules.push("." + uid + " .r" + i2 + " { }"));
+ _style.styleSheet ? _style.styleSheet.cssText = rules.join(" ") : _style.appendChild(document.createTextNode(rules.join(" ")));
+ }
+ function getColumnCssRules(idx) {
+ var i2;
+ if (!stylesheet) {
+ var sheets = document.styleSheets;
+ for (i2 = 0; i2 < sheets.length; i2++)
+ if ((sheets[i2].ownerNode || sheets[i2].owningElement) == _style) {
+ stylesheet = sheets[i2];
+ break;
+ }
+ if (!stylesheet)
+ throw new Error("SlickGrid Cannot find stylesheet.");
+ columnCssRulesL = [], columnCssRulesR = [];
+ var cssRules = stylesheet.cssRules || stylesheet.rules, matches, columnIdx;
+ for (i2 = 0; i2 < cssRules.length; i2++) {
+ var selector = cssRules[i2].selectorText;
+ (matches = /\.l\d+/.exec(selector)) ? (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesL[columnIdx] = cssRules[i2]) : (matches = /\.r\d+/.exec(selector)) && (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesR[columnIdx] = cssRules[i2]);
+ }
+ }
+ return {
+ left: columnCssRulesL[idx],
+ right: columnCssRulesR[idx]
+ };
+ }
+ function removeCssRules() {
+ _style.remove(), stylesheet = null;
+ }
+ function destroy(shouldDestroyAllElements) {
+ _bindingEventService.unbindAll(), slickDraggableInstance = destroyAllInstances(slickDraggableInstance), slickMouseWheelInstances = destroyAllInstances(slickMouseWheelInstances), slickResizableInstances = destroyAllInstances(slickResizableInstances), getEditorLock().cancelCurrentEdit(), trigger(self.onBeforeDestroy, {});
+ for (var i2 = plugins.length; i2--; )
+ unregisterPlugin(plugins[i2]);
+ options.enableColumnReorder && sortableSideLeftInstance && typeof sortableSideLeftInstance.destroy == "function" && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy()), unbindAncestorScrollEvents(), _bindingEventService.unbindByEventName(_container, "resize.slickgrid", resizeCanvas), removeCssRules(), _canvas.forEach(function(element) {
+ _bindingEventService.unbindByEventName(element, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(element, "click", handleClick), _bindingEventService.unbindByEventName(element, "dblclick", handleDblClick), _bindingEventService.unbindByEventName(element, "contextmenu", handleContextMenu), _bindingEventService.unbindByEventName(element, "mouseover", handleCellMouseOver), _bindingEventService.unbindByEventName(element, "mouseout", handleCellMouseOut);
+ }), _viewport.forEach(function(view) {
+ _bindingEventService.unbindByEventName(view, "scroll", handleScroll);
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.unbindByEventName(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.unbindByEventName(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleHeaderRowScroll);
+ }), _footerRow && _footerRow.forEach(function(footer) {
+ _bindingEventService.unbindByEventName(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.unbindByEventName(footer, "click", handleFooterClick);
+ }), _footerRowScroller && _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleFooterRowScroll);
+ }), _preHeaderPanelScroller && _bindingEventService.unbindByEventName(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.unbindByEventName(_focusSink, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(_focusSink2, "keydown", handleKeyDown);
+ let resizeHandles = _container.querySelectorAll(".slick-resizable-handle");
+ [].forEach.call(resizeHandles, function(handle) {
+ _bindingEventService.unbindByEventName(handle, "dblclick", handleResizeableHandleDoubleClick);
+ });
+ let headerColumns = _container.querySelectorAll(".slick-header-column");
+ [].forEach.call(headerColumns, function(column) {
+ _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseEnter), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseLeave), _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseHoverOff);
+ }), _container.replaceChildren(), _container.classList.remove(uid), shouldDestroyAllElements && destroyAllElements();
+ }
+ function destroyAllInstances(inputInstances) {
+ if (inputInstances) {
+ let instances = Array.isArray(inputInstances) ? inputInstances : [inputInstances], instance;
+ for (; (instance = instances.pop()) != null; )
+ instance && typeof instance.destroy == "function" && instance.destroy();
+ }
+ return inputInstances = Array.isArray(inputInstances) ? [] : null, inputInstances;
+ }
+ function destroyAllElements() {
+ _activeCanvasNode = null, _activeViewportNode = null, _boundAncestors = null, _canvas = null, _canvasTopL = null, _canvasTopR = null, _canvasBottomL = null, _canvasBottomR = null, _container = null, _focusSink = null, _focusSink2 = null, _groupHeaders = null, _groupHeadersL = null, _groupHeadersR = null, _headerL = null, _headerR = null, _headers = null, _headerRows = null, _headerRowL = null, _headerRowR = null, _headerRowSpacerL = null, _headerRowSpacerR = null, _headerRowScrollContainer = null, _headerRowScroller = null, _headerRowScrollerL = null, _headerRowScrollerR = null, _headerScrollContainer = null, _headerScroller = null, _headerScrollerL = null, _headerScrollerR = null, _hiddenParents = null, _footerRow = null, _footerRowL = null, _footerRowR = null, _footerRowSpacerL = null, _footerRowSpacerR = null, _footerRowScroller = null, _footerRowScrollerL = null, _footerRowScrollerR = null, _footerRowScrollContainer = null, _preHeaderPanel = null, _preHeaderPanelR = null, _preHeaderPanelScroller = null, _preHeaderPanelScrollerR = null, _preHeaderPanelSpacer = null, _preHeaderPanelSpacerR = null, _topPanels = null, _topPanelScrollers = null, _style = null, _topPanelScrollerL = null, _topPanelScrollerR = null, _topPanelL = null, _topPanelR = null, _paneHeaderL = null, _paneHeaderR = null, _paneTopL = null, _paneTopR = null, _paneBottomL = null, _paneBottomR = null, _viewport = null, _viewportTopL = null, _viewportTopR = null, _viewportBottomL = null, _viewportBottomR = null, _viewportScrollContainerX = null, _viewportScrollContainerY = null;
+ }
+ var canvas = null, canvas_context = null;
+ function autosizeColumn(columnOrIndexOrId, isInit) {
+ var colDef = null, colIndex = -1;
+ if (typeof columnOrIndexOrId == "number")
+ colDef = columns[columnOrIndexOrId], colIndex = columnOrIndexOrId;
+ else if (typeof columnOrIndexOrId == "string")
+ for (i = 0; i < columns.length; i++)
+ columns[i].Id === columnOrIndexOrId && (colDef = columns[i], colIndex = i);
+ if (!colDef)
+ return;
+ let gridCanvas = getCanvasNode(0, 0);
+ getColAutosizeWidth(colDef, colIndex, gridCanvas, isInit, colIndex);
+ }
+ function treatAsLocked(autoSize) {
+ return !autoSize.ignoreHeaderText && !autoSize.sizeToRemaining && autoSize.contentSizePx === autoSize.headerWidthPx && autoSize.widthPx < 100;
+ }
+ function autosizeColumns(autosizeMode, isInit) {
+ var cssCache = { hiddenParents: null, oldPropArr: [] };
+ cacheCssForHiddenInit(cssCache), internalAutosizeColumns(autosizeMode, isInit), restoreCssFromHiddenInit(cssCache);
+ }
+ function internalAutosizeColumns(autosizeMode, isInit) {
+ if (autosizeMode = autosizeMode || options.autosizeColsMode, autosizeMode === GridAutosizeColsMode2.LegacyForceFit || autosizeMode === GridAutosizeColsMode2.LegacyOff) {
+ legacyAutosizeColumns();
+ return;
+ }
+ if (autosizeMode !== GridAutosizeColsMode2.None) {
+ canvas = document.createElement("canvas"), canvas && canvas.getContext && (canvas_context = canvas.getContext("2d"));
+ var gridCanvas = getCanvasNode(0, 0), viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2, c, colWidth, reRender, totalWidth = 0, totalWidthLessSTR = 0, strColsMinWidth = 0, totalMinWidth = 0, totalLockedColWidth = 0;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], getColAutosizeWidth(c, i2, gridCanvas, isInit, i2), totalLockedColWidth += c.autoSize.autosizeMode === ColAutosizeMode2.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : 0, totalMinWidth += c.autoSize.autosizeMode === ColAutosizeMode2.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : c.minWidth, totalWidth += c.autoSize.widthPx, totalWidthLessSTR += c.autoSize.sizeToRemaining ? 0 : c.autoSize.widthPx, strColsMinWidth += c.autoSize.sizeToRemaining && c.minWidth || 0;
+ var strColTotalGuideWidth = totalWidth - totalWidthLessSTR;
+ if (autosizeMode === GridAutosizeColsMode2.FitViewportToCols) {
+ var setWidth = totalWidth + scrollbarDimensions.width;
+ autosizeMode = GridAutosizeColsMode2.IgnoreViewport, options.viewportMaxWidthPx && setWidth > options.viewportMaxWidthPx ? (setWidth = options.viewportMaxWidthPx, autosizeMode = GridAutosizeColsMode2.FitColsToViewport) : options.viewportMinWidthPx && setWidth < options.viewportMinWidthPx && (setWidth = options.viewportMinWidthPx, autosizeMode = GridAutosizeColsMode2.FitColsToViewport), Utils5.width(_container, setWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode2.FitColsToViewport)
+ if (strColTotalGuideWidth > 0 && totalWidthLessSTR < viewportWidth - strColsMinWidth) {
+ for (i2 = 0; i2 < columns.length; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var totalSTRViewportWidth = viewportWidth - totalWidthLessSTR;
+ c.autoSize.sizeToRemaining ? colWidth = totalSTRViewportWidth * c.autoSize.widthPx / strColTotalGuideWidth : colWidth = c.autoSize.widthPx, c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth;
+ }
+ } else if (options.viewportSwitchToScrollModeWidthPercent && totalWidthLessSTR + strColsMinWidth > viewportWidth * options.viewportSwitchToScrollModeWidthPercent / 100 || totalMinWidth > viewportWidth)
+ autosizeMode = GridAutosizeColsMode2.IgnoreViewport;
+ else {
+ var unallocatedColWidth = totalWidthLessSTR - totalLockedColWidth, unallocatedViewportWidth = viewportWidth - totalLockedColWidth - strColsMinWidth;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (colWidth = c.width, c.autoSize.autosizeMode !== ColAutosizeMode2.Locked && !treatAsLocked(c.autoSize) && (c.autoSize.sizeToRemaining ? colWidth = c.minWidth : (colWidth = unallocatedViewportWidth / unallocatedColWidth * c.autoSize.widthPx - 1, colWidth < c.minWidth && (colWidth = c.minWidth), unallocatedColWidth -= c.autoSize.widthPx, unallocatedViewportWidth -= colWidth)), treatAsLocked(c.autoSize) && (colWidth = c.autoSize.widthPx, colWidth < c.minWidth && (colWidth = c.minWidth)), c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode2.IgnoreViewport)
+ for (i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (colWidth = columns[i2].autoSize.widthPx, columns[i2].rerenderOnResize && columns[i2].width != colWidth && (reRender = !0), columns[i2].width = colWidth);
+ reRenderColumns(reRender);
+ }
+ }
+ function LogColWidths() {
+ for (var s = "Col Widths:", i2 = 0; i2 < columns.length; i2++)
+ s += " " + (columns[i2].hidden ? "H" : columns[i2].width);
+ console.log(s);
+ }
+ function getColAutosizeWidth(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize;
+ if (autoSize.widthPx = columnDef.width, autoSize.autosizeMode === ColAutosizeMode2.Locked || autoSize.autosizeMode === ColAutosizeMode2.Guide)
+ return;
+ var dl = getDataLength();
+ let isoDateRegExp = new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z/);
+ if (autoSize.autosizeMode === ColAutosizeMode2.ContentIntelligent) {
+ var colDataTypeOf = autoSize.colDataTypeOf, colDataItem;
+ if (dl > 0) {
+ var tempRow = getDataItem(0);
+ tempRow && (colDataItem = tempRow[columnDef.field], isoDateRegExp.test(colDataItem) && (colDataItem = Date.parse(colDataItem)), colDataTypeOf = typeof colDataItem, colDataTypeOf === "object" && (colDataItem instanceof Date && (colDataTypeOf = "date"), typeof moment < "u" && colDataItem instanceof moment && (colDataTypeOf = "moment")));
+ }
+ colDataTypeOf === "boolean" && (autoSize.colValueArray = [!0, !1]), colDataTypeOf === "number" && (autoSize.valueFilterMode = ValueFilterMode2.GetGreatestAndSub, autoSize.rowSelectionMode = RowSelectionMode2.AllRows), colDataTypeOf === "string" && (autoSize.valueFilterMode = ValueFilterMode2.GetLongestText, autoSize.rowSelectionMode = RowSelectionMode2.AllRows, autoSize.allowAddlPercent = 5), colDataTypeOf === "date" && (autoSize.colValueArray = [new Date(2009, 8, 30, 12, 20, 20)]), colDataTypeOf === "moment" && typeof moment < "u" && (autoSize.colValueArray = [moment([2009, 8, 30, 12, 20, 20])]);
+ }
+ var colWidth = autoSize.contentSizePx = getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex);
+ colWidth === 0 && (colWidth = autoSize.widthPx);
+ var addlPercentMultiplier = autoSize.allowAddlPercent ? 1 + autoSize.allowAddlPercent / 100 : 1;
+ colWidth = colWidth * addlPercentMultiplier + options.autosizeColPaddingPx, columnDef.minWidth && colWidth < columnDef.minWidth && (colWidth = columnDef.minWidth), columnDef.maxWidth && colWidth > columnDef.maxWidth && (colWidth = columnDef.maxWidth), (autoSize.autosizeMode === ColAutosizeMode2.ContentExpandOnly || columnDef.editor && columnDef.editor.ControlFillsColumn) && colWidth < columnDef.width && (colWidth = columnDef.width), autoSize.widthPx = colWidth;
+ }
+ function getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize, widthAdjustRatio = 1, i2, ii, tempVal, maxLen = 0, maxColWidth = 0;
+ if (autoSize.headerWidthPx = 0, autoSize.ignoreHeaderText || (autoSize.headerWidthPx = getColHeaderWidth(columnDef)), autoSize.headerWidthPx === 0 && (autoSize.headerWidthPx = columnDef.width ? columnDef.width : columnDef.maxWidth ? columnDef.maxWidth : columnDef.minWidth ? columnDef.minWidth : 20), autoSize.colValueArray)
+ return maxColWidth = getColWidth(columnDef, gridCanvas, autoSize.colValueArray), Math.max(autoSize.headerWidthPx, maxColWidth);
+ var rowInfo = {};
+ rowInfo.colIndex = colIndex, rowInfo.rowCount = getDataLength(), rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.rowCount - 1, rowInfo.valueArr = null, rowInfo.getRowVal = function(i3) {
+ return getDataItem(i3)[columnDef.field];
+ };
+ var rowSelectionMode = (isInit ? autoSize.rowSelectionModeOnInit : void 0) || autoSize.rowSelectionMode;
+ if (rowSelectionMode === RowSelectionMode2.FirstRow && (rowInfo.endIndex = 0), rowSelectionMode === RowSelectionMode2.LastRow && (rowInfo.endIndex = rowInfo.startIndex = rowInfo.rowCount - 1), rowSelectionMode === RowSelectionMode2.FirstNRows && (rowInfo.endIndex = Math.min(autoSize.rowSelectionCount, rowInfo.rowCount) - 1), autoSize.valueFilterMode === ValueFilterMode2.DeDuplicate) {
+ var rowsDict = {};
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ rowsDict[rowInfo.getRowVal(i2)] = !0;
+ if (Object.keys)
+ rowInfo.valueArr = Object.keys(rowsDict);
+ else {
+ rowInfo.valueArr = [];
+ for (var v in rowsDict)
+ rowInfo.valueArr.push(v);
+ }
+ rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.length - 1;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetGreatestAndSub) {
+ var maxVal, maxAbsVal = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), Math.abs(tempVal) > maxAbsVal && (maxVal = tempVal, maxAbsVal = Math.abs(tempVal));
+ maxVal = "" + maxVal, maxVal = Array(maxVal.length + 1).join("9"), maxVal = +maxVal, rowInfo.valueArr = [maxVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetLongestTextAndSub) {
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length);
+ tempVal = Array(maxLen + 1).join("m"), widthAdjustRatio = options.autosizeTextAvgToMWidthRatio, rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetLongestText) {
+ maxLen = 0;
+ var maxIndex = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length, maxIndex = i2);
+ tempVal = rowInfo.getRowVal(maxIndex), rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ return rowInfo.maxLen && rowInfo.maxLen > 30 && colArrayIndex > 1 && (autoSize.sizeToRemaining = !0), maxColWidth = getColWidth(columnDef, gridCanvas, rowInfo) * widthAdjustRatio, Math.max(autoSize.headerWidthPx, maxColWidth);
+ }
+ function getColWidth(columnDef, gridCanvas, rowInfo) {
+ let rowEl = Utils5.createDomElement("div", { className: "slick-row ui-widget-content" }, gridCanvas), cellEl = Utils5.createDomElement("div", { className: "slick-cell" }, rowEl);
+ cellEl.style.position = "absolute", cellEl.style.visibility = "hidden", cellEl.style["text-overflow"] = "initial", cellEl.style["white-space"] = "nowrap";
+ var i2, len, max = 0, text, maxText, formatterResult, maxWidth = 0, val, useCanvas = columnDef.autoSize.widthEvalMode === WidthEvalMode2.TextOnly;
+ if (columnDef.autoSize.widthEvalMode === WidthEvalMode2.Auto) {
+ var noFormatter = !columnDef.formatterOverride && !columnDef.formatter, formatterIsText = columnDef.formatterOverride && columnDef.formatterOverride.ReturnsTextOnly || !columnDef.formatterOverride && columnDef.formatter && columnDef.formatter.ReturnsTextOnly;
+ useCanvas = noFormatter || formatterIsText;
+ }
+ if (canvas_context && useCanvas) {
+ let style = getComputedStyle(cellEl);
+ for (canvas_context.font = style["font-size"] + " " + style["font-family"], i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, len = formatterResult ? canvas_context.measureText(formatterResult).width : 0, len > max && (max = len, maxText = formatterResult);
+ return cellEl.innerHTML = maxText, len = cellEl.offsetWidth, rowEl.remove(), len;
+ }
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, applyFormatResultToCellNode(formatterResult, cellEl), len = cellEl.offsetWidth, len > max && (max = len);
+ return rowEl.remove(), max;
+ }
+ function getColHeaderWidth(columnDef) {
+ var width2 = 0, headerColElId = getUID() + columnDef.id, headerColEl = document.getElementById(headerColElId), dummyHeaderColElId = headerColElId + "_";
+ if (headerColEl) {
+ var clone = headerColEl.cloneNode(!0);
+ clone.id = dummyHeaderColElId, clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.parentNode.insertBefore(clone, headerColEl), width2 = clone.offsetWidth, clone.parentNode.removeChild(clone);
+ } else {
+ let header = getHeader(columnDef);
+ headerColEl = Utils5.createDomElement("div", { id: dummyHeaderColElId, className: "ui-state-default slick-state-default slick-header-column" }, header), Utils5.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(columnDef.name) }, headerColEl), clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.classList.add(columnDef.headerCssClass || ""), width2 = headerColEl.offsetWidth, header.removeChild(headerColEl);
+ }
+ return width2;
+ }
+ function legacyAutosizeColumns() {
+ var i2, c, widths = [], shrinkLeeway = 0, total = 0, prevTotal, availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (widths.push(c.width), total += c.width, c.resizable && (shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth)));
+ for (prevTotal = total; total > availWidth && shrinkLeeway; ) {
+ var shrinkProportion = (total - availWidth) / shrinkLeeway;
+ for (i2 = 0; i2 < columns.length && total > availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var width2 = widths[i2];
+ if (!(!c.resizable || width2 <= c.minWidth || width2 <= absoluteColumnMinWidth)) {
+ var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth), shrinkSize = Math.floor(shrinkProportion * (width2 - absMinWidth)) || 1;
+ shrinkSize = Math.min(shrinkSize, width2 - absMinWidth), total -= shrinkSize, shrinkLeeway -= shrinkSize, widths[i2] -= shrinkSize;
+ }
+ }
+ if (prevTotal <= total)
+ break;
+ prevTotal = total;
+ }
+ for (prevTotal = total; total < availWidth; ) {
+ var growProportion = availWidth / total;
+ for (i2 = 0; i2 < columns.length && total < availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var currentWidth = widths[i2], growSize;
+ !c.resizable || c.maxWidth <= currentWidth ? growSize = 0 : growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, c.maxWidth - currentWidth || 1e6) || 1, total += growSize, widths[i2] += total <= availWidth ? growSize : 0;
+ }
+ if (prevTotal >= total)
+ break;
+ prevTotal = total;
+ }
+ var reRender = !1;
+ for (i2 = 0; i2 < columns.length; i2++)
+ !c || c.hidden || (columns[i2].rerenderOnResize && columns[i2].width != widths[i2] && (reRender = !0), columns[i2].width = widths[i2]);
+ reRenderColumns(reRender);
+ }
+ function reRenderColumns(reRender) {
+ applyColumnHeaderWidths(), updateCanvasWidth(!0), trigger(self.onAutosizeColumns, { columns }), reRender && (invalidateAllRows(), render());
+ }
+ function getVisibleColumns() {
+ return columns.filter((c) => !c.hidden);
+ }
+ function trigger(evt, args, e) {
+ return e = e || new EventData3(e, args), args = args || {}, args.grid = self, evt.notify(args, e, self);
+ }
+ function getEditorLock() {
+ return options.editorLock;
+ }
+ function getEditController() {
+ return editController;
+ }
+ function getColumnIndex(id) {
+ return columnsById[id];
+ }
+ function applyColumnHeaderWidths() {
+ if (!initialized)
+ return;
+ let columnIndex = 0, vc = getVisibleColumns();
+ _headers.forEach(function(header) {
+ for (let i2 = 0; i2 < header.children.length; i2++, columnIndex++) {
+ let h2 = header.children[i2], width2 = ((vc[columnIndex] || {}).width || 0) - headerColumnWidthDiff;
+ Utils5.width(h2) !== width2 && Utils5.width(h2, width2);
+ }
+ }), updateColumnCaches();
+ }
+ function applyColumnWidths() {
+ for (var x = 0, w, rule, i2 = 0; i2 < columns.length; i2++)
+ columns[i2] && columns[i2].hidden || (w = columns[i2].width, rule = getColumnCssRules(i2), rule.left.style.left = x + "px", rule.right.style.right = (options.frozenColumn != -1 && i2 > options.frozenColumn ? canvasWidthR : canvasWidthL) - x - w + "px", options.frozenColumn != i2 && (x += columns[i2].width)), options.frozenColumn == i2 && (x = 0);
+ }
+ function setSortColumn(columnId, ascending) {
+ setSortColumns([{ columnId, sortAsc: ascending }]);
+ }
+ function getColumnByIndex(id) {
+ let result = null;
+ return _headers.every(function(header) {
+ let length = header.children.length;
+ return id < length ? (result = header.children[id], !1) : (id -= length, !0);
+ }), result;
+ }
+ function setSortColumns(cols) {
+ sortColumns = cols;
+ let numberCols = options.numberedMultiColumnSort && sortColumns.length > 1;
+ _headers.forEach(function(header) {
+ let indicators = header.querySelectorAll(".slick-header-column-sorted");
+ indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-header-column-sorted");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator"), indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-sort-indicator-asc"), indicator.classList.remove("slick-sort-indicator-desc");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator-numbered"), indicators.forEach(function(el) {
+ el.textContent = "";
+ });
+ });
+ let i2 = 1;
+ sortColumns.forEach(function(col) {
+ col.sortAsc == null && (col.sortAsc = !0);
+ let columnIndex = getColumnIndex(col.columnId);
+ if (columnIndex != null) {
+ let column = getColumnByIndex(columnIndex);
+ if (column) {
+ column.classList.add("slick-header-column-sorted");
+ let indicator = column.querySelector(".slick-sort-indicator");
+ indicator.classList.add(col.sortAsc ? "slick-sort-indicator-asc" : "slick-sort-indicator-desc"), numberCols && (indicator = column.querySelector(".slick-sort-indicator-numbered"), indicator.textContent = i2);
+ }
+ }
+ i2++;
+ });
+ }
+ function getSortColumns() {
+ return sortColumns;
+ }
+ function handleSelectedRangesChanged(e, ranges) {
+ let ne = e.getNativeEvent();
+ var previousSelectedRows = selectedRows.slice(0);
+ selectedRows = [];
+ for (var hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] || (selectedRows.push(j), hash[j] = {});
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell; k++)
+ canCellBeSelected(j, k) && (hash[j][columns[k].id] = options.selectedCellCssClass);
+ }
+ if (setCellCssStyles(options.selectedCellCssClass, hash), simpleArrayEquals(previousSelectedRows, selectedRows)) {
+ var caller = ne && ne.detail && ne.detail.caller || "click", newSelectedAdditions = getSelectedRows().filter(function(i3) {
+ return previousSelectedRows.indexOf(i3) < 0;
+ }), newSelectedDeletions = previousSelectedRows.filter(function(i3) {
+ return getSelectedRows().indexOf(i3) < 0;
+ });
+ trigger(self.onSelectedRowsChanged, {
+ rows: getSelectedRows(),
+ previousSelectedRows,
+ caller,
+ changedSelectedRows: newSelectedAdditions,
+ changedUnselectedRows: newSelectedDeletions
+ }, e);
+ }
+ }
+ function simpleArrayEquals(arr1, arr2) {
+ return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();
+ }
+ function getColumns() {
+ return columns;
+ }
+ function updateColumnCaches() {
+ columnPosLeft = [], columnPosRight = [];
+ for (var x = 0, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ !columns[i2] || columns[i2].hidden || (columnPosLeft[i2] = x, columnPosRight[i2] = x + columns[i2].width, options.frozenColumn == i2 ? x = 0 : x += columns[i2].width);
+ }
+ function updateColumnProps() {
+ columnsById = {};
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ columns[i2].width && (columns[i2].widthRequest = columns[i2].width);
+ var m = columns[i2] = Utils5.extend({}, columnDefaults, columns[i2]);
+ m.autoSize = Utils5.extend({}, columnAutosizeDefaults, m.autoSize), columnsById[m.id] = i2, m.minWidth && m.width < m.minWidth && (m.width = m.minWidth), m.maxWidth && m.width > m.maxWidth && (m.width = m.maxWidth);
+ }
+ }
+ function setColumns(columnDefinitions) {
+ trigger(self.onBeforeSetColumns, { previousColumns: columns, newColumns: columnDefinitions, grid: self }), columns = columnDefinitions, columns = columnDefinitions, updateColumnsInternal();
+ }
+ function updateColumns() {
+ trigger(self.onBeforeUpdateColumns, { columns, grid: self }), updateColumnsInternal();
+ }
+ function updateColumnsInternal() {
+ updateColumnProps(), updateColumnCaches(), initialized && (setPaneVisibility(), setOverflow(), invalidateAllRows(), createColumnHeaders(), createColumnFooter(), removeCssRules(), createCssRules(), resizeCanvas(), updateCanvasWidth(), applyColumnHeaderWidths(), applyColumnWidths(), handleScroll(), getSelectionModel() && getSelectionModel().refreshSelections && getSelectionModel().refreshSelections());
+ }
+ function getOptions() {
+ return options;
+ }
+ function setOptions(args, suppressRender, suppressColumnSet, suppressSetOverflow) {
+ if (getEditorLock().commitCurrentEdit()) {
+ makeActiveCellNormal(), args.showColumnHeader !== void 0 && setColumnHeaderVisibility(args.showColumnHeader), options.enableAddRow !== args.enableAddRow && invalidateRow(getDataLength());
+ var originalOptions = Utils5.extend(!0, {}, options);
+ options = Utils5.extend(options, args), trigger(self.onSetOptions, { optionsBefore: originalOptions, optionsAfter: options }), validateAndEnforceOptions(), setFrozenOptions(), args.frozenBottom !== void 0 && (enforceFrozenRowHeightRecalc = !0), _viewport.forEach(function(view) {
+ view.style["overflow-y"] = options.autoHeight ? "hidden" : "auto";
+ }), suppressRender || render(), setScroller(), suppressSetOverflow || setOverflow(), suppressColumnSet || setColumns(columns), options.enableMouseWheelScrollHandler && _viewport && (!slickMouseWheelInstances || slickMouseWheelInstances.length === 0) ? _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel2({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }) : options.enableMouseWheelScrollHandler === !1 && destroyAllInstances(slickMouseWheelInstances);
+ }
+ }
+ function validateAndEnforceOptions() {
+ options.autoHeight && (options.leaveSpaceForNewRows = !1), options.forceFitColumns && (options.autosizeColsMode = GridAutosizeColsMode2.LegacyForceFit, console.log("forceFitColumns option is deprecated - use autosizeColsMode"));
+ }
+ function setData(newData, scrollToTop) {
+ data = newData, invalidateAllRows(), updateRowCount(), scrollToTop && scrollTo(0);
+ }
+ function getData() {
+ return data;
+ }
+ function getDataLength() {
+ return data.getLength ? data.getLength() : data && data.length || 0;
+ }
+ function getDataLengthIncludingAddNew() {
+ return getDataLength() + (options.enableAddRow && (!pagingActive || pagingIsLastPage) ? 1 : 0);
+ }
+ function getDataItem(i2) {
+ return data.getItem ? data.getItem(i2) : data[i2];
+ }
+ function getTopPanel() {
+ return _topPanels[0];
+ }
+ function getTopPanels() {
+ return _topPanels;
+ }
+ function togglePanelVisibility(option, container2, visible, animate) {
+ var animated = animate !== !1;
+ if (options[option] != visible)
+ if (options[option] = visible, visible) {
+ if (animated) {
+ Utils5.slideDown(container2, resizeCanvas);
+ return;
+ }
+ show2(container2), resizeCanvas();
+ } else {
+ if (animated) {
+ Utils5.slideUp(container2, resizeCanvas);
+ return;
+ }
+ hide2(container2), resizeCanvas();
+ }
+ }
+ function setTopPanelVisibility(visible, animate) {
+ togglePanelVisibility("showTopPanel", _topPanelScrollers, visible, animate);
+ }
+ function setHeaderRowVisibility(visible, animate) {
+ togglePanelVisibility("showHeaderRow", _headerRowScroller, visible, animate);
+ }
+ function setColumnHeaderVisibility(visible, animate) {
+ togglePanelVisibility("showColumnHeader", _headerScroller, visible, animate);
+ }
+ function setFooterRowVisibility(visible, animate) {
+ togglePanelVisibility("showFooterRow", _footerRowScroller, visible, animate);
+ }
+ function setPreHeaderPanelVisibility(visible, animate) {
+ togglePanelVisibility("showPreHeaderPanel", [_preHeaderPanelScroller, _preHeaderPanelScrollerR], visible, animate);
+ }
+ function getContainerNode() {
+ return _container;
+ }
+ function getRowTop(row) {
+ return options.rowHeight * row - offset2;
+ }
+ function getRowFromPosition(y) {
+ return Math.floor((y + offset2) / options.rowHeight);
+ }
+ function scrollTo(y) {
+ y = Math.max(y, 0), y = Math.min(y, th - Utils5.height(_viewportScrollContainerY) + (viewportHasHScroll || hasFrozenColumns() ? scrollbarDimensions.height : 0));
+ var oldOffset = offset2;
+ page = Math.min(n - 1, Math.floor(y / ph)), offset2 = Math.round(page * cj);
+ var newScrollTop = y - offset2;
+ if (offset2 != oldOffset) {
+ var range = getVisibleRange(newScrollTop);
+ cleanupRows(range), updateRowPositions();
+ }
+ prevScrollTop != newScrollTop && (vScrollDir = prevScrollTop + oldOffset < newScrollTop + offset2 ? 1 : -1, lastRenderedScrollTop = scrollTop = prevScrollTop = newScrollTop, hasFrozenColumns() && (_viewportTopL.scrollTop = newScrollTop), hasFrozenRows && (_viewportBottomL.scrollTop = _viewportBottomR.scrollTop = newScrollTop), _viewportScrollContainerY.scrollTop = newScrollTop, trigger(self.onViewportChanged, {}));
+ }
+ function defaultFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return value == null ? "" : (value + "").replace(/&/g, "&").replace(//g, ">");
+ }
+ function getFormatter(row, column) {
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnOverrides = rowMetadata && rowMetadata.columns && (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
+ return columnOverrides && columnOverrides.formatter || rowMetadata && rowMetadata.formatter || column.formatter || options.formatterFactory && options.formatterFactory.getFormatter(column) || options.defaultFormatter;
+ }
+ function getEditor(row, cell) {
+ var column = columns[cell], rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== void 0 ? columnMetadata[column.id].editor : columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== void 0 ? columnMetadata[cell].editor : column.editor || options.editorFactory && options.editorFactory.getEditor(column);
+ }
+ function getDataItemValueForColumn(item, columnDef) {
+ return options.dataItemColumnValueExtractor ? options.dataItemColumnValueExtractor(item, columnDef) : item[columnDef.field];
+ }
+ function appendRowHtml(stringArrayL, stringArrayR, row, range, dataLength) {
+ var d = getDataItem(row), dataLoading = row < dataLength && !d, rowCss = "slick-row" + (hasFrozenRows && row <= options.frozenRow ? " frozen" : "") + (dataLoading ? " loading" : "") + (row === activeRow && options.showCellSelection ? " active" : "") + (row % 2 == 1 ? " odd" : " even");
+ d || (rowCss += " " + options.addNewRowCssClass);
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata && metadata.cssClasses && (rowCss += " " + metadata.cssClasses);
+ var frozenRowOffset = getFrozenRowOffset(row), rowHtml = ``;
+ stringArrayL.push(rowHtml), hasFrozenColumns() && stringArrayR.push(rowHtml);
+ for (var colspan, m, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (m = columns[i2], !(!m || m.hidden)) {
+ if (colspan = 1, metadata && metadata.columns) {
+ var columnData = metadata.columns[m.id] || metadata.columns[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ if (columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx) {
+ if (!m.alwaysRenderColumn && columnPosLeft[i2] > range.rightPx)
+ break;
+ hasFrozenColumns() && i2 > options.frozenColumn ? appendCellHtml(stringArrayR, row, i2, colspan, d) : appendCellHtml(stringArrayL, row, i2, colspan, d);
+ } else
+ (m.alwaysRenderColumn || hasFrozenColumns() && i2 <= options.frozenColumn) && appendCellHtml(stringArrayL, row, i2, colspan, d);
+ colspan > 1 && (i2 += colspan - 1);
+ }
+ stringArrayL.push("
"), hasFrozenColumns() && stringArrayR.push("");
+ }
+ function appendCellHtml(stringArray, row, cell, colspan, item) {
+ var m = columns[cell], cellCss = "slick-cell l" + cell + " r" + Math.min(columns.length - 1, cell + colspan - 1) + (m.cssClass ? " " + m.cssClass : "");
+ hasFrozenColumns() && cell <= options.frozenColumn && (cellCss += " frozen"), row === activeRow && cell === activeCell && options.showCellSelection && (cellCss += " active");
+ for (var key in cellCssClasses)
+ cellCssClasses[key][row] && cellCssClasses[key][row][m.id] && (cellCss += " " + cellCssClasses[key][row][m.id]);
+ var value = null, formatterResult = "";
+ item && (value = getDataItemValueForColumn(item, m), formatterResult = getFormatter(row, m)(row, cell, value, m, item, self), formatterResult == null && (formatterResult = ""));
+ var addlCssClasses = trigger(self.onBeforeAppendCell, { row, cell, value, dataContext: item }).getReturnValue() || "";
+ addlCssClasses += formatterResult && formatterResult.addClasses ? (addlCssClasses ? " " : "") + formatterResult.addClasses : "";
+ var toolTip = formatterResult && formatterResult.toolTip ? "title='" + formatterResult.toolTip + "'" : "", customAttrStr = "";
+ if (m.hasOwnProperty("cellAttrs") && m.cellAttrs instanceof Object)
+ for (var key in m.cellAttrs)
+ m.cellAttrs.hasOwnProperty(key) && (customAttrStr += " " + key + '="' + m.cellAttrs[key] + '" ');
+ stringArray.push(``), item && stringArray.push(Object.prototype.toString.call(formatterResult) !== "[object Object]" ? formatterResult : formatterResult.text), stringArray.push("
"), rowsCache[row].cellRenderQueue.push(cell), rowsCache[row].cellColSpans[cell] = colspan;
+ }
+ function cleanupRows(rangeToKeep) {
+ for (var i2 in rowsCache) {
+ var removeFrozenRow = !0;
+ hasFrozenRows && (options.frozenBottom && i2 >= actualFrozenRow || !options.frozenBottom && i2 <= actualFrozenRow) && (removeFrozenRow = !1), (i2 = parseInt(i2, 10)) !== activeRow && (i2 < rangeToKeep.top || i2 > rangeToKeep.bottom) && removeFrozenRow && removeRowFromCache(i2);
+ }
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function invalidate() {
+ updateRowCount(), invalidateAllRows(), render();
+ }
+ function invalidateAllRows() {
+ currentEditor && makeActiveCellNormal();
+ for (var row in rowsCache)
+ removeRowFromCache(row);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function queuePostProcessedRowForCleanup(cacheEntry, postProcessedRow, rowIdx) {
+ postProcessgroupId++;
+ for (var columnIdx in postProcessedRow)
+ postProcessedRow.hasOwnProperty(columnIdx) && postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cacheEntry.cellNodesByColumnIdx[columnIdx | 0],
+ columnIdx: columnIdx | 0,
+ rowIdx
+ });
+ postProcessedCleanupQueue.push({
+ actionType: "R",
+ groupId: postProcessgroupId,
+ node: cacheEntry.rowNode
+ }), cacheEntry.rowNode.forEach(function(node) {
+ node.remove();
+ });
+ }
+ function queuePostProcessedCellForCleanup(cellnode, columnIdx, rowIdx) {
+ postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cellnode,
+ columnIdx,
+ rowIdx
+ }), cellnode.remove();
+ }
+ function removeRowFromCache(row) {
+ var cacheEntry = rowsCache[row];
+ cacheEntry && (options.enableAsyncPostRenderCleanup && postProcessedRows[row] ? queuePostProcessedRowForCleanup(cacheEntry, postProcessedRows[row], row) : cacheEntry.rowNode.forEach(function(node) {
+ node.parentElement && node.parentElement.removeChild(node);
+ }), delete rowsCache[row], delete postProcessedRows[row], renderedRows--, counter_rows_removed++);
+ }
+ function invalidateRows(rows) {
+ var i2, rl;
+ if (!(!rows || !rows.length)) {
+ for (vScrollDir = 0, rl = rows.length, i2 = 0; i2 < rl; i2++)
+ currentEditor && activeRow === rows[i2] && makeActiveCellNormal(), rowsCache[rows[i2]] && removeRowFromCache(rows[i2]);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ }
+ function invalidateRow(row) {
+ !row && row !== 0 || invalidateRows([row]);
+ }
+ function applyFormatResultToCellNode(formatterResult, cellNode, suppressRemove) {
+ if (formatterResult == null && (formatterResult = ""), Object.prototype.toString.call(formatterResult) !== "[object Object]") {
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult);
+ return;
+ }
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult.text), formatterResult.removeClasses && !suppressRemove && formatterResult.removeClasses.split(" ").forEach(function(c) {
+ cellNode.classList.remove(c);
+ }), formatterResult.addClasses && formatterResult.addClasses.split(" ").forEach(function(c) {
+ cellNode.classList.add(c);
+ }), formatterResult.toolTip && cellNode.setAttribute("title", formatterResult.toolTip);
+ }
+ function updateCell(row, cell) {
+ var cellNode = getCellNode(row, cell);
+ if (cellNode) {
+ var m = columns[cell], d = getDataItem(row);
+ if (currentEditor && activeRow === row && activeCell === cell)
+ currentEditor.loadValue(d);
+ else {
+ var formatterResult = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d, self) : "";
+ applyFormatResultToCellNode(formatterResult, cellNode), invalidatePostProcessingResults(row);
+ }
+ }
+ }
+ function updateRow(row) {
+ var cacheEntry = rowsCache[row];
+ if (cacheEntry) {
+ ensureCellNodesInRowsCache(row);
+ var formatterResult, d = getDataItem(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ row === activeRow && columnIdx === activeCell && currentEditor ? currentEditor.loadValue(d) : d ? (formatterResult = getFormatter(row, m)(row, columnIdx, getDataItemValueForColumn(d, m), m, d, self), applyFormatResultToCellNode(formatterResult, node)) : node.innerHTML = "";
+ }
+ invalidatePostProcessingResults(row);
+ }
+ }
+ function getViewportHeight() {
+ if ((!options.autoHeight || options.frozenColumn != -1) && (topPanelH = options.showTopPanel ? options.topPanelHeight + getVBoxDelta(_topPanelScrollers[0]) : 0, headerRowH = options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, footerRowH = options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0), options.autoHeight) {
+ let fullHeight = _paneHeaderL.offsetHeight;
+ fullHeight += options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, fullHeight += options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0, fullHeight += getCanvasWidth() > viewportW ? scrollbarDimensions.height : 0, viewportH = options.rowHeight * getDataLengthIncludingAddNew() + (options.frozenColumn == -1 ? fullHeight : 0);
+ } else {
+ let columnNamesH = options.showColumnHeader ? Utils5.toFloat(Utils5.height(_headerScroller[0])) + getVBoxDelta(_headerScroller[0]) : 0, preHeaderH = options.createPreHeaderPanel && options.showPreHeaderPanel ? options.preHeaderPanelHeight + getVBoxDelta(_preHeaderPanelScroller) : 0, style = getComputedStyle(_container);
+ viewportH = Utils5.toFloat(style.height) - Utils5.toFloat(style.paddingTop) - Utils5.toFloat(style.paddingBottom) - columnNamesH - topPanelH - headerRowH - footerRowH - preHeaderH;
+ }
+ return numVisibleRows = Math.ceil(viewportH / options.rowHeight), viewportH;
+ }
+ function getViewportWidth() {
+ viewportW = parseFloat(Utils5.innerSize(_container, "width"));
+ }
+ function resizeCanvas() {
+ if (initialized) {
+ if (paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, getViewportWidth(), getViewportHeight(), hasFrozenRows ? options.frozenBottom ? (paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions.height, paneBottomH = frozenRowsHeight + scrollbarDimensions.height) : (paneTopH = frozenRowsHeight, paneBottomH = viewportH - frozenRowsHeight) : paneTopH = viewportH, paneTopH += topPanelH + headerRowH + footerRowH, hasFrozenColumns() && options.autoHeight && (paneTopH += scrollbarDimensions.height), viewportTopH = paneTopH - topPanelH - headerRowH - footerRowH, options.autoHeight) {
+ if (hasFrozenColumns()) {
+ let style = getComputedStyle(_headerScrollerL);
+ Utils5.height(_container, paneTopH + Utils5.toFloat(style.height));
+ }
+ _paneTopL.style.position = "relative";
+ }
+ Utils5.setStyleSize(_paneTopL, "top", Utils5.height(_paneHeaderL) || (options.showHeaderRow ? options.headerRowHeight : 0) + (options.showPreHeaderPanel ? options.preHeaderPanelHeight : 0)), Utils5.height(_paneTopL, paneTopH);
+ var paneBottomTop = _paneTopL.offsetTop + paneTopH;
+ options.autoHeight || Utils5.height(_viewportTopL, viewportTopH), hasFrozenColumns() ? (Utils5.setStyleSize(_paneTopR, "top", Utils5.height(_paneHeaderL)), Utils5.height(_paneTopR, paneTopH), Utils5.height(_viewportTopR, viewportTopH), hasFrozenRows && (Utils5.setStyleSize(_paneBottomL, "top", paneBottomTop), Utils5.height(_paneBottomL, paneBottomH), Utils5.setStyleSize(_paneBottomR, "top", paneBottomTop), Utils5.height(_paneBottomR, paneBottomH), Utils5.height(_viewportBottomR, paneBottomH))) : hasFrozenRows && (Utils5.width(_paneBottomL, "100%"), Utils5.height(_paneBottomL, paneBottomH), Utils5.setStyleSize(_paneBottomL, "top", paneBottomTop)), hasFrozenRows ? (Utils5.height(_viewportBottomL, paneBottomH), options.frozenBottom ? (Utils5.height(_canvasBottomL, frozenRowsHeight), hasFrozenColumns() && Utils5.height(_canvasBottomR, frozenRowsHeight)) : (Utils5.height(_canvasTopL, frozenRowsHeight), hasFrozenColumns() && Utils5.height(_canvasTopR, frozenRowsHeight))) : Utils5.height(_viewportTopR, viewportTopH), (!scrollbarDimensions || !scrollbarDimensions.width) && (scrollbarDimensions = measureScrollbar()), options.autosizeColsMode === GridAutosizeColsMode2.LegacyForceFit && autosizeColumns(), updateRowCount(), handleScroll(), lastRenderedScrollLeft = -1, render();
+ }
+ }
+ function updatePagingStatusFromView(pagingInfo) {
+ pagingActive = pagingInfo.pageSize !== 0, pagingIsLastPage = pagingInfo.pageNum == pagingInfo.totalPages - 1;
+ }
+ function updateRowCount() {
+ if (initialized) {
+ var dataLength = getDataLength(), dataLengthIncludingAddNew = getDataLengthIncludingAddNew(), numberOfRows = 0, oldH = hasFrozenRows && !options.frozenBottom ? Utils5.height(_canvasBottomL) : Utils5.height(_canvasTopL);
+ if (hasFrozenRows)
+ var numberOfRows = getDataLength() - options.frozenRow;
+ else
+ var numberOfRows = dataLengthIncludingAddNew + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);
+ var tempViewportH = Utils5.height(_viewportScrollContainerY), oldViewportHasVScroll = viewportHasVScroll;
+ viewportHasVScroll = options.alwaysShowVerticalScroll || !options.autoHeight && numberOfRows * options.rowHeight > tempViewportH, makeActiveCellNormal();
+ var r1 = dataLength - 1;
+ for (var i2 in rowsCache)
+ i2 > r1 && removeRowFromCache(i2);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup(), activeCellNode && activeRow > r1 && resetActiveCell();
+ var oldH = h;
+ options.autoHeight ? h = options.rowHeight * numberOfRows : (th = Math.max(options.rowHeight * numberOfRows, tempViewportH - scrollbarDimensions.height), th < maxSupportedCssHeight ? (h = ph = th, n = 1, cj = 0) : (h = maxSupportedCssHeight, ph = h / 100, n = Math.floor(th / ph), cj = (th - h) / (n - 1))), (h !== oldH || enforceFrozenRowHeightRecalc) && (hasFrozenRows && !options.frozenBottom ? (Utils5.height(_canvasBottomL, h), hasFrozenColumns() && Utils5.height(_canvasBottomR, h)) : (Utils5.height(_canvasTopL, h), Utils5.height(_canvasTopR, h)), scrollTop = _viewportScrollContainerY.scrollTop, enforceFrozenRowHeightRecalc = !1);
+ var oldScrollTopInRange = scrollTop + offset2 <= th - tempViewportH;
+ th == 0 || scrollTop == 0 ? page = offset2 = 0 : scrollTo(oldScrollTopInRange ? scrollTop + offset2 : th - tempViewportH + scrollbarDimensions.height), h != oldH && options.autoHeight && resizeCanvas(), options.autosizeColsMode === GridAutosizeColsMode2.LegacyForceFit && oldViewportHasVScroll != viewportHasVScroll && autosizeColumns(), updateCanvasWidth(!1);
+ }
+ }
+ function getVisibleRange(viewportTop, viewportLeft) {
+ return viewportTop == null && (viewportTop = scrollTop), viewportLeft == null && (viewportLeft = scrollLeft), {
+ top: getRowFromPosition(viewportTop),
+ bottom: getRowFromPosition(viewportTop + viewportH) + 1,
+ leftPx: viewportLeft,
+ rightPx: viewportLeft + viewportW
+ };
+ }
+ function getRenderedRange(viewportTop, viewportLeft) {
+ var range = getVisibleRange(viewportTop, viewportLeft), buffer = Math.round(viewportH / options.rowHeight), minBuffer = options.minRowBuffer;
+ return vScrollDir == -1 ? (range.top -= buffer, range.bottom += minBuffer) : vScrollDir == 1 ? (range.top -= minBuffer, range.bottom += buffer) : (range.top -= minBuffer, range.bottom += minBuffer), range.top = Math.max(0, range.top), range.bottom = Math.min(getDataLengthIncludingAddNew() - 1, range.bottom), range.leftPx -= viewportW, range.rightPx += viewportW, range.leftPx = Math.max(0, range.leftPx), range.rightPx = Math.min(canvasWidth, range.rightPx), range;
+ }
+ function ensureCellNodesInRowsCache(row) {
+ let cacheEntry = rowsCache[row];
+ if (cacheEntry && cacheEntry.cellRenderQueue.length) {
+ let rowNode = cacheEntry.rowNode, children = Array.from(rowNode[0].children);
+ rowNode.length > 1 && (children = children.concat(Array.from(rowNode[1].children)));
+ let i2 = children.length - 1;
+ for (; cacheEntry.cellRenderQueue.length; ) {
+ let columnIdx = cacheEntry.cellRenderQueue.pop();
+ cacheEntry.cellNodesByColumnIdx[columnIdx] = children[i2--];
+ }
+ }
+ }
+ function cleanUpCells(range, row) {
+ if (!(hasFrozenRows && (options.frozenBottom && row > actualFrozenRow || row <= actualFrozenRow))) {
+ var totalCellsRemoved = 0, cacheEntry = rowsCache[row], cellsToRemove = [];
+ for (var i2 in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(i2) && (i2 = i2 | 0, !(i2 <= options.frozenColumn) && !(Array.isArray(columns) && columns[i2] && columns[i2].alwaysRenderColumn))) {
+ var colspan = cacheEntry.cellColSpans[i2];
+ (columnPosLeft[i2] > range.rightPx || columnPosRight[Math.min(columns.length - 1, i2 + colspan - 1)] < range.leftPx) && (row == activeRow && i2 == activeCell || cellsToRemove.push(i2));
+ }
+ for (var cellToRemove, cellNode; (cellToRemove = cellsToRemove.pop()) != null; )
+ cellNode = cacheEntry.cellNodesByColumnIdx[cellToRemove], options.enableAsyncPostRenderCleanup && postProcessedRows[row] && postProcessedRows[row][cellToRemove] ? queuePostProcessedCellForCleanup(cellNode, cellToRemove, row) : cellNode.parentElement.removeChild(cellNode), delete cacheEntry.cellColSpans[cellToRemove], delete cacheEntry.cellNodesByColumnIdx[cellToRemove], postProcessedRows[row] && delete postProcessedRows[row][cellToRemove], totalCellsRemoved++;
+ }
+ }
+ function cleanUpAndRenderCells(range) {
+ for (var cacheEntry, stringArray = [], processedRows = [], cellsAdded, totalCellsAdded = 0, colspan, row = range.top, btm = range.bottom; row <= btm; row++)
+ if (cacheEntry = rowsCache[row], !!cacheEntry) {
+ ensureCellNodesInRowsCache(row), cleanUpCells(range, row), cellsAdded = 0;
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata = metadata && metadata.columns;
+ for (var d = getDataItem(row), i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ if (columnPosLeft[i2] > range.rightPx)
+ break;
+ if ((colspan = cacheEntry.cellColSpans[i2]) != null) {
+ i2 += colspan > 1 ? colspan - 1 : 0;
+ continue;
+ }
+ if (colspan = 1, metadata) {
+ var columnData = metadata[columns[i2].id] || metadata[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx && (appendCellHtml(stringArray, row, i2, colspan, d), cellsAdded++), i2 += colspan > 1 ? colspan - 1 : 0;
+ }
+ cellsAdded && (totalCellsAdded += cellsAdded, processedRows.push(row));
+ }
+ if (stringArray.length)
+ for (var x = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArray.join("")) }), processedRow, node; (processedRow = processedRows.pop()) != null; ) {
+ cacheEntry = rowsCache[processedRow];
+ for (var columnIdx; (columnIdx = cacheEntry.cellRenderQueue.pop()) != null; )
+ node = x.lastChild, hasFrozenColumns() && columnIdx > options.frozenColumn ? cacheEntry.rowNode[1].appendChild(node) : cacheEntry.rowNode[0].appendChild(node), cacheEntry.cellNodesByColumnIdx[columnIdx] = node;
+ }
+ }
+ function renderRows(range) {
+ for (var stringArrayL = [], stringArrayR = [], rows = [], needToReselectCell = !1, dataLength = getDataLength(), i2 = range.top, ii = range.bottom; i2 <= ii; i2++)
+ rowsCache[i2] || hasFrozenRows && options.frozenBottom && i2 == getDataLength() || (renderedRows++, rows.push(i2), rowsCache[i2] = {
+ rowNode: null,
+ // ColSpans of rendered cells (by column idx).
+ // Can also be used for checking whether a cell has been rendered.
+ cellColSpans: [],
+ // Cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().
+ cellNodesByColumnIdx: [],
+ // Column indices of cell nodes that have been rendered, but not yet indexed in
+ // cellNodesByColumnIdx. These are in the same order as cell nodes added at the
+ // end of the row.
+ cellRenderQueue: []
+ }, appendRowHtml(stringArrayL, stringArrayR, i2, range, dataLength), activeCellNode && activeRow === i2 && (needToReselectCell = !0), counter_rows_rendered++);
+ if (!rows.length)
+ return;
+ let x = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayL.join("")) }), xRight = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayR.join("")) });
+ for (var i2 = 0, ii = rows.length; i2 < ii; i2++)
+ hasFrozenRows && rows[i2] >= actualFrozenRow ? hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasBottomL.appendChild(x.firstChild), _canvasBottomR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasBottomL.appendChild(x.firstChild)) : hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasTopL.appendChild(x.firstChild), _canvasTopR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasTopL.appendChild(x.firstChild));
+ needToReselectCell && (activeCellNode = getCellNode(activeRow, activeCell));
+ }
+ function startPostProcessing() {
+ options.enableAsyncPostRender && (clearTimeout(h_postrender), h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay));
+ }
+ function startPostProcessingCleanup() {
+ options.enableAsyncPostRenderCleanup && (clearTimeout(h_postrenderCleanup), h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay));
+ }
+ function invalidatePostProcessingResults(row) {
+ for (var columnIdx in postProcessedRows[row])
+ postProcessedRows[row].hasOwnProperty(columnIdx) && (postProcessedRows[row][columnIdx] = "C");
+ postProcessFromRow = Math.min(postProcessFromRow, row), postProcessToRow = Math.max(postProcessToRow, row), startPostProcessing();
+ }
+ function updateRowPositions() {
+ for (var row in rowsCache) {
+ var rowNumber = row ? parseInt(row) : 0;
+ Utils5.setStyleSize("top", getRowTop(rowNumber));
+ }
+ }
+ function render() {
+ if (initialized) {
+ scrollThrottle.dequeue();
+ var visible = getVisibleRange(), rendered = getRenderedRange();
+ if (cleanupRows(rendered), lastRenderedScrollLeft != scrollLeft) {
+ if (hasFrozenRows) {
+ var renderedFrozenRows = Utils5.extend(!0, {}, rendered);
+ options.frozenBottom ? (renderedFrozenRows.top = actualFrozenRow, renderedFrozenRows.bottom = getDataLength()) : (renderedFrozenRows.top = 0, renderedFrozenRows.bottom = options.frozenRow), cleanUpAndRenderCells(renderedFrozenRows);
+ }
+ cleanUpAndRenderCells(rendered);
+ }
+ renderRows(rendered), hasFrozenRows && (options.frozenBottom ? renderRows({
+ top: actualFrozenRow,
+ bottom: getDataLength() - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ }) : renderRows({
+ top: 0,
+ bottom: options.frozenRow - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ })), postProcessFromRow = visible.top, postProcessToRow = Math.min(getDataLengthIncludingAddNew() - 1, visible.bottom), startPostProcessing(), lastRenderedScrollTop = scrollTop, lastRenderedScrollLeft = scrollLeft, h_render = null, trigger(self.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: self });
+ }
+ }
+ function handleHeaderRowScroll() {
+ var scrollLeft2 = _headerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleFooterRowScroll() {
+ var scrollLeft2 = _footerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handlePreHeaderPanelScroll() {
+ handleElementScroll(_preHeaderPanelScroller);
+ }
+ function handleElementScroll(element) {
+ var scrollLeft2 = element.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleScroll() {
+ return scrollTop = _viewportScrollContainerY.scrollTop, scrollLeft = _viewportScrollContainerX.scrollLeft, _handleScroll(!1);
+ }
+ function _handleScroll(isMouseWheel) {
+ var maxScrollDistanceY = _viewportScrollContainerY.scrollHeight - _viewportScrollContainerY.clientHeight, maxScrollDistanceX = _viewportScrollContainerY.scrollWidth - _viewportScrollContainerY.clientWidth;
+ maxScrollDistanceY = Math.max(0, maxScrollDistanceY), maxScrollDistanceX = Math.max(0, maxScrollDistanceX), scrollTop > maxScrollDistanceY && (scrollTop = maxScrollDistanceY), scrollLeft > maxScrollDistanceX && (scrollLeft = maxScrollDistanceX);
+ var vScrollDist = Math.abs(scrollTop - prevScrollTop), hScrollDist = Math.abs(scrollLeft - prevScrollLeft);
+ if (hScrollDist && (prevScrollLeft = scrollLeft, Utils5.debounce(() => {
+ _viewportScrollContainerX.scrollLeft = scrollLeft, _headerScrollContainer.scrollLeft = scrollLeft, _topPanelScrollers[0].scrollLeft = scrollLeft, options.createFooterRow && (_footerRowScrollContainer.scrollLeft = scrollLeft), options.createPreHeaderPanel && (hasFrozenColumns() ? _preHeaderPanelScrollerR.scrollLeft = scrollLeft : _preHeaderPanelScroller.scrollLeft = scrollLeft), hasFrozenColumns() ? (hasFrozenRows && (_viewportTopR.scrollLeft = scrollLeft), _headerRowScrollerR.scrollLeft = scrollLeft) : (hasFrozenRows && (_viewportTopL.scrollLeft = scrollLeft), _headerRowScrollerL.scrollLeft = scrollLeft);
+ }, options.scrollDebounceDelay)()), vScrollDist && !options.autoHeight)
+ if (vScrollDir = prevScrollTop < scrollTop ? 1 : -1, prevScrollTop = scrollTop, isMouseWheel && (_viewportScrollContainerY.scrollTop = scrollTop), hasFrozenColumns() && (hasFrozenRows && !options.frozenBottom ? _viewportBottomL.scrollTop = scrollTop : _viewportTopL.scrollTop = scrollTop), vScrollDist < viewportH)
+ scrollTo(scrollTop + offset2);
+ else {
+ var oldOffset = offset2;
+ h == viewportH ? page = 0 : page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph))), offset2 = Math.round(page * cj), oldOffset != offset2 && invalidateAllRows();
+ }
+ if (hScrollDist || vScrollDist) {
+ var dx = Math.abs(lastRenderedScrollLeft - scrollLeft), dy = Math.abs(lastRenderedScrollTop - scrollTop);
+ (dx > 20 || dy > 20) && (options.forceSyncScrolling || dy < viewportH && dx < viewportW ? render() : scrollThrottle.enqueue(), trigger(self.onViewportChanged, {}));
+ }
+ return trigger(self.onScroll, { scrollLeft, scrollTop }), !!(hScrollDist || vScrollDist);
+ }
+ function ActionThrottle(action, minPeriod_ms) {
+ var blocked = !1, queued = !1;
+ function enqueue() {
+ blocked ? queued = !0 : blockAndExecute();
+ }
+ function dequeue() {
+ queued = !1;
+ }
+ function blockAndExecute() {
+ blocked = !0, setTimeout(unblock, minPeriod_ms), action();
+ }
+ function unblock() {
+ queued ? (dequeue(), blockAndExecute()) : blocked = !1;
+ }
+ return {
+ enqueue,
+ dequeue
+ };
+ }
+ function asyncPostProcessRows() {
+ for (var dataLength = getDataLength(); postProcessFromRow <= postProcessToRow; ) {
+ var row = vScrollDir >= 0 ? postProcessFromRow++ : postProcessToRow--, cacheEntry = rowsCache[row];
+ if (!(!cacheEntry || row >= dataLength)) {
+ postProcessedRows[row] || (postProcessedRows[row] = {}), ensureCellNodesInRowsCache(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], processedStatus = postProcessedRows[row][columnIdx];
+ if (m.asyncPostRender && processedStatus !== "R") {
+ var node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ node && m.asyncPostRender(node, row, getDataItem(row), m, processedStatus === "C"), postProcessedRows[row][columnIdx] = "R";
+ }
+ }
+ h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);
+ return;
+ }
+ }
+ }
+ function asyncPostProcessCleanupRows() {
+ if (postProcessedCleanupQueue.length > 0) {
+ for (var groupId = postProcessedCleanupQueue[0].groupId; postProcessedCleanupQueue.length > 0 && postProcessedCleanupQueue[0].groupId == groupId; ) {
+ var entry = postProcessedCleanupQueue.shift();
+ if (entry.actionType == "R" && entry.node.forEach(function(node) {
+ node.remove();
+ }), entry.actionType == "C") {
+ var column = columns[entry.columnIdx];
+ column.asyncPostRenderCleanup && entry.node && column.asyncPostRenderCleanup(entry.node, entry.rowIdx, column);
+ }
+ }
+ h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);
+ }
+ }
+ function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {
+ var node, columnId, addedRowHash, removedRowHash;
+ for (var row in rowsCache) {
+ if (removedRowHash = removedHash && removedHash[row], addedRowHash = addedHash && addedHash[row], removedRowHash)
+ for (columnId in removedRowHash)
+ (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.remove(removedRowHash[columnId]));
+ if (addedRowHash)
+ for (columnId in addedRowHash)
+ (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.add(addedRowHash[columnId]));
+ }
+ }
+ function addCellCssStyles(key, hash) {
+ if (cellCssClasses[key])
+ throw new Error("SlickGrid addCellCssStyles: cell CSS hash with key '" + key + "' already exists.");
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, null), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function removeCellCssStyles(key) {
+ cellCssClasses[key] && (updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]), delete cellCssClasses[key], trigger(self.onCellCssStylesChanged, { key, hash: null, grid: self }));
+ }
+ function setCellCssStyles(key, hash) {
+ let prevHash = cellCssClasses[key];
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, prevHash), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function getCellCssStyles(key) {
+ return cellCssClasses[key];
+ }
+ function flashCell(row, cell, speed) {
+ speed = speed || 250;
+ function toggleCellClass(cellNode, times) {
+ times < 1 || setTimeout(function() {
+ times % 2 == 0 ? cellNode.classList.add(options.cellFlashingCssClass) : cellNode.classList.remove(options.cellFlashingCssClass), toggleCellClass(cellNode, times - 1);
+ }, speed);
+ }
+ if (rowsCache[row]) {
+ let cellNode = getCellNode(row, cell);
+ cellNode && toggleCellClass(cellNode, 5);
+ }
+ }
+ function handleMouseWheel(e, delta, deltaX, deltaY) {
+ scrollTop = Math.max(0, _viewportScrollContainerY.scrollTop - deltaY * options.rowHeight), scrollLeft = _viewportScrollContainerX.scrollLeft + deltaX * 10;
+ var handled = _handleScroll(!0);
+ handled && e.preventDefault();
+ }
+ function handleDragInit(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragInit, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDragStart(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragStart, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDrag(e, dd) {
+ return trigger(self.onDrag, dd, e).getReturnValue();
+ }
+ function handleDragEnd(e, dd) {
+ trigger(self.onDragEnd, dd, e);
+ }
+ function handleKeyDown(e) {
+ var handled = trigger(self.onKeyDown, { row: activeRow, cell: activeCell }, e).isImmediatePropagationStopped();
+ if (!handled && !e.shiftKey && !e.altKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ e.which == keyCode4.HOME ? handled = e.ctrlKey ? navigateTop() : navigateRowStart() : e.which == keyCode4.END && (handled = e.ctrlKey ? navigateBottom() : navigateRowEnd());
+ }
+ if (!handled)
+ if (!e.shiftKey && !e.altKey && !e.ctrlKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ if (e.which == keyCode4.ESCAPE) {
+ if (!getEditorLock().isActive())
+ return;
+ cancelEditAndSetFocus();
+ } else
+ e.which == keyCode4.PAGE_DOWN ? (navigatePageDown(), handled = !0) : e.which == keyCode4.PAGE_UP ? (navigatePageUp(), handled = !0) : e.which == keyCode4.LEFT ? handled = navigateLeft() : e.which == keyCode4.RIGHT ? handled = navigateRight() : e.which == keyCode4.UP ? handled = navigateUp() : e.which == keyCode4.DOWN ? handled = navigateDown() : e.which == keyCode4.TAB ? handled = navigateNext() : e.which == keyCode4.ENTER && (options.editable && (currentEditor ? activeRow === getDataLength() ? navigateDown() : commitEditAndSetFocus() : getEditorLock().commitCurrentEdit() && makeActiveCellEditable(void 0, void 0, e)), handled = !0);
+ } else
+ e.which == keyCode4.TAB && e.shiftKey && !e.ctrlKey && !e.altKey && (handled = navigatePrev());
+ if (handled) {
+ e.stopPropagation(), e.preventDefault();
+ try {
+ e.originalEvent.keyCode = 0;
+ } catch {
+ }
+ }
+ }
+ function handleClick(evt) {
+ let e = evt;
+ if (e instanceof EventData3 ? e = evt.getNativeEvent() : evt = void 0, !currentEditor && (e.target != document.activeElement || e.target.classList.contains("slick-cell"))) {
+ var selection = getTextSelection();
+ setFocus(), setTextSelection(selection);
+ }
+ var cell = getCellFromEvent(e);
+ if (!(!cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell) && (evt = trigger(self.onClick, { row: cell.row, cell: cell.cell }, evt || e), !evt.isImmediatePropagationStopped() && canCellBeActive(cell.row, cell.cell) && (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()))) {
+ scrollRowIntoView(cell.row, !1);
+ var preClickModeOn = e.target && e.target.className === preClickClassName2, column = columns[cell.cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);
+ }
+ }
+ function handleContextMenu(e) {
+ var cell = e.target.closest(".slick-cell");
+ cell && (activeCellNode === cell && currentEditor !== null || trigger(self.onContextMenu, {}, e));
+ }
+ function handleDblClick(e) {
+ var cell = getCellFromEvent(e);
+ !cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell || (trigger(self.onDblClick, { row: cell.row, cell: cell.cell }, e), !e.defaultPrevented && options.editable && gotoCell(cell.row, cell.cell, !0, e));
+ }
+ function handleHeaderMouseEnter(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderMouseLeave(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseEnter(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseLeave(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderContextMenu(e) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils5.storage.get(header, "column");
+ trigger(self.onHeaderContextMenu, { column }, e);
+ }
+ function handleHeaderClick(e) {
+ if (!columnResizeDragging) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils5.storage.get(header, "column");
+ column && trigger(self.onHeaderClick, { column }, e);
+ }
+ }
+ function handleFooterContextMenu(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils5.storage.get(footer, "column");
+ trigger(self.onFooterContextMenu, { column }, e);
+ }
+ function handleFooterClick(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils5.storage.get(footer, "column");
+ trigger(self.onFooterClick, { column }, e);
+ }
+ function handleCellMouseOver(e) {
+ trigger(self.onMouseEnter, {}, e);
+ }
+ function handleCellMouseOut(e) {
+ trigger(self.onMouseLeave, {}, e);
+ }
+ function cellExists(row, cell) {
+ return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);
+ }
+ function getCellFromPoint(x, y) {
+ for (var row = getRowFromPosition(y), cell = 0, w = 0, i2 = 0; i2 < columns.length && w < x; i2++)
+ !columns[i2] || columns[i2].hidden || (w += columns[i2].width, cell++);
+ return cell < 0 && (cell = 0), { row, cell: cell - 1 };
+ }
+ function getCellFromNode(cellNode) {
+ var cls = /l\d+/.exec(cellNode.className);
+ if (!cls)
+ throw new Error("SlickGrid getCellFromNode: cannot get cell - " + cellNode.className);
+ return parseInt(cls[0].substr(1, cls[0].length - 1), 10);
+ }
+ function getRowFromNode(rowNode) {
+ for (var row in rowsCache)
+ for (var i2 in rowsCache[row].rowNode)
+ if (rowsCache[row].rowNode[i2] === rowNode)
+ return row ? parseInt(row) : 0;
+ return null;
+ }
+ function getFrozenRowOffset(row) {
+ let offset3 = 0;
+ return hasFrozenRows ? options.frozenBottom ? row >= actualFrozenRow ? h < viewportTopH ? offset3 = actualFrozenRow * options.rowHeight : offset3 = h : offset3 = 0 : row >= actualFrozenRow ? offset3 = frozenRowsHeight : offset3 = 0 : offset3 = 0, offset3;
+ }
+ function getCellFromEvent(e) {
+ e instanceof EventData3 && (e = e.getNativeEvent());
+ var targetEvent = e.touches ? e.touches[0] : e, row, cell, cellNode = e.target.closest(".slick-cell");
+ if (!cellNode)
+ return null;
+ if (row = getRowFromNode(cellNode.parentNode), hasFrozenRows) {
+ var c = Utils5.offset(Utils5.parents(cellNode, ".grid-canvas")[0]), rowOffset = 0, isBottom = Utils5.parents(cellNode, ".grid-canvas-bottom").length;
+ isBottom && (rowOffset = options.frozenBottom ? Utils5.height(_canvasTopL) : frozenRowsHeight), row = getCellFromPoint(targetEvent.clientX - c.left, targetEvent.clientY - c.top + rowOffset + document.documentElement.scrollTop).row;
+ }
+ return cell = getCellFromNode(cellNode), row == null || cell == null ? null : {
+ row,
+ cell
+ };
+ }
+ function getCellNodeBox(row, cell) {
+ if (!cellExists(row, cell))
+ return null;
+ for (var frozenRowOffset = getFrozenRowOffset(row), y1 = getRowTop(row) - frozenRowOffset, y2 = y1 + options.rowHeight - 1, x1 = 0, i2 = 0; i2 < cell; i2++)
+ !columns[i2] || columns[i2].hidden || (x1 += columns[i2].width, options.frozenColumn == i2 && (x1 = 0));
+ var x2 = x1 + columns[cell].width;
+ return {
+ top: y1,
+ left: x1,
+ bottom: y2,
+ right: x2
+ };
+ }
+ function resetActiveCell() {
+ setActiveCellInternal(null, !1);
+ }
+ function setFocus() {
+ tabbingDirection == -1 ? _focusSink.focus() : _focusSink2.focus();
+ }
+ function scrollCellIntoView(row, cell, doPaging) {
+ if (scrollRowIntoView(row, doPaging), !(cell <= options.frozenColumn)) {
+ var colspan = getColspan(row, cell);
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);
+ }
+ }
+ function internalScrollColumnIntoView(left, right) {
+ var scrollRight = scrollLeft + Utils5.width(_viewportScrollContainerX) - (viewportHasVScroll ? scrollbarDimensions.width : 0);
+ left < scrollLeft ? (_viewportScrollContainerX.scrollLeft = left, handleScroll(), render()) : right > scrollRight && (_viewportScrollContainerX.scrollLeft = Math.min(left, right - _viewportScrollContainerX.clientWidth), handleScroll(), render());
+ }
+ function scrollColumnIntoView(cell) {
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell]);
+ }
+ function setActiveCellInternal(newCell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent, e) {
+ activeCellNode !== null && (makeActiveCellNormal(), activeCellNode.classList.remove("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.remove("active");
+ }));
+ var activeCellChanged = activeCellNode !== newCell;
+ if (activeCellNode = newCell, activeCellNode != null) {
+ var activeCellOffset = Utils5.offset(activeCellNode), rowOffset = Math.floor(Utils5.offset(Utils5.parents(activeCellNode, ".grid-canvas")[0]).top), isBottom = Utils5.parents(activeCellNode, ".grid-canvas-bottom").length;
+ hasFrozenRows && isBottom && (rowOffset -= options.frozenBottom ? Utils5.height(_canvasTopL) : frozenRowsHeight);
+ var cell = getCellFromPoint(activeCellOffset.left, Math.ceil(activeCellOffset.top) - rowOffset);
+ activeRow = cell.row, activeCell = activePosX = activeCell = activePosX = getCellFromNode(activeCellNode), opt_editMode == null && (opt_editMode = activeRow == getDataLength() || options.autoEdit), options.showCellSelection && (activeCellNode.classList.add("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.add("active");
+ })), options.editable && opt_editMode && isCellPotentiallyEditable(activeRow, activeCell) && (clearTimeout(h_editorLoader), options.asyncEditorLoading ? h_editorLoader = setTimeout(function() {
+ makeActiveCellEditable(void 0, preClickModeOn, e);
+ }, options.asyncEditorLoadDelay) : makeActiveCellEditable(void 0, preClickModeOn, e));
+ } else
+ activeRow = activeCell = null;
+ suppressActiveCellChangedEvent || trigger(self.onActiveCellChanged, getActiveCell());
+ }
+ function clearTextSelection() {
+ if (document.selection && document.selection.empty)
+ try {
+ document.selection.empty();
+ } catch {
+ }
+ else if (window.getSelection) {
+ var sel = window.getSelection();
+ sel && sel.removeAllRanges && sel.removeAllRanges();
+ }
+ }
+ function isCellPotentiallyEditable(row, cell) {
+ var dataLength = getDataLength();
+ return !(row < dataLength && !getDataItem(row) || columns[cell].cannotTriggerInsert && row >= dataLength || !columns[cell] || columns[cell].hidden || !getEditor(row, cell));
+ }
+ function makeActiveCellNormal() {
+ if (currentEditor) {
+ if (trigger(self.onBeforeCellEditorDestroy, { editor: currentEditor }), currentEditor.destroy(), currentEditor = null, activeCellNode) {
+ var d = getDataItem(activeRow);
+ if (activeCellNode.classList.remove("editable"), activeCellNode.classList.remove("invalid"), d) {
+ var column = columns[activeCell], formatter = getFormatter(activeRow, column), formatterResult = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, d, self);
+ applyFormatResultToCellNode(formatterResult, activeCellNode), invalidatePostProcessingResults(activeRow);
+ }
+ }
+ navigator.userAgent.toLowerCase().match(/msie/) && clearTextSelection(), getEditorLock().deactivate(editController);
+ }
+ }
+ function makeActiveCellEditable(editor, preClickModeOn, e) {
+ if (activeCellNode) {
+ if (!options.editable)
+ throw new Error("SlickGrid makeActiveCellEditable : should never get called when options.editable is false");
+ if (clearTimeout(h_editorLoader), !!isCellPotentiallyEditable(activeRow, activeCell)) {
+ var columnDef = columns[activeCell], item = getDataItem(activeRow);
+ if (trigger(self.onBeforeEditCell, { row: activeRow, cell: activeCell, item, column: columnDef, target: "grid" }).getReturnValue() === !1) {
+ setFocus();
+ return;
+ }
+ getEditorLock().activate(editController), activeCellNode.classList.add("editable");
+ var useEditor = editor || getEditor(activeRow, activeCell);
+ !editor && !useEditor.suppressClearOnEdit && (activeCellNode.innerHTML = "");
+ var metadata = data.getItemMetadata && data.getItemMetadata(activeRow);
+ metadata = metadata && metadata.columns;
+ var columnMetaData = metadata && (metadata[columnDef.id] || metadata[activeCell]);
+ currentEditor = new useEditor({
+ grid: self,
+ gridPosition: absBox(_container),
+ position: absBox(activeCellNode),
+ container: activeCellNode,
+ column: columnDef,
+ columnMetaData,
+ item: item || {},
+ event: e,
+ commitChanges: commitEditAndSetFocus,
+ cancelChanges: cancelEditAndSetFocus
+ }), item && (currentEditor.loadValue(item), preClickModeOn && currentEditor.preClick && currentEditor.preClick()), serializedEditorValue = currentEditor.serializeValue(), currentEditor.position && handleActiveCellPositionChange();
+ }
+ }
+ }
+ function commitEditAndSetFocus() {
+ getEditorLock().commitCurrentEdit() && (setFocus(), options.autoEdit && !options.autoCommitEdit && navigateDown());
+ }
+ function cancelEditAndSetFocus() {
+ getEditorLock().cancelCurrentEdit() && setFocus();
+ }
+ function absBox(elem) {
+ var box = {
+ top: elem.offsetTop,
+ left: elem.offsetLeft,
+ bottom: 0,
+ right: 0,
+ width: elem.offsetWidth,
+ height: elem.offsetWidth,
+ visible: !0
+ };
+ box.bottom = box.top + box.height, box.right = box.left + box.width;
+ for (var offsetParent = elem.offsetParent; (elem = elem.parentNode) != document.body && elem != null; ) {
+ let styles = getComputedStyle(elem);
+ box.visible && elem.scrollHeight != elem.offsetHeight && styles.overflowY != "visible" && (box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight), box.visible && elem.scrollWidth != elem.offsetWidth && styles.overflowX != "visible" && (box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth), box.left -= elem.scrollLeft, box.top -= elem.scrollTop, elem === offsetParent && (box.left += elem.offsetLeft, box.top += elem.offsetTop, offsetParent = elem.offsetParent), box.bottom = box.top + box.height, box.right = box.left + box.width;
+ }
+ return box;
+ }
+ function getActiveCellPosition() {
+ return absBox(activeCellNode);
+ }
+ function getGridPosition() {
+ return absBox(_container);
+ }
+ function handleActiveCellPositionChange() {
+ if (activeCellNode && (trigger(self.onActiveCellPositionChanged, {}), currentEditor)) {
+ var cellBox = getActiveCellPosition();
+ currentEditor.show && currentEditor.hide && (cellBox.visible ? currentEditor.show() : currentEditor.hide()), currentEditor.position && currentEditor.position(cellBox);
+ }
+ }
+ function getCellEditor() {
+ return currentEditor;
+ }
+ function getActiveCell() {
+ return activeCellNode ? { row: activeRow, cell: activeCell } : null;
+ }
+ function getActiveCellNode() {
+ return activeCellNode;
+ }
+ function getTextSelection() {
+ var textSelection = null;
+ if (window.getSelection) {
+ var selection = window.getSelection();
+ selection.rangeCount > 0 && (textSelection = selection.getRangeAt(0));
+ }
+ return textSelection;
+ }
+ function setTextSelection(selection) {
+ if (window.getSelection && selection) {
+ var target = window.getSelection();
+ target.removeAllRanges(), target.addRange(selection);
+ }
+ }
+ function scrollRowIntoView(row, doPaging) {
+ if (!hasFrozenRows || !options.frozenBottom && row > actualFrozenRow - 1 || options.frozenBottom && row < actualFrozenRow - 1) {
+ var viewportScrollH = Utils5.height(_viewportScrollContainerY), rowNumber = hasFrozenRows && !options.frozenBottom ? row - options.frozenRow : row, rowAtTop = rowNumber * options.rowHeight, rowAtBottom = (rowNumber + 1) * options.rowHeight - viewportScrollH + (viewportHasHScroll ? scrollbarDimensions.height : 0);
+ (rowNumber + 1) * options.rowHeight > scrollTop + viewportScrollH + offset2 ? (scrollTo(doPaging ? rowAtTop : rowAtBottom), render()) : rowNumber * options.rowHeight < scrollTop + offset2 && (scrollTo(doPaging ? rowAtBottom : rowAtTop), render());
+ }
+ }
+ function scrollRowToTop(row) {
+ scrollTo(row * options.rowHeight), render();
+ }
+ function scrollPage(dir) {
+ var deltaRows = dir * numVisibleRows, bottomOfTopmostFullyVisibleRow = scrollTop + options.rowHeight - 1;
+ if (scrollTo((getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * options.rowHeight), render(), options.enableCellNavigation && activeRow != null) {
+ var row = activeRow + deltaRows, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ row >= dataLengthIncludingAddNew && (row = dataLengthIncludingAddNew - 1), row < 0 && (row = 0);
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ }
+ function navigatePageDown() {
+ scrollPage(1);
+ }
+ function navigatePageUp() {
+ scrollPage(-1);
+ }
+ function navigateTop() {
+ navigateToRow(0);
+ }
+ function navigateBottom() {
+ navigateToRow(getDataLength() - 1);
+ }
+ function navigateToRow(row) {
+ var num_rows = getDataLength();
+ if (!num_rows)
+ return !0;
+ if (row < 0 ? row = 0 : row >= num_rows && (row = num_rows - 1), scrollCellIntoView(row, 0, !0), options.enableCellNavigation && activeRow != null) {
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ return !0;
+ }
+ function getColspan(row, cell) {
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (!metadata || !metadata.columns)
+ return 1;
+ var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell], colspan = columnData && columnData.colspan;
+ return colspan === "*" ? colspan = columns.length - cell : colspan = colspan || 1, colspan;
+ }
+ function findFirstFocusableCell(row) {
+ for (var cell = 0; cell < columns.length; ) {
+ if (canCellBeActive(row, cell))
+ return cell;
+ cell += getColspan(row, cell);
+ }
+ return null;
+ }
+ function findLastFocusableCell(row) {
+ for (var cell = 0, lastFocusableCell = null; cell < columns.length; )
+ canCellBeActive(row, cell) && (lastFocusableCell = cell), cell += getColspan(row, cell);
+ return lastFocusableCell;
+ }
+ function gotoRight(row, cell, posX) {
+ if (cell >= columns.length)
+ return null;
+ do
+ cell += getColspan(row, cell);
+ while (cell < columns.length && !canCellBeActive(row, cell));
+ return cell < columns.length ? {
+ row,
+ cell,
+ posX: cell
+ } : null;
+ }
+ function gotoLeft(row, cell, posX) {
+ if (cell <= 0)
+ return null;
+ var firstFocusableCell = findFirstFocusableCell(row);
+ if (firstFocusableCell === null || firstFocusableCell >= cell)
+ return null;
+ for (var prev = {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ }, pos; ; ) {
+ if (pos = gotoRight(prev.row, prev.cell, prev.posX), !pos)
+ return null;
+ if (pos.cell >= cell)
+ return prev;
+ prev = pos;
+ }
+ }
+ function gotoDown(row, cell, posX) {
+ for (var prevCell, dataLengthIncludingAddNew = getDataLengthIncludingAddNew(); ; ) {
+ if (++row >= dataLengthIncludingAddNew)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoUp(row, cell, posX) {
+ for (var prevCell; ; ) {
+ if (--row < 0)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoNext(row, cell, posX) {
+ if (row == null && cell == null && (row = cell = posX = 0, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ var pos = gotoRight(row, cell, posX);
+ if (pos)
+ return pos;
+ var firstFocusableCell = null, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ for (row === dataLengthIncludingAddNew - 1 && row--; ++row < dataLengthIncludingAddNew; )
+ if (firstFocusableCell = findFirstFocusableCell(row), firstFocusableCell !== null)
+ return {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ };
+ return null;
+ }
+ function gotoPrev(row, cell, posX) {
+ if (row == null && cell == null && (row = getDataLengthIncludingAddNew() - 1, cell = posX = columns.length - 1, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ for (var pos, lastSelectableCell; !pos && (pos = gotoLeft(row, cell, posX), !pos); ) {
+ if (--row < 0)
+ return null;
+ cell = 0, lastSelectableCell = findLastFocusableCell(row), lastSelectableCell !== null && (pos = {
+ row,
+ cell: lastSelectableCell,
+ posX: lastSelectableCell
+ });
+ }
+ return pos;
+ }
+ function gotoRowStart(row, cell, posX) {
+ var newCell = findFirstFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function gotoRowEnd(row, cell, posX) {
+ var newCell = findLastFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function navigateRight() {
+ return navigate("right");
+ }
+ function navigateLeft() {
+ return navigate("left");
+ }
+ function navigateDown() {
+ return navigate("down");
+ }
+ function navigateUp() {
+ return navigate("up");
+ }
+ function navigateNext() {
+ return navigate("next");
+ }
+ function navigatePrev() {
+ return navigate("prev");
+ }
+ function navigateRowStart() {
+ return navigate("home");
+ }
+ function navigateRowEnd() {
+ return navigate("end");
+ }
+ function navigate(dir) {
+ if (!options.enableCellNavigation || !activeCellNode && dir != "prev" && dir != "next")
+ return !1;
+ if (!getEditorLock().commitCurrentEdit())
+ return !0;
+ setFocus();
+ var tabbingDirections = {
+ up: -1,
+ down: 1,
+ left: -1,
+ right: 1,
+ prev: -1,
+ next: 1,
+ home: -1,
+ end: 1
+ };
+ tabbingDirection = tabbingDirections[dir];
+ var stepFunctions = {
+ up: gotoUp,
+ down: gotoDown,
+ left: gotoLeft,
+ right: gotoRight,
+ prev: gotoPrev,
+ next: gotoNext,
+ home: gotoRowStart,
+ end: gotoRowEnd
+ }, stepFn = stepFunctions[dir], pos = stepFn(activeRow, activeCell, activePosX);
+ if (pos) {
+ if (hasFrozenRows && options.frozenBottom & pos.row == getDataLength())
+ return;
+ var isAddNewRow = pos.row == getDataLength();
+ return (!options.frozenBottom && pos.row >= actualFrozenRow || options.frozenBottom && pos.row < actualFrozenRow) && scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && options.emulatePagingWhenScrolling), setActiveCellInternal(getCellNode(pos.row, pos.cell)), activePosX = pos.posX, !0;
+ } else
+ return setActiveCellInternal(getCellNode(activeRow, activeCell)), !1;
+ }
+ function getCellNode(row, cell) {
+ if (rowsCache[row]) {
+ ensureCellNodesInRowsCache(row);
+ try {
+ return rowsCache[row].cellNodesByColumnIdx.length > cell ? rowsCache[row].cellNodesByColumnIdx[cell] : null;
+ } catch {
+ return rowsCache[row].cellNodesByColumnIdx[cell];
+ }
+ }
+ return null;
+ }
+ function setActiveCell(row, cell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || options.enableCellNavigation && (scrollCellIntoView(row, cell, !1), setActiveCellInternal(getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent)));
+ }
+ function setActiveRow(row, cell, suppressScrollIntoView) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || (activeRow = row, suppressScrollIntoView || scrollCellIntoView(row, cell || 0, !1)));
+ }
+ function canCellBeActive(row, cell) {
+ if (!options.enableCellNavigation || row >= getDataLengthIncludingAddNew() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.focusable < "u")
+ return !!rowMetadata.focusable;
+ var columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[columns[cell].id] && typeof columnMetadata[columns[cell].id].focusable < "u" ? !!columnMetadata[columns[cell].id].focusable : columnMetadata && columnMetadata[cell] && typeof columnMetadata[cell].focusable < "u" ? !!columnMetadata[cell].focusable : !!columns[cell].focusable;
+ }
+ function canCellBeSelected(row, cell) {
+ if (row >= getDataLength() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.selectable < "u")
+ return !!rowMetadata.selectable;
+ var columnMetadata = rowMetadata && rowMetadata.columns && (rowMetadata.columns[columns[cell].id] || rowMetadata.columns[cell]);
+ return columnMetadata && typeof columnMetadata.selectable < "u" ? !!columnMetadata.selectable : !!columns[cell].selectable;
+ }
+ function gotoCell(row, cell, forceEdit, e) {
+ if (initialized && canCellBeActive(row, cell) && getEditorLock().commitCurrentEdit()) {
+ scrollCellIntoView(row, cell, !1);
+ var newCell = getCellNode(row, cell), column = columns[cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(newCell, forceEdit || row === getDataLength() || options.autoEdit, null, suppressActiveCellChangedEvent, e), currentEditor || setFocus();
+ }
+ }
+ function commitCurrentEdit() {
+ var item = getDataItem(activeRow), column = columns[activeCell];
+ if (currentEditor) {
+ if (currentEditor.isValueChanged()) {
+ var validationResults = currentEditor.validate();
+ if (validationResults.valid) {
+ if (activeRow < getDataLength()) {
+ var editCommand = {
+ row: activeRow,
+ cell: activeCell,
+ editor: currentEditor,
+ serializedValue: currentEditor.serializeValue(),
+ prevSerializedValue: serializedEditorValue,
+ execute: function() {
+ this.editor.applyValue(item, this.serializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "execute",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ },
+ undo: function() {
+ this.editor.applyValue(item, this.prevSerializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "undo",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ }
+ };
+ options.editCommandHandler ? (makeActiveCellNormal(), options.editCommandHandler(item, column, editCommand)) : (editCommand.execute(), makeActiveCellNormal());
+ } else {
+ var newItem = {};
+ currentEditor.applyValue(newItem, currentEditor.serializeValue()), makeActiveCellNormal(), trigger(self.onAddNewRow, { item: newItem, column });
+ }
+ return !getEditorLock().isActive();
+ } else
+ return activeCellNode.classList.remove("invalid"), Utils5.width(activeCellNode), activeCellNode.classList.add("invalid"), trigger(self.onValidationError, {
+ editor: currentEditor,
+ cellNode: activeCellNode,
+ validationResults,
+ row: activeRow,
+ cell: activeCell,
+ column
+ }), currentEditor.focus(), !1;
+ }
+ makeActiveCellNormal();
+ }
+ return !0;
+ }
+ function cancelCurrentEdit() {
+ return makeActiveCellNormal(), !0;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = columns.length - 1, i2 = 0; i2 < rows.length; i2++)
+ ranges.push(new SlickRange(rows[i2], 0, rows[i2], lastCell));
+ return ranges;
+ }
+ function getSelectedRows() {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ return selectedRows.slice(0);
+ }
+ function setSelectedRows(rows, caller) {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ self && self.getEditorLock && !self.getEditorLock().isActive() && selectionModel.setSelectedRanges(rowsToRanges(rows), caller || "SlickGrid.setSelectedRows");
+ }
+ var logMessageCount = 0, logMessageMaxCount = 30;
+ function sanitizeHtmlString(dirtyHtml, suppressLogging) {
+ if (!options.sanitizer || typeof dirtyHtml != "string")
+ return dirtyHtml;
+ var cleanHtml = options.sanitizer(dirtyHtml);
+ return !suppressLogging && options.logSanitizedHtml && logMessageCount <= logMessageMaxCount && cleanHtml !== dirtyHtml && (console.log("sanitizer altered html: " + dirtyHtml + " --> " + cleanHtml), logMessageCount === logMessageMaxCount && console.log("sanitizer: silencing messages after first " + logMessageMaxCount), logMessageCount++), cleanHtml;
+ }
+ this.debug = function() {
+ var s = "";
+ s += `
+counter_rows_rendered: ` + counter_rows_rendered, s += `
+counter_rows_removed: ` + counter_rows_removed, s += `
+renderedRows: ` + renderedRows, s += `
+numVisibleRows: ` + numVisibleRows, s += `
+maxSupportedCssHeight: ` + maxSupportedCssHeight, s += `
+n(umber of pages): ` + n, s += `
+(current) page: ` + page, s += `
+page height (ph): ` + ph, s += `
+vScrollDir: ` + vScrollDir, alert(s);
+ }, Utils5.extend(this, {
+ slickGridVersion: "4.0.0",
+ // Events
+ onScroll: new SlickEvent2(),
+ onBeforeSort: new SlickEvent2(),
+ onSort: new SlickEvent2(),
+ onHeaderMouseEnter: new SlickEvent2(),
+ onHeaderMouseLeave: new SlickEvent2(),
+ onHeaderRowMouseEnter: new SlickEvent2(),
+ onHeaderRowMouseLeave: new SlickEvent2(),
+ onHeaderContextMenu: new SlickEvent2(),
+ onHeaderClick: new SlickEvent2(),
+ onHeaderCellRendered: new SlickEvent2(),
+ onBeforeHeaderCellDestroy: new SlickEvent2(),
+ onHeaderRowCellRendered: new SlickEvent2(),
+ onFooterRowCellRendered: new SlickEvent2(),
+ onFooterContextMenu: new SlickEvent2(),
+ onFooterClick: new SlickEvent2(),
+ onBeforeHeaderRowCellDestroy: new SlickEvent2(),
+ onBeforeFooterRowCellDestroy: new SlickEvent2(),
+ onMouseEnter: new SlickEvent2(),
+ onMouseLeave: new SlickEvent2(),
+ onClick: new SlickEvent2(),
+ onDblClick: new SlickEvent2(),
+ onContextMenu: new SlickEvent2(),
+ onKeyDown: new SlickEvent2(),
+ onAddNewRow: new SlickEvent2(),
+ onBeforeAppendCell: new SlickEvent2(),
+ onValidationError: new SlickEvent2(),
+ onViewportChanged: new SlickEvent2(),
+ onColumnsReordered: new SlickEvent2(),
+ onColumnsDrag: new SlickEvent2(),
+ onColumnsResized: new SlickEvent2(),
+ onColumnsResizeDblClick: new SlickEvent2(),
+ onBeforeColumnsResize: new SlickEvent2(),
+ onCellChange: new SlickEvent2(),
+ onCompositeEditorChange: new SlickEvent2(),
+ onBeforeEditCell: new SlickEvent2(),
+ onBeforeCellEditorDestroy: new SlickEvent2(),
+ onBeforeDestroy: new SlickEvent2(),
+ onActiveCellChanged: new SlickEvent2(),
+ onActiveCellPositionChanged: new SlickEvent2(),
+ onDragInit: new SlickEvent2(),
+ onDragStart: new SlickEvent2(),
+ onDrag: new SlickEvent2(),
+ onDragEnd: new SlickEvent2(),
+ onSelectedRowsChanged: new SlickEvent2(),
+ onCellCssStylesChanged: new SlickEvent2(),
+ onAutosizeColumns: new SlickEvent2(),
+ onBeforeSetColumns: new SlickEvent2(),
+ onBeforeUpdateColumns: new SlickEvent2(),
+ onRendered: new SlickEvent2(),
+ onSetOptions: new SlickEvent2(),
+ // Methods
+ registerPlugin,
+ unregisterPlugin,
+ getPluginByName,
+ getColumns,
+ setColumns,
+ updateColumns,
+ getVisibleColumns,
+ getColumnIndex,
+ updateColumnHeader,
+ setSortColumn,
+ setSortColumns,
+ getSortColumns,
+ autosizeColumns,
+ autosizeColumn,
+ getOptions,
+ setOptions,
+ getData,
+ getDataLength,
+ getDataItem,
+ setData,
+ getSelectionModel,
+ setSelectionModel,
+ getSelectedRows,
+ setSelectedRows,
+ getContainerNode,
+ updatePagingStatusFromView,
+ applyFormatResultToCellNode,
+ render,
+ reRenderColumns,
+ invalidate,
+ invalidateRow,
+ invalidateRows,
+ invalidateAllRows,
+ updateCell,
+ updateRow,
+ getViewport: getVisibleRange,
+ getRenderedRange,
+ resizeCanvas,
+ updateRowCount,
+ scrollRowIntoView,
+ scrollRowToTop,
+ scrollCellIntoView,
+ scrollColumnIntoView,
+ getCanvasNode,
+ getUID,
+ getHeaderColumnWidthDiff,
+ getScrollbarDimensions,
+ getHeadersWidth,
+ getCanvasWidth,
+ getCanvases,
+ getActiveCanvasNode,
+ getViewportNode,
+ getViewports,
+ getActiveViewportNode,
+ setActiveViewportNode,
+ focus: setFocus,
+ scrollTo,
+ cacheCssForHiddenInit,
+ restoreCssFromHiddenInit,
+ getCellFromPoint,
+ getCellFromEvent,
+ getActiveCell,
+ setActiveCell,
+ setActiveRow,
+ getActiveCellNode,
+ getActiveCellPosition,
+ resetActiveCell,
+ editActiveCell: makeActiveCellEditable,
+ getCellEditor,
+ getCellNode,
+ getCellNodeBox,
+ canCellBeSelected,
+ canCellBeActive,
+ navigatePrev,
+ navigateNext,
+ navigateUp,
+ navigateDown,
+ navigateLeft,
+ navigateRight,
+ navigatePageUp,
+ navigatePageDown,
+ navigateTop,
+ navigateBottom,
+ navigateRowStart,
+ navigateRowEnd,
+ gotoCell,
+ getTopPanel,
+ getTopPanels,
+ setTopPanelVisibility,
+ getPreHeaderPanel,
+ getPreHeaderPanelLeft: getPreHeaderPanel,
+ getPreHeaderPanelRight,
+ setPreHeaderPanelVisibility,
+ getHeader,
+ getHeaderColumn,
+ setHeaderRowVisibility,
+ getHeaderRow,
+ getHeaderRowColumn,
+ setFooterRowVisibility,
+ getFooterRow,
+ getFooterRowColumn,
+ getGridPosition,
+ flashCell,
+ addCellCssStyles,
+ setCellCssStyles,
+ removeCellCssStyles,
+ getCellCssStyles,
+ getFrozenRowOffset,
+ setColumnHeaderVisibility,
+ sanitizeHtmlString,
+ getDisplayedScrollbarDimensions,
+ getAbsoluteColumnMinWidth,
+ init: finishInitialization,
+ destroy,
+ // IEditor implementation
+ getEditorLock,
+ getEditController
+ }), init();
+}
+
+// src/controls/slick.columnpicker.js
+var BindingEventService3 = BindingEventService, SlickEvent3 = Event, Utils6 = Utils;
+function SlickColumnPicker(columns, grid, options) {
+ var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new SlickEvent3(), _bindingEventService = new BindingEventService3(), defaults2 = {
+ fadeSpeed: 250,
+ // the last 2 checkboxes titles
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ syncResizeTitle: "Synchronous resize",
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ };
+ function init(grid2) {
+ grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils6.extend({}, defaults2, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) {
+ var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle;
+ _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm);
+ }
+ _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none");
+ }
+ function handleHeaderContextMenu(e) {
+ e.preventDefault(), Utils6.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = [];
+ let columnId, columnLabel, excludeCssClass;
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ columnId = columns[i2].id, excludeCssClass = columns[i2].excludeFromColumnPicker ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i2] && columns[i2].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i2].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i2].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i2], _options) : columnLabel = defaults2.headerColumnValueExtractor(columns[i2], _options);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) {
+ let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ repositionMenu(e);
+ }
+ function repositionMenu(event) {
+ let targetEvent = event && event.touches && event.touches[0] || event;
+ _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm);
+ }
+ function updateColumnOrder() {
+ let current = _grid.getColumns().slice(0), ordered = new Array(columns.length);
+ for (let i2 = 0; i2 < ordered.length; i2++)
+ _grid.getColumnIndex(columns[i2].id) === void 0 ? ordered[i2] = columns[i2] : ordered[i2] = current.shift();
+ columns = ordered;
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]);
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ }
+ function setColumnVisibiliy(idxOrId, show2) {
+ var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx];
+ if (show2)
+ col.hidden = !1, visibleColumns.splice(idx, 0, col);
+ else {
+ let newVisibleColumns = [];
+ for (let i2 = 0; i2 < visibleColumns.length; i2++)
+ visibleColumns[i2].id !== col.id && newVisibleColumns.push(visibleColumns[i2]);
+ visibleColumns = newVisibleColumns;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ function getAllColumns() {
+ return columns;
+ }
+ function getColumnbyId(id) {
+ for (let i2 = 0; i2 < columns.length; i2++)
+ if (columns[i2].id === id)
+ return columns[i2];
+ return null;
+ }
+ function getColumnIndexbyId(id) {
+ for (let i2 = 0; i2 < columns.length; i2++)
+ if (columns[i2].id === id)
+ return i2;
+ return -1;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ return init(_grid), {
+ init,
+ getAllColumns,
+ getColumnbyId,
+ getColumnIndexbyId,
+ getVisibleColumns,
+ destroy,
+ updateAllTitles,
+ onColumnsChanged,
+ setColumnVisibiliy
+ };
+}
+
+// src/controls/slick.gridmenu.js
+var BindingEventService4 = BindingEventService, SlickEvent4 = Event, Utils7 = Utils;
+function SlickGridMenu(columns, grid, options) {
+ var _grid = grid, _gridOptions, _gridUid = grid && grid.getUID ? grid.getUID() : "", _isMenuOpen = !1, _options = options, _self = this, _columnTitleElm, _customTitleElm, _customMenuElm, _headerElm, _listElm, _buttonElm, _menuElm, columnCheckboxes, _defaults = {
+ showButton: !0,
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ marginBottom: 15,
+ menuWidth: 18,
+ contentMinWidth: 0,
+ resizeOnShowHeaderRow: !1,
+ syncResizeTitle: "Synchronous resize",
+ useClickToRepositionMenu: !0,
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ }, _bindingEventService = new BindingEventService4();
+ grid.onSetOptions.subscribe(function(e, args) {
+ if (args && args.optionsBefore && args.optionsAfter) {
+ var switchedFromRegularToFrozen = args.optionsBefore.frozenColumn >= 0 && args.optionsAfter.frozenColumn === -1, switchedFromFrozenToRegular = args.optionsBefore.frozenColumn === -1 && args.optionsAfter.frozenColumn >= 0;
+ (switchedFromRegularToFrozen || switchedFromFrozenToRegular) && recreateGridMenu();
+ }
+ });
+ function init(grid2) {
+ _gridOptions = grid2.getOptions(), createGridMenu(), grid2.onBeforeDestroy.subscribe(destroy);
+ }
+ function setOptions(newOptions) {
+ options = Utils7.extend({}, options, newOptions);
+ }
+ function createGridMenu() {
+ var gridMenuWidth = _options.gridMenu && _options.gridMenu.menuWidth || _defaults.menuWidth;
+ _gridOptions && _gridOptions.hasOwnProperty("frozenColumn") && _gridOptions.frozenColumn >= 0 ? _headerElm = document.querySelector(`.${_gridUid} .slick-header-right`) : _headerElm = document.querySelector(`.${_gridUid} .slick-header-left`), _headerElm.style.width = `calc(100% - ${gridMenuWidth}px)`;
+ var enableResizeHeaderRow = _options.gridMenu && _options.gridMenu.resizeOnShowHeaderRow != null ? _options.gridMenu.resizeOnShowHeaderRow : _defaults.resizeOnShowHeaderRow;
+ if (enableResizeHeaderRow && _options.showHeaderRow) {
+ let headerRow = document.querySelector(`.${_gridUid}.slick-headerrow`);
+ headerRow && (headerRow.style.width = `calc(100% - ${gridMenuWidth}px)`);
+ }
+ var showButton = _options.gridMenu && _options.gridMenu.showButton !== void 0 ? _options.gridMenu.showButton : _defaults.showButton;
+ if (showButton) {
+ if (_buttonElm = document.createElement("button"), _buttonElm.className = "slick-gridmenu-button", _buttonElm.ariaLabel = "Grid Menu", _options.gridMenu && _options.gridMenu.iconImage) {
+ let iconImageElm = document.createElement("img");
+ iconImageElm.src = _options.gridMenu.iconImage, _buttonElm.appendChild(iconImageElm);
+ } else
+ _options.gridMenu && _options.gridMenu.iconCssClass ? _buttonElm.classList.add(..._options.gridMenu.iconCssClass.split(" ")) : _buttonElm.classList.add("sgi", "sgi-menu");
+ options.iconCssClass && _buttonElm.classList.add(...options.iconCssClass.split(" ")), _headerElm.parentElement.insertBefore(_buttonElm, _headerElm.parentElement.firstChild), _bindingEventService.bind(_buttonElm, "click", showGridMenu);
+ }
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-gridmenu ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-gridmenu", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _customMenuElm = document.createElement("div"), _customMenuElm.className = "slick-gridmenu-custom", _customMenuElm.role = "menu", _menuElm.appendChild(_customMenuElm), populateCustomMenus(_options, _customMenuElm), populateColumnPicker(), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onColumnsChanged.unsubscribe(), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _grid.onBeforeDestroy.unsubscribe(), _grid.onSetOptions.unsubscribe(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), deleteMenu();
+ }
+ function deleteMenu() {
+ _bindingEventService.unbindAll();
+ let gridMenuElm = document.querySelector(`div.slick-gridmenu.${_gridUid}`);
+ gridMenuElm && (gridMenuElm.style.display = "none"), _headerElm && (_headerElm.style.width = "100%"), _buttonElm && _buttonElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function populateCustomMenus(options2, customMenuElm) {
+ if (!(!options2.gridMenu || !options2.gridMenu.customItems)) {
+ _options.gridMenu && _options.gridMenu.customTitle && (_customTitleElm = document.createElement("div"), _customTitleElm.className = "title", _customTitleElm.innerHTML = _options.gridMenu.customTitle, customMenuElm.appendChild(_customTitleElm));
+ for (let i2 = 0, ln = options2.gridMenu.customItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = options2.gridMenu.customItems[i2], callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ columns,
+ visibleColumns: getVisibleColumns()
+ }, isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-gridmenu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-gridmenu-item-divider"), addClickListener = !1), item.disabled && liElm.classList.add("slick-gridmenu-item-disabled"), item.hidden && liElm.classList.add("slick-gridmenu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-gridmenu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-gridmenu-content", textElm.innerHTML = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), customMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemClick.bind(this, item));
+ }
+ }
+ }
+ function populateColumnPicker() {
+ _grid.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils7.extend({}, _defaults, _options), _options.gridMenu && _options.gridMenu.columnTitle && (_columnTitleElm = document.createElement("div"), _columnTitleElm.className = "title", _columnTitleElm.innerHTML = _options.gridMenu.columnTitle, _menuElm.appendChild(_columnTitleElm)), _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-gridmenu-list", _listElm.role = "menu";
+ }
+ function recreateGridMenu() {
+ deleteMenu(), init(_grid);
+ }
+ function showGridMenu(e) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ e.preventDefault(), Utils7.emptyElement(_listElm), Utils7.emptyElement(_customMenuElm), populateCustomMenus(_options, _customMenuElm), updateColumnOrder(), columnCheckboxes = [];
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_options && _options.gridMenu && !runOverrideFunctionWhenExists(_options.gridMenu.menuUsabilityOverride, callbackArgs) || typeof e.stopPropagation == "function" && _self.onBeforeMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ let columnId, columnLabel, excludeCssClass;
+ for (let i2 = 0; i2 < columns.length; i2++) {
+ columnId = columns[i2].id, excludeCssClass = columns[i2].excludeFromGridMenu ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i2] && columns[i2].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}-gridmenu-colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i2].id, liElm.appendChild(checkboxElm), _grid.getColumnIndex(columns[i2].id) != null && !columns[i2].hidden && (checkboxElm.checked = !0), columnCheckboxes.push(checkboxElm), _options && _options.gridMenu && _options.gridMenu.headerColumnValueExtractor ? columnLabel = _options.gridMenu.headerColumnValueExtractor(columns[i2], _gridOptions) : columnLabel = _defaults.headerColumnValueExtractor(columns[i2], _gridOptions);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.gridMenu && (!_options.gridMenu.hideForceFitButton || !_options.gridMenu.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.gridMenu && _options.gridMenu.hideForceFitButton)) {
+ let forceFitTitle = _options.gridMenu && _options.gridMenu.forceFitTitle || _defaults.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, liElm.role = "menuitem", _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.gridMenu && _options.gridMenu.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.gridMenu && _options.gridMenu.syncResizeTitle || _defaults.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ let buttonElm = e.target.nodeName === "BUTTON" ? e.target : e.target.querySelector("button");
+ buttonElm || (buttonElm = e.target.parentElement), _menuElm.style.display = "block", _menuElm.style.opacity = "0";
+ let menuIconOffset = Utils7.offset(buttonElm), menuWidth = _menuElm.offsetWidth, useClickToRepositionMenu = _options.gridMenu && _options.gridMenu.useClickToRepositionMenu !== void 0 ? _options.gridMenu.useClickToRepositionMenu : _defaults.useClickToRepositionMenu, contentMinWidth = _options.gridMenu && _options.gridMenu.contentMinWidth ? _options.gridMenu.contentMinWidth : _defaults.contentMinWidth, currentMenuWidth = contentMinWidth > menuWidth ? contentMinWidth : menuWidth + 5, nextPositionTop = useClickToRepositionMenu && targetEvent.pageY > 0 ? targetEvent.pageY : menuIconOffset.top + 10, nextPositionLeft = useClickToRepositionMenu && targetEvent.pageX > 0 ? targetEvent.pageX : menuIconOffset.left + 10, menuMarginBottom = _options.gridMenu && _options.gridMenu.marginBottom !== void 0 ? _options.gridMenu.marginBottom : _defaults.marginBottom;
+ _menuElm.style.top = `${nextPositionTop + 10}px`, _menuElm.style.left = `${nextPositionLeft - currentMenuWidth + 10}px`, contentMinWidth > 0 && (_menuElm.style.minWidth = `${contentMinWidth}px`), _options.gridMenu && _options.gridMenu.height !== void 0 ? _menuElm.style.height = `${_options.gridMenu.height}px` : _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY - menuMarginBottom}px`, _menuElm.style.display = "block", _menuElm.style.opacity = "1", _menuElm.appendChild(_listElm), _isMenuOpen = !0, typeof e.stopPropagation == "function" && _self.onAfterMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1;
+ }
+ function handleBodyMouseDown(event) {
+ (_menuElm !== event.target && !(_menuElm && _menuElm.contains(event.target)) && _isMenuOpen || event.target.className === "close") && hideMenu(event);
+ }
+ function handleMenuItemClick(item, e) {
+ let command = item.command || "";
+ if (!(item.disabled || item.divider || item === "divider")) {
+ if (command != null && command != "") {
+ var callbackArgs = {
+ grid: _grid,
+ command,
+ item,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ var leaveOpen = !!(_options.gridMenu && _options.gridMenu.leaveOpen);
+ !leaveOpen && !e.defaultPrevented && hideMenu(e), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function hideMenu(e) {
+ if (_menuElm) {
+ Utils7.hide(_menuElm), _isMenuOpen = !1;
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_self.onMenuClose.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ }
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _customTitleElm && _customTitleElm.innerHTML && (_customTitleElm.innerHTML = gridMenuOptions.customTitle), _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumnOrder() {
+ for (var current = _grid.getColumns().slice(0), ordered = new Array(columns.length), i2 = 0; i2 < ordered.length; i2++)
+ _grid.getColumnIndex(columns[i2].id) === void 0 ? ordered[i2] = columns[i2] : ordered[i2] = current.shift();
+ columns = ordered;
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ _grid.setOptions({ syncColumnCellResize: !!e.target.checked });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columnCheckbox.checked && (columns[idx].hidden && (columns[idx].hidden = !1), visibleColumns.push(columns[idx]));
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ let callbackArgs = {
+ columnId,
+ showing: isChecked2,
+ grid: _grid,
+ allColumns: columns,
+ columns: visibleColumns
+ };
+ _grid.setColumns(visibleColumns), _self.onColumnsChanged.notify(callbackArgs, e, _self);
+ }
+ }
+ init(_grid);
+ function getAllColumns() {
+ return columns;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils7.extend(this, {
+ init,
+ getAllColumns,
+ getVisibleColumns,
+ destroy,
+ deleteMenu,
+ recreateGridMenu,
+ showGridMenu,
+ setOptions,
+ updateAllTitles,
+ hideMenu,
+ onAfterMenuShow: new SlickEvent4(),
+ onBeforeMenuShow: new SlickEvent4(),
+ onMenuClose: new SlickEvent4(),
+ onCommand: new SlickEvent4(),
+ onColumnsChanged: new SlickEvent4()
+ });
+}
+
+// src/controls/slick.pager.js
+var BindingEventService5 = BindingEventService, GlobalEditorLock3 = GlobalEditorLock, Utils8 = Utils;
+function SlickGridPager(dataView, grid, selectorOrElm, options) {
+ let container = getContainerElement(selectorOrElm), statusElm, _options, _defaults = {
+ showAllText: "Showing all {rowCount} rows",
+ showPageText: "Showing page {pageNum} of {pageCount}",
+ showCountText: "From {countBegin} to {countEnd} of {rowCount} rows",
+ showCount: !1,
+ pagingOptions: [
+ { data: 0, name: "All", ariaLabel: "Show All Pages" },
+ { data: -1, name: "Auto", ariaLabel: "Auto Page Size" },
+ { data: 25, name: "25", ariaLabel: "Show 25 rows per page" },
+ { data: 50, name: "50", ariaLabel: "Show 50 rows per page" },
+ { data: 100, name: "100", ariaLabel: "Show 100 rows per page" }
+ ],
+ showPageSizes: !1
+ };
+ var _bindingEventService = new BindingEventService5();
+ function init() {
+ _options = Utils8.extend(!0, {}, _defaults, options), dataView.onPagingInfoChanged.subscribe(function(e, pagingInfo) {
+ updatePager(pagingInfo);
+ }), constructPagerUI(), updatePager(dataView.getPagingInfo());
+ }
+ function destroy() {
+ setPageSize(0), _bindingEventService.unbindAll(), container.innerHTML = "";
+ }
+ function getNavState() {
+ let cannotLeaveEditMode = !GlobalEditorLock3.commitCurrentEdit(), pagingInfo = dataView.getPagingInfo(), lastPage = pagingInfo.totalPages - 1;
+ return {
+ canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,
+ canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,
+ pagingInfo
+ };
+ }
+ function setPageSize(n) {
+ dataView.setRefreshHints({
+ isFilterUnchanged: !0
+ }), dataView.setPagingOptions({ pageSize: n });
+ }
+ function gotoFirst() {
+ getNavState().canGotoFirst && dataView.setPagingOptions({ pageNum: 0 });
+ }
+ function gotoLast() {
+ let state = getNavState();
+ state.canGotoLast && dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 });
+ }
+ function gotoPrev() {
+ let state = getNavState();
+ state.canGotoPrev && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 });
+ }
+ function gotoNext() {
+ let state = getNavState();
+ state.canGotoNext && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 });
+ }
+ function getContainerElement(selectorOrElm2) {
+ return typeof selectorOrElm2 == "string" ? document.querySelector(selectorOrElm2) : typeof selectorOrElm2 == "object" && selectorOrElm2[0] ? selectorOrElm2[0] : selectorOrElm2;
+ }
+ function constructPagerUI() {
+ let container2 = getContainerElement(selectorOrElm);
+ if (!container2 || container2.jquery && !container2[0])
+ return;
+ let navElm = document.createElement("span");
+ navElm.className = "slick-pager-nav";
+ let settingsElm = document.createElement("span");
+ settingsElm.className = "slick-pager-settings", statusElm = document.createElement("span"), statusElm.className = "slick-pager-status";
+ let pagerSettingsElm = document.createElement("span");
+ pagerSettingsElm.className = "slick-pager-settings-expanded", pagerSettingsElm.textContent = "Show: ";
+ for (let o = 0; o < _options.pagingOptions.length; o++) {
+ let p = _options.pagingOptions[o], anchorElm = document.createElement("a");
+ anchorElm.textContent = p.name, anchorElm.ariaLabel = p.ariaLabel, anchorElm.dataset.val = p.data, pagerSettingsElm.appendChild(anchorElm), _bindingEventService.bind(anchorElm, "click", function(e) {
+ let pagesize = e.target.dataset.val;
+ if (pagesize !== void 0)
+ if (Number(pagesize) === -1) {
+ let vp = grid.getViewport();
+ setPageSize(vp.bottom - vp.top);
+ } else
+ setPageSize(parseInt(pagesize));
+ });
+ }
+ pagerSettingsElm.style.display = _options.showPageSizes ? "block" : "none", settingsElm.appendChild(pagerSettingsElm);
+ let displayPaginationContainer = document.createElement("span"), displayIconElm = document.createElement("span");
+ displayPaginationContainer.className = "sgi-container", displayIconElm.ariaLabel = "Show Pagination Options", displayIconElm.role = "button", displayIconElm.className = "sgi sgi-lightbulb", displayPaginationContainer.appendChild(displayIconElm), _bindingEventService.bind(displayIconElm, "click", () => {
+ let styleDisplay = pagerSettingsElm.style.display;
+ pagerSettingsElm.style.display = styleDisplay === "none" ? "inline-flex" : "none";
+ }), settingsElm.appendChild(displayPaginationContainer), [
+ { key: "start", ariaLabel: "First Page", callback: gotoFirst },
+ { key: "left", ariaLabel: "Previous Page", callback: gotoPrev },
+ { key: "right", ariaLabel: "Next Page", callback: gotoNext },
+ { key: "end", ariaLabel: "Last Page", callback: gotoLast }
+ ].forEach((pageBtn) => {
+ let iconElm = document.createElement("span");
+ iconElm.className = "sgi-container";
+ let innerIconElm = document.createElement("span");
+ innerIconElm.role = "button", innerIconElm.ariaLabel = pageBtn.ariaLabel, innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`, _bindingEventService.bind(innerIconElm, "click", pageBtn.callback), iconElm.appendChild(innerIconElm), navElm.appendChild(iconElm);
+ });
+ let slickPagerElm = document.createElement("div");
+ slickPagerElm.className = "slick-pager", slickPagerElm.appendChild(navElm), slickPagerElm.appendChild(statusElm), slickPagerElm.appendChild(settingsElm), container2.appendChild(slickPagerElm);
+ }
+ function updatePager(pagingInfo) {
+ if (!container || container.jquery && !container[0])
+ return;
+ let state = getNavState();
+ if (container.querySelectorAll(".slick-pager-nav span").forEach((pagerIcon) => pagerIcon.classList.remove("sgi-state-disabled")), state.canGotoFirst || container.querySelector(".sgi-chevron-start").classList.add("sgi-state-disabled"), state.canGotoLast || container.querySelector(".sgi-chevron-end").classList.add("sgi-state-disabled"), state.canGotoNext || container.querySelector(".sgi-chevron-right").classList.add("sgi-state-disabled"), state.canGotoPrev || container.querySelector(".sgi-chevron-left").classList.add("sgi-state-disabled"), pagingInfo.pageSize === 0 ? statusElm.textContent = _options.showAllText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{pageCount}", pagingInfo.totalPages + "") : statusElm.textContent = _options.showPageText.replace("{pageNum}", pagingInfo.pageNum + 1 + "").replace("{pageCount}", pagingInfo.totalPages + ""), _options.showCount && pagingInfo.pageSize !== 0) {
+ let pageBegin = pagingInfo.pageNum * pagingInfo.pageSize, currentText = statusElm.textContent;
+ currentText && (currentText += " - "), statusElm.textContent = currentText + _options.showCountText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{countBegin}", pageBegin + 1).replace("{countEnd}", Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows));
+ }
+ }
+ init(), Utils8.extend(this, {
+ init,
+ destroy
+ });
+}
+
+// src/plugins/slick.autotooltips.ts
+var Utils9 = Utils;
+function SlickAutoTooltips(options) {
+ let _grid, _defaults = {
+ enableForCells: !0,
+ enableForHeaderCells: !1,
+ maxToolTipLength: void 0,
+ replaceExisting: !0
+ };
+ function init(grid) {
+ options = Utils9.extend(!0, {}, _defaults, options), _grid = grid, options.enableForCells && _grid.onMouseEnter.subscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);
+ }
+ function destroy() {
+ options.enableForCells && _grid.onMouseEnter.unsubscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);
+ }
+ function handleMouseEnter(event) {
+ let cell = _grid.getCellFromEvent(event);
+ if (cell) {
+ let node = _grid.getCellNode(cell.row, cell.cell), text;
+ options && node && (!node.title || options?.replaceExisting) && (node.clientWidth < node.scrollWidth ? (text = node.textContent?.trim() ?? "", options && options.maxToolTipLength && text.length > options.maxToolTipLength && (text = text.substring(0, options.maxToolTipLength - 3) + "...")) : text = "", node.title = text), node = null;
+ }
+ }
+ function handleHeaderMouseEnter(event, args) {
+ let column = args.column, node, targetElm = event.target;
+ targetElm && (node = targetElm.closest(".slick-header-column"), node && !(column && column.toolTip) && (node.title = targetElm.clientWidth < node.clientWidth ? column?.name ?? "" : "")), node = null;
+ }
+ return {
+ init,
+ destroy,
+ pluginName: "AutoTooltips"
+ };
+}
+
+// src/plugins/slick.cellcopymanager.js
+var keyCode5 = keyCode, SlickEvent5 = Event, Utils10 = Utils;
+function CellCopyManager() {
+ var _grid, _self = this, _copiedRanges;
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function handleKeyDown(e) {
+ var ranges;
+ _grid.getEditorLock().isActive() || (e.which == keyCode5.ESCAPE && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), e.which == 67 && (e.ctrlKey || e.metaKey) && (ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0 && (e.preventDefault(), _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges }))), e.which == 86 && (e.ctrlKey || e.metaKey) && _copiedRanges && (e.preventDefault(), ranges = _grid.getSelectionModel().getSelectedRanges(), _self.onPasteCells.notify({ from: _copiedRanges, to: ranges }), _grid.getOptions().preserveCopiedSelectionOnPaste || (clearCopySelection(), _copiedRanges = null)));
+ }
+ function markCopySelection(ranges) {
+ for (var columns = _grid.getColumns(), hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell; k++)
+ hash[j][columns[k].id] = "copied";
+ }
+ _grid.setCellCssStyles("copy-manager", hash);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles("copy-manager");
+ }
+ Utils10.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellCopyManager",
+ clearCopySelection,
+ onCopyCells: new SlickEvent5(),
+ onCopyCancelled: new SlickEvent5(),
+ onPasteCells: new SlickEvent5()
+ });
+}
+
+// src/plugins/slick.cellexternalcopymanager.js
+var SlickEvent6 = Event, Utils11 = Utils;
+function CellExternalCopyManager(options) {
+ var _grid, _self = this, _copiedRanges, _options = options || {}, _copiedCellStyleLayerKey = _options.copiedCellStyleLayerKey || "copy-manager", _copiedCellStyle = _options.copiedCellStyle || "copied", _clearCopyTI = 0, _bodyElement = _options.bodyElement || document.body, _onCopyInit = _options.onCopyInit || null, _onCopySuccess = _options.onCopySuccess || null, keyCodes = {
+ C: 67,
+ V: 86,
+ ESC: 27,
+ INSERT: 45
+ };
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ var cellSelectionModel = grid.getSelectionModel();
+ if (!cellSelectionModel)
+ throw new Error("Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())");
+ cellSelectionModel.onSelectedRangesChanged.subscribe(() => {
+ _grid.getEditorLock().isActive() || _grid.focus();
+ });
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function getHeaderValueForColumn(columnDef) {
+ if (_options.headerColumnValueExtractor) {
+ var val = _options.headerColumnValueExtractor(columnDef);
+ if (val)
+ return val;
+ }
+ return columnDef.name;
+ }
+ function getDataItemValueForColumn(item, columnDef, event) {
+ if (typeof _options.dataItemColumnValueExtractor == "function") {
+ let val = _options.dataItemColumnValueExtractor(item, columnDef);
+ if (val)
+ return val;
+ }
+ let retVal = "";
+ if (columnDef && columnDef.editor) {
+ let tmpP = document.createElement("p"), editor = new columnDef.editor({
+ container: tmpP,
+ // a dummy container
+ column: columnDef,
+ event,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), retVal = editor.serializeValue(), editor.destroy(), tmpP.remove();
+ } else
+ retVal = item[columnDef.field || ""];
+ return retVal;
+ }
+ function setDataItemValueForColumn(item, columnDef, value) {
+ if (columnDef.denyPaste)
+ return null;
+ if (_options.dataItemColumnValueSetter)
+ return _options.dataItemColumnValueSetter(item, columnDef, value);
+ if (columnDef.editor) {
+ let tmpDiv = document.createElement("div"), editor = new columnDef.editor({
+ container: tmpDiv,
+ // a dummy container
+ column: columnDef,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), editor.applyValue(item, value), editor.destroy(), tmpDiv.remove();
+ } else
+ item[columnDef.field] = value;
+ }
+ function _createTextBox(innerText) {
+ var ta = document.createElement("textarea");
+ return ta.style.position = "absolute", ta.style.left = "-1000px", ta.style.top = document.body.scrollTop + "px", ta.value = innerText, _bodyElement.appendChild(ta), ta.select(), ta;
+ }
+ function _decodeTabularData(_grid2, ta) {
+ var columns = _grid2.getColumns(), clipText = ta.value, clipRows = clipText.split(/[\n\f\r]/);
+ clipRows[clipRows.length - 1] === "" && clipRows.pop();
+ var clippedRange = [], j = 0;
+ _bodyElement.removeChild(ta);
+ for (var i2 = 0; i2 < clipRows.length; i2++)
+ clipRows[i2] !== "" ? clippedRange[j++] = clipRows[i2].split(" ") : clippedRange[j++] = [""];
+ var selectedCell = _grid2.getActiveCell(), ranges = _grid2.getSelectionModel().getSelectedRanges(), selectedRange = ranges && ranges.length ? ranges[0] : null, activeRow = null, activeCell = null;
+ if (selectedRange)
+ activeRow = selectedRange.fromRow, activeCell = selectedRange.fromCell;
+ else if (selectedCell)
+ activeRow = selectedCell.row, activeCell = selectedCell.cell;
+ else
+ return;
+ var oneCellToMultiple = !1, destH = clippedRange.length, destW = clippedRange.length ? clippedRange[0].length : 0;
+ clippedRange.length == 1 && clippedRange[0].length == 1 && selectedRange && (oneCellToMultiple = !0, destH = selectedRange.toRow - selectedRange.fromRow + 1, destW = selectedRange.toCell - selectedRange.fromCell + 1);
+ var availableRows = _grid2.getData().length - activeRow, addRows = 0;
+ if (availableRows < destH && _options.newRowCreator) {
+ var d = _grid2.getData();
+ for (addRows = 1; addRows <= destH - availableRows; addRows++)
+ d.push({});
+ _grid2.setData(d), _grid2.render();
+ }
+ var overflowsBottomOfGrid = activeRow + destH > _grid2.getDataLength();
+ if (_options.newRowCreator && overflowsBottomOfGrid) {
+ var newRowsNeeded = activeRow + destH - _grid2.getDataLength();
+ _options.newRowCreator(newRowsNeeded);
+ }
+ var clipCommand = {
+ isClipboardCommand: !0,
+ clippedRange,
+ oldValues: [],
+ cellExternalCopyManager: _self,
+ _options,
+ setDataItemValueForColumn,
+ markCopySelection,
+ oneCellToMultiple,
+ activeRow,
+ activeCell,
+ destH,
+ destW,
+ maxDestY: _grid2.getDataLength(),
+ maxDestX: _grid2.getColumns().length,
+ h: 0,
+ w: 0,
+ execute: function() {
+ this.h = 0;
+ for (var y = 0; y < this.destH; y++) {
+ this.oldValues[y] = [], this.w = 0, this.h++;
+ for (var x = 0; x < this.destW; x++) {
+ this.w++;
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ this.oldValues[y][x] = dt[columns[destx].field], oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], clippedRange[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], clippedRange[y] ? clippedRange[y][x] : ""), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] });
+ },
+ undo: function() {
+ for (var y = 0; y < this.destH; y++)
+ for (var x = 0; x < this.destW; x++) {
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[y][x]), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ if (this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] }), addRows > 1) {
+ for (var d2 = _grid2.getData(); addRows > 1; addRows--)
+ d2.splice(d2.length - 1, 1);
+ _grid2.setData(d2), _grid2.render();
+ }
+ }
+ };
+ _options.clipboardCommandHandler ? _options.clipboardCommandHandler(clipCommand) : clipCommand.execute();
+ }
+ function handleKeyDown(e, args) {
+ var ranges;
+ if (!_grid.getEditorLock().isActive() || _grid.getOptions().autoEdit) {
+ if (e.which == keyCodes.ESC && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), (e.which === keyCodes.C || e.which === keyCodes.INSERT) && (e.ctrlKey || e.metaKey) && !e.shiftKey && (_onCopyInit && _onCopyInit.call(), ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0)) {
+ _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges });
+ for (var columns = _grid.getColumns(), clipText = "", rg = 0; rg < ranges.length; rg++) {
+ for (var range = ranges[rg], clipTextRows = [], i2 = range.fromRow; i2 < range.toRow + 1; i2++) {
+ var clipTextCells = [], dt = _grid.getDataItem(i2);
+ if (clipTextRows.length === 0 && _options.includeHeaderWhenCopying) {
+ for (var clipTextHeaders = [], j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextHeaders.push(getHeaderValueForColumn(columns[j]));
+ clipTextRows.push(clipTextHeaders.join(" "));
+ }
+ for (var j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextCells.push(getDataItemValueForColumn(dt, columns[j], e));
+ clipTextRows.push(clipTextCells.join(" "));
+ }
+ clipText += clipTextRows.join(`\r
+`) + `\r
+`;
+ }
+ if (window.clipboardData)
+ return window.clipboardData.setData("Text", clipText), !0;
+ var focusEl = document.activeElement, ta = _createTextBox(clipText);
+ if (ta.focus(), setTimeout(function() {
+ _bodyElement.removeChild(ta), focusEl ? focusEl.focus() : console.log("Not element to restore focus to after copy?");
+ }, 100), _onCopySuccess) {
+ var rowCount = 0;
+ ranges.length === 1 ? rowCount = ranges[0].toRow + 1 - ranges[0].fromRow : rowCount = ranges.length, _onCopySuccess.call(this, rowCount);
+ }
+ return !1;
+ }
+ if (!_options.readOnlyMode && (e.which === keyCodes.V && (e.ctrlKey || e.metaKey) && !e.shiftKey || e.which === keyCodes.INSERT && e.shiftKey && !e.ctrlKey)) {
+ var ta = _createTextBox("");
+ return setTimeout(function() {
+ _decodeTabularData(_grid, ta);
+ }, 100), !1;
+ }
+ }
+ }
+ function markCopySelection(ranges) {
+ clearCopySelection();
+ for (var columns = _grid.getColumns(), hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell && k < columns.length; k++)
+ hash[j][columns[k].id] = _copiedCellStyle;
+ }
+ _grid.setCellCssStyles(_copiedCellStyleLayerKey, hash), clearTimeout(_clearCopyTI), _clearCopyTI = setTimeout(function() {
+ _self.clearCopySelection();
+ }, 2e3);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles(_copiedCellStyleLayerKey);
+ }
+ function setIncludeHeaderWhenCopying(includeHeaderWhenCopying) {
+ _options.includeHeaderWhenCopying = includeHeaderWhenCopying;
+ }
+ Utils11.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellExternalCopyManager",
+ clearCopySelection,
+ handleKeyDown,
+ onCopyCells: new SlickEvent6(),
+ onCopyCancelled: new SlickEvent6(),
+ onPasteCells: new SlickEvent6(),
+ setIncludeHeaderWhenCopying
+ });
+}
+
+// src/plugins/slick.cellmenu.js
+var BindingEventService6 = BindingEventService, SlickEvent7 = Event, EventData4 = EventData, EventHandler2 = EventHandler, Utils12 = Utils;
+function CellMenu(optionProperties) {
+ let _cellMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler2(), _self = this, _commandTitleElm, _optionTitleElm, _menuElm, _bindingEventService = new BindingEventService6(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: 0,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !0,
+ maxHeight: "none",
+ width: "auto"
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _cellMenuProperties = Utils12.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onClick, handleCellClick), _cellMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _cellMenuProperties = Utils12.extend({}, _cellMenuProperties, newOptions);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ let cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), commandItems = _cellMenuProperties.commandItems || [], optionItems = _cellMenuProperties.optionItems || [];
+ if (!columnDef || !columnDef.cellMenu || !commandItems.length && !optionItems.length || (destroyMenu(), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_cellMenuProperties.maxHeight) ? _cellMenuProperties.maxHeight : _cellMenuProperties.maxHeight + "px", width2 = isNaN(_cellMenuProperties.width) ? _cellMenuProperties.width : _cellMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-cell-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width2, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${e.pageY + 5}px`, _menuElm.style.left = `${e.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-cell-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_cellMenuProperties.hideOptionSection && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-cell-menu-option-list", optionMenuElm.role = "menu", _cellMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _cellMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_cellMenuProperties.hideCommandSection && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-cell-menu-command-list", commandMenuElm.role = "menu", !_cellMenuProperties.hideCloseButton && (optionItems.length === 0 || _cellMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _cellMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-cell-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function repositionMenu(e) {
+ let parentElm = e.target.closest(".slick-cell"), parentOffset = parentElm && Utils12.offset(parentElm), menuOffsetLeft = parentElm ? parentOffset.left : e.pageX, menuOffsetTop = parentElm ? parentOffset.top : e.pageY, parentCellWidth = parentElm.offsetWidth || 0, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _cellMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _cellMenuProperties.autoAdjustDropOffset, sideOffset = _cellMenuProperties.autoAlignSideOffset;
+ if (_cellMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils12.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils12.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_cellMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - (menuWidth - parentCellWidth) - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function handleCellClick(e, args) {
+ e instanceof EventData4 && (e = e.getNativeEvent());
+ let cell = _grid.getCellFromEvent(e), dataContext = _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ columnDef && columnDef.cellMenu && e.preventDefault(), _cellMenuProperties = Utils12.extend({}, _cellMenuProperties, columnDef.cellMenu), args || (args = {}), args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_cellMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.setAttribute("aria-expanded", "true"), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this)));
+ }
+ function handleBodyMouseDown(e) {
+ _menuElm != e.target && !(_menuElm && _menuElm.contains(e.target)) && (e.defaultPrevented || closeMenu(e, { cell: _currentCell, row: _currentRow }));
+ }
+ function closeMenu(e, args) {
+ if (_menuElm) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm && _menuElm.remove && (_menuElm.remove(), _menuElm = null);
+ }
+ }
+ function populateOptionItems(cellMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !cellMenu)) {
+ cellMenu && cellMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = cellMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i2 = 0, ln = optionItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = optionItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(cellMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !cellMenu)) {
+ cellMenu && cellMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = cellMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i2 = 0, ln = commandItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = commandItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider")
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (command !== null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider" || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils12.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "CellMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent7(),
+ onBeforeMenuShow: new SlickEvent7(),
+ onBeforeMenuClose: new SlickEvent7(),
+ onCommand: new SlickEvent7(),
+ onOptionSelected: new SlickEvent7()
+ });
+}
+
+// src/plugins/slick.cellrangedecorator.js
+var Utils13 = Utils;
+function CellRangeDecorator(grid, options) {
+ var _elem, _defaults = {
+ selectionCssClass: "slick-range-decorator",
+ selectionCss: {
+ zIndex: "9999",
+ border: "2px dashed red"
+ },
+ offset: { top: -1, left: -1, height: -2, width: -2 }
+ };
+ options = Utils13.extend(!0, {}, _defaults, options);
+ function show2(range) {
+ if (!_elem) {
+ _elem = document.createElement("div"), _elem.className = options.selectionCssClass, Object.keys(options.selectionCss).forEach((cssStyleKey) => {
+ _elem.style[cssStyleKey] = options.selectionCss[cssStyleKey];
+ }), _elem.style.position = "absolute";
+ let canvasNode = grid.getActiveCanvasNode();
+ canvasNode && canvasNode.appendChild(_elem);
+ }
+ var from = grid.getCellNodeBox(range.fromRow, range.fromCell), to = grid.getCellNodeBox(range.toRow, range.toCell);
+ return from && to && options && options.offset && (_elem.style.top = `${from.top + options.offset.top}px`, _elem.style.left = `${from.left + options.offset.left}px`, _elem.style.height = `${to.bottom - from.top + options.offset.height}px`, _elem.style.width = `${to.right - from.left + options.offset.width}px`), _elem;
+ }
+ function destroy() {
+ hide2();
+ }
+ function hide2() {
+ _elem && (_elem.remove(), _elem = null);
+ }
+ Utils13.extend(this, {
+ pluginName: "CellRangeDecorator",
+ show: show2,
+ hide: hide2,
+ destroy
+ });
+}
+
+// src/plugins/slick.cellrangeselector.js
+var SlickEvent8 = Event, EventHandler3 = EventHandler, SlickRange2 = Range, Draggable3 = Draggable, CellRangeDecorator2 = CellRangeDecorator, Utils14 = Utils;
+function CellRangeSelector(options) {
+ var _grid, _currentlySelectedRange, _canvas, _gridOptions, _activeCanvas, _dragging, _decorator, _self = this, _handler = new EventHandler3(), _defaults = {
+ autoScroll: !0,
+ minIntervalToShowNextCell: 30,
+ maxIntervalToShowNextCell: 600,
+ // better to a multiple of minIntervalToShowNextCell
+ accelerateInterval: 5,
+ // increase 5ms when cursor 1px outside the viewport.
+ selectionCss: {
+ border: "2px dashed blue"
+ }
+ }, _rowOffset, _columnOffset, _isRightCanvas, _isBottomCanvas, _activeViewport, _viewportWidth, _viewportHeight, _draggingMouseOffset, _moveDistanceForOneCell, _autoScrollTimerId, _xDelayForNextCell, _yDelayForNextCell, _isRowMoveRegistered = !1, _scrollTop = 0, _scrollLeft = 0;
+ function init(grid) {
+ if (typeof Draggable3 > "u")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ options = Utils14.extend(!0, {}, _defaults, options), _decorator = options.cellDecorator || new CellRangeDecorator2(grid, options), _grid = grid, _canvas = _grid.getCanvasNode(), _gridOptions = _grid.getOptions(), _handler.subscribe(_grid.onScroll, handleScroll).subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _activeCanvas = null, _activeViewport = null, _canvas = null, _decorator && _decorator.destroy && _decorator.destroy();
+ }
+ function getCellDecorator() {
+ return _decorator;
+ }
+ function handleScroll(e, args) {
+ _scrollTop = args.scrollTop, _scrollLeft = args.scrollLeft;
+ }
+ function handleDragInit(e) {
+ _activeCanvas = _grid.getActiveCanvasNode(e), _activeViewport = _grid.getActiveViewportNode(e);
+ var scrollbarDimensions2 = _grid.getDisplayedScrollbarDimensions();
+ if (_viewportWidth = _activeViewport.offsetWidth - scrollbarDimensions2.width, _viewportHeight = _activeViewport.offsetHeight - scrollbarDimensions2.height, _moveDistanceForOneCell = {
+ x: _grid.getAbsoluteColumnMinWidth() / 2,
+ y: _grid.getOptions().rowHeight / 2
+ }, _isRowMoveRegistered = hasRowMoveManager(), _rowOffset = 0, _columnOffset = 0, _isBottomCanvas = _activeCanvas.classList.contains("grid-canvas-bottom"), _gridOptions.frozenRow > -1 && _isBottomCanvas) {
+ let canvasSelector = `.${_grid.getUID()} .grid-canvas-${_gridOptions.frozenBottom ? "bottom" : "top"}`, canvasElm = document.querySelector(canvasSelector);
+ canvasElm && (_rowOffset = canvasElm.clientHeight || 0);
+ }
+ if (_isRightCanvas = _activeCanvas.classList.contains("grid-canvas-right"), _gridOptions.frozenColumn > -1 && _isRightCanvas) {
+ let canvasLeftElm = document.querySelector(`.${_grid.getUID()} .grid-canvas-left`);
+ canvasLeftElm && (_columnOffset = canvasLeftElm.clientWidth || 0);
+ }
+ e.stopImmediatePropagation(), e.preventDefault();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e);
+ if (_self.onBeforeCellRangeSelected.notify(cell) !== !1 && _grid.canCellBeSelected(cell.row, cell.cell) && (_dragging = !0, e.stopImmediatePropagation()), !_dragging)
+ return;
+ _grid.focus();
+ let canvasOffset = Utils14.offset(_canvas), startX = dd.startX - (canvasOffset.left || 0);
+ _gridOptions.frozenColumn >= 0 && _isRightCanvas && (startX += _scrollLeft);
+ let startY = dd.startY - (canvasOffset.top || 0);
+ _gridOptions.frozenRow >= 0 && _isBottomCanvas && (startY += _scrollTop);
+ var start = _grid.getCellFromPoint(startX, startY);
+ return dd.range = { start, end: {} }, _currentlySelectedRange = dd.range, _decorator.show(new SlickRange2(start.row, start.cell));
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging && !_isRowMoveRegistered)
+ return;
+ _isRowMoveRegistered || evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ if (options.autoScroll && (_draggingMouseOffset = getMouseOffsetViewport(e, dd), _draggingMouseOffset.isOutsideViewport))
+ return handleDragOutsideViewport();
+ stopIntervalTimer(), handleDragTo(e, dd);
+ }
+ function getMouseOffsetViewport(e, dd) {
+ var targetEvent = e.touches ? e.touches[0] : e, viewportLeft = _activeViewport.scrollLeft, viewportTop = _activeViewport.scrollTop, viewportRight = viewportLeft + _viewportWidth, viewportBottom = viewportTop + _viewportHeight, viewportOffset = Utils14.offset(_activeViewport), viewportOffsetLeft = viewportOffset.left || 0, viewportOffsetTop = viewportOffset.top || 0, viewportOffsetRight = viewportOffsetLeft + _viewportWidth, viewportOffsetBottom = viewportOffsetTop + _viewportHeight, result = {
+ e,
+ dd,
+ viewport: {
+ left: viewportLeft,
+ top: viewportTop,
+ right: viewportRight,
+ bottom: viewportBottom,
+ offset: {
+ left: viewportOffsetLeft,
+ top: viewportOffsetTop,
+ right: viewportOffsetRight,
+ bottom: viewportOffsetBottom
+ }
+ },
+ // Consider the viewport as the origin, the `offset` is based on the coordinate system:
+ // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.
+ offset: {
+ x: 0,
+ y: 0
+ },
+ isOutsideViewport: !1
+ };
+ return targetEvent.pageX < viewportOffsetLeft ? result.offset.x = targetEvent.pageX - viewportOffsetLeft : targetEvent.pageX > viewportOffsetRight && (result.offset.x = targetEvent.pageX - viewportOffsetRight), targetEvent.pageY < viewportOffsetTop ? result.offset.y = viewportOffsetTop - targetEvent.pageY : targetEvent.pageY > viewportOffsetBottom && (result.offset.y = viewportOffsetBottom - targetEvent.pageY), result.isOutsideViewport = !!result.offset.x || !!result.offset.y, result;
+ }
+ function handleDragOutsideViewport() {
+ if (_xDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.x) * options.accelerateInterval, _yDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.y) * options.accelerateInterval, !_autoScrollTimerId) {
+ var xTotalDelay = 0, yTotalDelay = 0;
+ _autoScrollTimerId = setInterval(function() {
+ var xNeedUpdate = !1, yNeedUpdate = !1;
+ _draggingMouseOffset.offset.x ? (xTotalDelay += options.minIntervalToShowNextCell, xNeedUpdate = xTotalDelay >= _xDelayForNextCell) : xTotalDelay = 0, _draggingMouseOffset.offset.y ? (yTotalDelay += options.minIntervalToShowNextCell, yNeedUpdate = yTotalDelay >= _yDelayForNextCell) : yTotalDelay = 0, (xNeedUpdate || yNeedUpdate) && (xNeedUpdate && (xTotalDelay = 0), yNeedUpdate && (yTotalDelay = 0), handleDragToNewPosition(xNeedUpdate, yNeedUpdate));
+ }, options.minIntervalToShowNextCell);
+ }
+ }
+ function handleDragToNewPosition(xNeedUpdate, yNeedUpdate) {
+ var pageX = _draggingMouseOffset.e.pageX, pageY = _draggingMouseOffset.e.pageY, mouseOffsetX = _draggingMouseOffset.offset.x, mouseOffsetY = _draggingMouseOffset.offset.y, viewportOffset = _draggingMouseOffset.viewport.offset;
+ xNeedUpdate && mouseOffsetX && (mouseOffsetX > 0 ? pageX = viewportOffset.right + _moveDistanceForOneCell.x : pageX = viewportOffset.left - _moveDistanceForOneCell.x), yNeedUpdate && mouseOffsetY && (mouseOffsetY > 0 ? pageY = viewportOffset.top - _moveDistanceForOneCell.y : pageY = viewportOffset.bottom + _moveDistanceForOneCell.y), handleDragTo({
+ pageX,
+ pageY
+ }, _draggingMouseOffset.dd);
+ }
+ function stopIntervalTimer() {
+ clearInterval(_autoScrollTimerId), _autoScrollTimerId = null;
+ }
+ function handleDragTo(e, dd) {
+ let targetEvent = e.touches ? e.touches[0] : e, canvasOffset = Utils14.offset(_activeCanvas), end = _grid.getCellFromPoint(
+ targetEvent.pageX - (canvasOffset && canvasOffset.left || 0) + _columnOffset,
+ targetEvent.pageY - (canvasOffset && canvasOffset.top || 0) + _rowOffset
+ );
+ if (!(_gridOptions.frozenColumn >= 0 && !_isRightCanvas && end.cell > _gridOptions.frozenColumn || _isRightCanvas && end.cell <= _gridOptions.frozenColumn) && !(_gridOptions.frozenRow >= 0 && !_isBottomCanvas && end.row >= _gridOptions.frozenRow || _isBottomCanvas && end.row < _gridOptions.frozenRow)) {
+ if (options.autoScroll && _draggingMouseOffset) {
+ var endCellBox = _grid.getCellNodeBox(end.row, end.cell);
+ if (!endCellBox)
+ return;
+ var viewport = _draggingMouseOffset.viewport;
+ (endCellBox.left < viewport.left || endCellBox.right > viewport.right || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) && _grid.scrollCellIntoView(end.row, end.cell);
+ }
+ if (_grid.canCellBeSelected(end.row, end.cell) && dd && dd.range) {
+ dd.range.end = end;
+ var range = new SlickRange2(dd.range.start.row, dd.range.start.cell, end.row, end.cell);
+ _decorator.show(range), _self.onCellRangeSelecting.notify({
+ range
+ });
+ }
+ }
+ }
+ function hasRowMoveManager() {
+ return !!(_grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager"));
+ }
+ function handleDragEnd(e, dd) {
+ _dragging && (_dragging = !1, e.stopImmediatePropagation(), stopIntervalTimer(), _decorator.hide(), _self.onCellRangeSelected.notify({
+ range: new SlickRange2(
+ dd.range.start.row,
+ dd.range.start.cell,
+ dd.range.end.row,
+ dd.range.end.cell
+ )
+ }));
+ }
+ function getCurrentRange() {
+ return _currentlySelectedRange;
+ }
+ Utils14.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellRangeSelector",
+ getCellDecorator,
+ getCurrentRange,
+ onBeforeCellRangeSelected: new SlickEvent8(),
+ onCellRangeSelected: new SlickEvent8(),
+ onCellRangeSelecting: new SlickEvent8()
+ });
+}
+
+// src/plugins/slick.cellselectionmodel.js
+var SlickEvent9 = Event, EventData5 = EventData, SlickRange3 = Range, CellRangeSelector2 = CellRangeSelector, Utils15 = Utils;
+function CellSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _selector;
+ typeof options > "u" || typeof options.cellRangeSelector > "u" ? _selector = new CellRangeSelector2({
+ selectionCss: {
+ border: "2px solid black"
+ }
+ }) : _selector = options.cellRangeSelector;
+ var _options, _defaults = {
+ selectActiveCell: !0
+ };
+ function init(grid) {
+ _options = Utils15.extend(!0, {}, _defaults, options), _grid = grid, _grid.onActiveCellChanged.subscribe(handleActiveCellChange), _grid.onKeyDown.subscribe(handleKeyDown), grid.registerPlugin(_selector), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
+ }
+ function destroy() {
+ _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange), _grid.onKeyDown.unsubscribe(handleKeyDown), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector && _selector.destroy && _selector.destroy();
+ }
+ function removeInvalidRanges(ranges) {
+ for (var result = [], i2 = 0; i2 < ranges.length; i2++) {
+ var r = ranges[i2];
+ _grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell) && result.push(r);
+ }
+ return result;
+ }
+ function rangesAreEqual(range1, range2) {
+ var areDifferent = range1.length !== range2.length;
+ if (!areDifferent) {
+ for (var i2 = 0; i2 < range1.length; i2++)
+ if (range1[i2].fromCell !== range2[i2].fromCell || range1[i2].fromRow !== range2[i2].fromRow || range1[i2].toCell !== range2[i2].toCell || range1[i2].toRow !== range2[i2].toRow) {
+ areDifferent = !0;
+ break;
+ }
+ }
+ return !areDifferent;
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ var rangeHasChanged = !rangesAreEqual(_ranges, ranges);
+ if (_ranges = removeInvalidRanges(ranges), rangeHasChanged) {
+ var eventData = new EventData5(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickCellSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRanges(getSelectedRanges());
+ }
+ function handleBeforeCellRangeSelected(e) {
+ if (_grid.getEditorLock().isActive())
+ return e.stopPropagation(), !1;
+ }
+ function handleCellRangeSelected(e, args) {
+ _grid.setActiveCell(args.range.fromRow, args.range.fromCell, !1, !1, !0), setSelectedRanges([args.range]);
+ }
+ function handleActiveCellChange(e, args) {
+ _options.selectActiveCell && args.row != null && args.cell != null ? setSelectedRanges([new SlickRange3(args.row, args.cell)]) : _options.selectActiveCell || setSelectedRanges([]);
+ }
+ function handleKeyDown(e) {
+ var ranges, last, active = _grid.getActiveCell(), metaKey = e.ctrlKey || e.metaKey;
+ if (active && e.shiftKey && !metaKey && !e.altKey && (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {
+ ranges = getSelectedRanges().slice(), ranges.length || ranges.push(new SlickRange3(active.row, active.cell)), last = ranges.pop(), last.contains(active.row, active.cell) || (last = new SlickRange3(active.row, active.cell));
+ var dRow = last.toRow - last.fromRow, dCell = last.toCell - last.fromCell, dirRow = active.row == last.fromRow ? 1 : -1, dirCell = active.cell == last.fromCell ? 1 : -1;
+ e.which == 37 ? dCell -= dirCell : e.which == 39 ? dCell += dirCell : e.which == 38 ? dRow -= dirRow : e.which == 40 && (dRow += dirRow);
+ var new_last = new SlickRange3(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);
+ if (removeInvalidRanges([new_last]).length) {
+ ranges.push(new_last);
+ var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow, viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;
+ _grid.scrollRowIntoView(viewRow), _grid.scrollCellIntoView(viewRow, viewCell);
+ } else
+ ranges.push(last);
+ setSelectedRanges(ranges), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ Utils15.extend(this, {
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "CellSelectionModel",
+ onSelectedRangesChanged: new SlickEvent9()
+ });
+}
+
+// src/plugins/slick.checkboxselectcolumn.js
+var BindingEventService7 = BindingEventService, EventHandler4 = EventHandler, Utils16 = Utils;
+function CheckboxSelectColumn(options) {
+ let _dataView, _grid, _isUsingDataView = !1, _selectableOverride = null, _headerRowNode, _selectAll_UID = createUID(), _handler = new EventHandler4(), _selectedRowsLookup = {}, _defaults = {
+ columnId: "_checkbox_selector",
+ cssClass: null,
+ hideSelectAllCheckbox: !1,
+ toolTip: "Select/Deselect All",
+ width: 30,
+ applySelectOnAllPages: !1,
+ // defaults to false, when that is enabled the "Select All" will be applied to all pages (when using Pagination)
+ hideInColumnTitleRow: !1,
+ hideInFilterHeaderRow: !0
+ }, _isSelectAllChecked = !1, _bindingEventService = new BindingEventService7(), _options = Utils16.extend(!0, {}, _defaults, options);
+ typeof _options.selectableOverride == "function" && selectableOverride(_options.selectableOverride);
+ function init(grid) {
+ _grid = grid, _isUsingDataView = !Array.isArray(grid.getData()), _isUsingDataView && (_dataView = grid.getData()), _handler.subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged).subscribe(_grid.onClick, handleClick).subscribe(_grid.onKeyDown, handleKeyDown), _isUsingDataView && _dataView && _options.applySelectOnAllPages && _handler.subscribe(_dataView.onSelectedRowIdsChanged, handleDataViewSelectedIdsChanged).subscribe(_dataView.onPagingInfoChanged, handleDataViewSelectedIdsChanged), _options.hideInFilterHeaderRow || addCheckboxToFilterHeaderRow(grid), _options.hideInColumnTitleRow || _handler.subscribe(_grid.onHeaderClick, handleHeaderClick);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ if (_options = Utils16.extend(!0, {}, _options, options2), _options.hideSelectAllCheckbox)
+ hideSelectAllFromColumnHeaderTitleRow(), hideSelectAllFromColumnHeaderFilterRow();
+ else if (_options.hideInColumnTitleRow ? hideSelectAllFromColumnHeaderTitleRow() : (renderSelectAllCheckbox(_isSelectAllChecked), _handler.subscribe(_grid.onHeaderClick, handleHeaderClick)), _options.hideInFilterHeaderRow)
+ hideSelectAllFromColumnHeaderFilterRow();
+ else {
+ let selectAllContainerElm = _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ if (selectAllContainerElm) {
+ selectAllContainerElm.style.display = "flex";
+ let selectAllInputElm = selectAllContainerElm.querySelector('input[type="checkbox"]');
+ selectAllInputElm && (selectAllInputElm.checked = _isSelectAllChecked);
+ }
+ }
+ }
+ function hideSelectAllFromColumnHeaderTitleRow() {
+ _grid.updateColumnHeader(_options.columnId, "", "");
+ }
+ function hideSelectAllFromColumnHeaderFilterRow() {
+ let selectAllContainerElm = _headerRowNode && _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ selectAllContainerElm && (selectAllContainerElm.style.display = "none");
+ }
+ function handleSelectedRowsChanged() {
+ let selectedRows = _grid.getSelectedRows(), lookup = {}, row, i2, k, disabledCount = 0;
+ if (typeof _selectableOverride == "function")
+ for (k = 0; k < _grid.getDataLength(); k++) {
+ let dataItem = _grid.getDataItem(k);
+ checkSelectableOverride(i2, dataItem, _grid) || disabledCount++;
+ }
+ let removeList = [];
+ for (i2 = 0; i2 < selectedRows.length; i2++) {
+ row = selectedRows[i2];
+ let rowItem = _grid.getDataItem(row);
+ checkSelectableOverride(i2, rowItem, _grid) ? (lookup[row] = !0, lookup[row] !== _selectedRowsLookup[row] && (_grid.invalidateRow(row), delete _selectedRowsLookup[row])) : removeList.push(row);
+ }
+ for (i2 in _selectedRowsLookup)
+ _grid.invalidateRow(i2);
+ if (_selectedRowsLookup = lookup, _grid.render(), _isSelectAllChecked = selectedRows && selectedRows.length + disabledCount >= _grid.getDataLength(), (!_isUsingDataView || !_options.applySelectOnAllPages) && (!_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow)) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ if (removeList.length > 0) {
+ for (i2 = 0; i2 < removeList.length; i2++) {
+ let remIdx = selectedRows.indexOf(removeList[i2]);
+ selectedRows.splice(remIdx, 1);
+ }
+ _grid.setSelectedRows(selectedRows, "click.cleanup");
+ }
+ }
+ function handleDataViewSelectedIdsChanged() {
+ let selectedIds = _dataView.getAllSelectedFilteredIds(), filteredItems = _dataView.getFilteredItems(), disabledCount = 0;
+ if (typeof _selectableOverride == "function" && selectedIds.length > 0)
+ for (let k = 0; k < _dataView.getItemCount(); k++) {
+ let dataItem = _dataView.getItemByIdx(k), idProperty = _dataView.getIdPropertyName(), dataItemId = dataItem[idProperty];
+ filteredItems.findIndex(function(item) {
+ return item[idProperty] === dataItemId;
+ }) >= 0 && !checkSelectableOverride(k, dataItem, _grid) && disabledCount++;
+ }
+ if (_isSelectAllChecked = (selectedIds && selectedIds.length) + disabledCount >= filteredItems.length, !_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ }
+ function handleKeyDown(e, args) {
+ e.which == 32 && _grid.getColumns()[args.cell].id === _options.columnId && ((!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) && toggleRowSelection(args.row), e.preventDefault(), e.stopImmediatePropagation());
+ }
+ function handleClick(e, args) {
+ if (_grid.getColumns()[args.cell].id === _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ toggleRowSelection(args.row), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function toggleRowSelection(row) {
+ let dataContext = _grid.getDataItem(row);
+ if (checkSelectableOverride(row, dataContext, _grid)) {
+ if (_selectedRowsLookup[row]) {
+ let newSelectedRows = _grid.getSelectedRows().filter((n) => n !== row);
+ _grid.setSelectedRows(newSelectedRows, "click.toggle");
+ } else
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(row), "click.toggle");
+ _grid.setActiveCell(row, getCheckboxColumnCellIndex());
+ }
+ }
+ function selectRows(rowArray) {
+ let i2, l = rowArray.length, addRows = [];
+ for (i2 = 0; i2 < l; i2++)
+ _selectedRowsLookup[rowArray[i2]] || (addRows[addRows.length] = rowArray[i2]);
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(addRows), "SlickCheckboxSelectColumn.selectRows");
+ }
+ function deSelectRows(rowArray) {
+ let i2, l = rowArray.length, removeRows = [];
+ for (i2 = 0; i2 < l; i2++)
+ _selectedRowsLookup[rowArray[i2]] && (removeRows[removeRows.length] = rowArray[i2]);
+ _grid.setSelectedRows(_grid.getSelectedRows().filter((n) => removeRows.indexOf(n) < 0), "SlickCheckboxSelectColumn.deSelectRows");
+ }
+ function handleHeaderClick(e, args) {
+ if (args.column.id == _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ let isAllSelected = e.target.checked, caller = isAllSelected ? "click.selectAll" : "click.unselectAll", rows = [];
+ if (isAllSelected) {
+ for (let i2 = 0; i2 < _grid.getDataLength(); i2++) {
+ let rowItem = _grid.getDataItem(i2);
+ !rowItem.__group && !rowItem.__groupTotals && checkSelectableOverride(i2, rowItem, _grid) && rows.push(i2);
+ }
+ isAllSelected = !0;
+ }
+ if (_isUsingDataView && _dataView && _options.applySelectOnAllPages) {
+ let ids = [], filteredItems = _dataView.getFilteredItems();
+ for (let j = 0; j < filteredItems.length; j++) {
+ let dataviewRowItem = filteredItems[j];
+ checkSelectableOverride(j, dataviewRowItem, _grid) && ids.push(dataviewRowItem[_dataView.getIdPropertyName()]);
+ }
+ _dataView.setSelectedIds(ids, { isRowBeingAdded: isAllSelected });
+ }
+ _grid.setSelectedRows(rows, caller), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ let _checkboxColumnCellIndex = null;
+ function getCheckboxColumnCellIndex() {
+ if (_checkboxColumnCellIndex === null) {
+ _checkboxColumnCellIndex = 0;
+ let colArr = _grid.getColumns();
+ for (let i2 = 0; i2 < colArr.length; i2++)
+ colArr[i2].id == _options.columnId && (_checkboxColumnCellIndex = i2);
+ }
+ return _checkboxColumnCellIndex;
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : " ",
+ toolTip: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ cssClass: _options.cssClass,
+ hideSelectAllCheckbox: _options.hideSelectAllCheckbox,
+ formatter: checkboxSelectionFormatter,
+ // exclude from all menus, defaults to true unless the option is provided differently by the user
+ excludeFromColumnPicker: typeof _options.excludeFromColumnPicker < "u" ? _options.excludeFromColumnPicker : !0,
+ excludeFromGridMenu: typeof _options.excludeFromGridMenu < "u" ? _options.excludeFromGridMenu : !0,
+ excludeFromHeaderMenu: typeof _options.excludeFromHeaderMenu < "u" ? _options.excludeFromHeaderMenu : !0
+ };
+ }
+ function addCheckboxToFilterHeaderRow(grid) {
+ _handler.subscribe(grid.onHeaderRowCellRendered, function(e, args) {
+ if (args.column.field === "sel") {
+ Utils16.emptyElement(args.node);
+ let spanElm = document.createElement("span");
+ spanElm.id = "filter-checkbox-selectall-container";
+ let inputElm = document.createElement("input");
+ inputElm.type = "checkbox", inputElm.id = `header-filter-selector${_selectAll_UID}`;
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `header-filter-selector${_selectAll_UID}`, spanElm.appendChild(inputElm), spanElm.appendChild(labelElm), args.node.appendChild(spanElm), _headerRowNode = args.node, _bindingEventService.bind(spanElm, "click", (e2) => handleHeaderClick(e2, args));
+ }
+ });
+ }
+ function createUID() {
+ return Math.round(1e7 * Math.random());
+ }
+ function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ let UID = createUID() + row;
+ return dataContext && checkSelectableOverride(row, dataContext, grid) ? _selectedRowsLookup[row] ? " " : " " : null;
+ }
+ function checkSelectableOverride(row, dataContext, grid) {
+ return typeof _selectableOverride == "function" ? _selectableOverride(row, dataContext, grid) : !0;
+ }
+ function renderSelectAllCheckbox(isSelectAllChecked) {
+ isSelectAllChecked ? _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip) : _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip);
+ }
+ function selectableOverride(overrideFn) {
+ _selectableOverride = overrideFn;
+ }
+ Utils16.extend(this, {
+ init,
+ destroy,
+ pluginName: "CheckboxSelectColumn",
+ deSelectRows,
+ selectRows,
+ getColumnDefinition,
+ getOptions,
+ selectableOverride,
+ setOptions
+ });
+}
+
+// src/plugins/slick.contextmenu.js
+var BindingEventService8 = BindingEventService, SlickEvent10 = Event, EventData6 = EventData, EventHandler5 = EventHandler, Utils17 = Utils;
+function ContextMenu(optionProperties) {
+ let _contextMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler5(), _self = this, _optionTitleElm, _commandTitleElm, _menuElm, _bindingEventService = new BindingEventService8(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: -4,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !1,
+ maxHeight: "none",
+ width: "auto",
+ optionShownOverColumnIds: [],
+ commandShownOverColumnIds: []
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _contextMenuProperties = Utils17.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onContextMenu, handleOnContextMenu), _contextMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _contextMenuProperties = Utils17.extend({}, _contextMenuProperties, newOptions), newOptions.commandShownOverColumnIds && (_contextMenuProperties.commandShownOverColumnIds = newOptions.commandShownOverColumnIds), newOptions.optionShownOverColumnIds && (_contextMenuProperties.optionShownOverColumnIds = newOptions.optionShownOverColumnIds);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ e instanceof EventData6 && (e = e.getNativeEvent());
+ let targetEvent = e.touches ? e.touches[0] : e, cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), isColumnOptionAllowed = checkIsColumnAllowed(_contextMenuProperties.optionShownOverColumnIds, columnDef.id), isColumnCommandAllowed = checkIsColumnAllowed(_contextMenuProperties.commandShownOverColumnIds, columnDef.id), commandItems = _contextMenuProperties.commandItems || [], optionItems = _contextMenuProperties.optionItems || [];
+ if (!columnDef || !isColumnCommandAllowed && !isColumnOptionAllowed || !commandItems.length && !optionItems.length || (destroyMenu(e), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_contextMenuProperties.maxHeight) ? _contextMenuProperties.maxHeight : _contextMenuProperties.maxHeight + "px", width2 = isNaN(_contextMenuProperties.width) ? _contextMenuProperties.width : _contextMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-context-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width2, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${targetEvent.pageY}px`, _menuElm.style.left = `${targetEvent.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-context-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_contextMenuProperties.hideOptionSection && isColumnOptionAllowed && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-context-menu-option-list", optionMenuElm.role = "menu", _contextMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _contextMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_contextMenuProperties.hideCommandSection && isColumnCommandAllowed && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-context-menu-command-list", commandMenuElm.role = "menu", !_contextMenuProperties.hideCloseButton && (!isColumnOptionAllowed || optionItems.length === 0 || _contextMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _contextMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-context-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function checkIsColumnAllowed(columnIds, columnId) {
+ let isAllowedColumn = !1;
+ if (columnIds && columnIds.length > 0)
+ for (let o = 0, ln = columnIds.length; o < ln; o++)
+ columnIds[o] === columnId && (isAllowedColumn = !0);
+ else
+ isAllowedColumn = !0;
+ return isAllowedColumn;
+ }
+ function handleOnContextMenu(e, args) {
+ e instanceof EventData6 && (e = e.getNativeEvent()), e.preventDefault();
+ let cell = _grid.getCellFromEvent(e), columnDef = _grid.getColumns()[cell.cell], dataContext = _grid.getDataItem(cell.row);
+ args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_contextMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "click", (e2) => {
+ e2.defaultPrevented || destroyMenu(e2, { cell: _currentCell, row: _currentRow });
+ }));
+ }
+ function populateOptionItems(contextMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !contextMenu)) {
+ contextMenu && contextMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = contextMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i2 = 0, ln = optionItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = optionItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.role = "button", iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(contextMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !contextMenu)) {
+ contextMenu && contextMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = contextMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i2 = 0, ln = commandItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = commandItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider)
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row), cellValue;
+ if (Object.prototype.hasOwnProperty.call(dataContext, columnDef && columnDef.field) && (cellValue = dataContext[columnDef.field]), command != null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext,
+ value: cellValue
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (item.disabled || item.divider || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function repositionMenu(e) {
+ let targetEvent = e.touches ? e.touches[0] : e, parentElm = e.target.closest(".slick-cell"), menuOffsetLeft = targetEvent.pageX, menuOffsetTop = parentElm ? Utils17.offset(parentElm).top : targetEvent.pageY, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _contextMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _contextMenuProperties.autoAdjustDropOffset, sideOffset = _contextMenuProperties.autoAlignSideOffset;
+ if (_contextMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils17.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils17.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_contextMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - menuWidth - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils17.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "ContextMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent10(),
+ onBeforeMenuShow: new SlickEvent10(),
+ onBeforeMenuClose: new SlickEvent10(),
+ onCommand: new SlickEvent10(),
+ onOptionSelected: new SlickEvent10()
+ });
+}
+
+// src/plugins/slick.crossgridrowmovemanager.js
+var SlickEvent11 = Event, EventHandler6 = EventHandler, Utils18 = Utils;
+function CrossGridRowMoveManager(options) {
+ var _grid, _canvas, _toGrid, _toCanvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler6(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils18.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _toGrid = options.toGrid, _toCanvas = _toGrid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils18.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows)), selectedRows.sort(function(a, b) {
+ return a - b;
+ });
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.fromGrid = _grid, dd.toGrid = _toGrid, dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_toCanvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _toCanvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_toCanvas.clientWidth}px`, dd.guide.style.top = "-1000px", _toCanvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils18.offset(_toCanvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _toGrid.getOptions().rowHeight), _toGrid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _toGrid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _toGrid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_toGrid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils18.extend(this, {
+ onBeforeMoveRows: new SlickEvent11(),
+ onMoveRows: new SlickEvent11(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "CrossGridRowMoveManager"
+ });
+}
+
+// src/plugins/slick.customtooltip.js
+var EventHandler7 = EventHandler, Utils19 = Utils;
+function CustomTooltip(options) {
+ var _cancellablePromise, _cellNodeElm, _dataView, _grid, _gridOptions, _tooltipElm, _defaults = {
+ className: "slick-custom-tooltip",
+ offsetLeft: 0,
+ offsetRight: 0,
+ offsetTopBottom: 4,
+ hideArrow: !1,
+ tooltipTextMaxLength: 700,
+ regularTooltipWhiteSpace: "pre-line",
+ whiteSpace: "normal"
+ }, _eventHandler = new EventHandler7(), _cellTooltipOptions = {}, _options;
+ function init(grid) {
+ _grid = grid;
+ var _data = grid && grid.getData() || [];
+ _dataView = Array.isArray(_data) ? null : _data, _gridOptions = grid.getOptions() || {}, _options = Utils19.extend(!0, {}, _defaults, _gridOptions.customTooltip, options), _eventHandler.subscribe(grid.onMouseEnter, handleOnMouseEnter).subscribe(grid.onHeaderMouseEnter, handleOnHeaderMouseEnter).subscribe(grid.onHeaderRowMouseEnter, handleOnHeaderRowMouseEnter).subscribe(grid.onMouseLeave, hideTooltip).subscribe(grid.onHeaderMouseLeave, hideTooltip).subscribe(grid.onHeaderRowMouseLeave, hideTooltip);
+ }
+ function destroy() {
+ hideTooltip(), _eventHandler.unsubscribeAll();
+ }
+ function handleOnHeaderMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-header-column");
+ }
+ function handleOnHeaderRowMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-headerrow-column");
+ }
+ function handleOnHeaderMouseEnterByType(e, args, selector) {
+ hideTooltip();
+ var cell = {
+ row: -1,
+ // negative row to avoid pulling any dataContext while rendering
+ cell: _grid.getColumns().findIndex(function(col) {
+ return args && args.column && args.column.id === col.id;
+ })
+ }, columnDef = args.column, item = {}, isHeaderRowType = selector === "slick-headerrow-column";
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = isHeaderRowType ? "header-row" : "header", _cellTooltipOptions = Utils19.extend(!0, {}, _options, columnDef.customTooltip), !(columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args)) && columnDef && e.target) {
+ _cellNodeElm = findClosestHeaderNode(e.target, selector);
+ var formatter = isHeaderRowType ? _cellTooltipOptions.headerRowFormatter : _cellTooltipOptions.headerFormatter;
+ if (_cellTooltipOptions.useRegularTooltip || !formatter) {
+ var formatterOrText = isHeaderRowType ? _cellTooltipOptions.useRegularTooltip ? null : formatter : columnDef.name;
+ renderRegularTooltip(formatterOrText, cell, null, columnDef, item);
+ } else
+ _cellNodeElm && typeof formatter == "function" && renderTooltipFormatter(formatter, cell, null, columnDef, item);
+ }
+ }
+ function findClosestHeaderNode(elm, selector) {
+ return typeof elm.closest == "function" ? elm.closest("." + selector) : elm.classList.contains(selector) ? elm : elm.parentElement.classList.contains(selector) ? elm.parentElement : null;
+ }
+ function handleOnMouseEnter(e, args) {
+ if (hideTooltip(), _grid && e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (cell) {
+ var item = _dataView ? _dataView.getItem(cell.row) : _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ if (_cellNodeElm = _grid.getCellNode(cell.row, cell.cell), _cellTooltipOptions = Utils19.extend(!0, {}, _options, columnDef.customTooltip), item && columnDef) {
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = "cell", columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args))
+ return;
+ var value = item.hasOwnProperty(columnDef.field) ? item[columnDef.field] : null;
+ if (_cellTooltipOptions.useRegularTooltip || !_cellTooltipOptions.formatter)
+ renderRegularTooltip(columnDef.formatter, cell, value, columnDef, item);
+ else if (typeof _cellTooltipOptions.formatter == "function" && renderTooltipFormatter(_cellTooltipOptions.formatter, cell, value, columnDef, item), typeof _cellTooltipOptions.asyncProcess == "function") {
+ var asyncProcess = _cellTooltipOptions.asyncProcess(cell.row, cell.cell, value, columnDef, item, _grid);
+ if (!_cellTooltipOptions.asyncPostFormatter)
+ throw new Error('[SlickGrid] when using "asyncProcess", you must also provide an "asyncPostFormatter" formatter');
+ asyncProcess instanceof Promise && (_cancellablePromise = cancellablePromise(asyncProcess), _cancellablePromise.promise.then(function(asyncResult) {
+ asyncProcessCallback(asyncResult, cell, value, columnDef, item);
+ }).catch(function(error) {
+ if (!error.isPromiseCancelled)
+ throw error;
+ }));
+ }
+ }
+ }
+ }
+ }
+ function findFirstElementAttribute(inputElm, attributes) {
+ if (inputElm) {
+ var outputAttrData;
+ return attributes.forEach(function(attribute) {
+ var attrData = inputElm.getAttribute(attribute);
+ attrData && (outputAttrData = attrData);
+ }), outputAttrData;
+ }
+ return null;
+ }
+ function renderRegularTooltip(formatterOrText, cell, value, columnDef, item) {
+ var tmpDiv = document.createElement("div");
+ tmpDiv.innerHTML = parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item);
+ var tooltipText = columnDef.toolTip || "", tmpTitleElm;
+ tooltipText || (_cellNodeElm && _cellNodeElm.clientWidth < _cellNodeElm.scrollWidth && !_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? (tooltipText = (_cellNodeElm.textContent || "").trim() || "", _cellTooltipOptions.tooltipTextMaxLength && tooltipText.length > _cellTooltipOptions.tooltipTextMaxLength && (tooltipText = tooltipText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..."), tmpTitleElm = _cellNodeElm) : (_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? tmpTitleElm = tmpDiv.querySelector("[title], [data-slick-tooltip]") : (tmpTitleElm = findFirstElementAttribute(_cellNodeElm, ["title", "data-slick-tooltip"]) ? _cellNodeElm : tmpDiv.querySelector("[title], [data-slick-tooltip]"), (!tmpTitleElm || !findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"])) && _cellNodeElm && (tmpTitleElm = _cellNodeElm.querySelector("[title], [data-slick-tooltip]"))), (!tooltipText || typeof formatterOrText == "function" && _cellTooltipOptions.useRegularTooltipFromFormatterOnly) && (tooltipText = findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"]) || ""))), tooltipText !== "" && renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText), swapAndClearTitleAttribute(tmpTitleElm, tooltipText);
+ }
+ function swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
+ var titleElm = inputTitleElm || _cellNodeElm && (_cellNodeElm.hasAttribute("title") && _cellNodeElm.getAttribute("title") ? _cellNodeElm : _cellNodeElm.querySelector("[title]"));
+ titleElm && (titleElm.setAttribute("data-slick-tooltip", tooltipText || ""), titleElm.hasAttribute("title") && titleElm.setAttribute("title", ""));
+ }
+ function asyncProcessCallback(asyncResult, cell, value, columnDef, dataContext) {
+ hideTooltip();
+ var itemWithAsyncData = Utils19.extend(!0, {}, dataContext, { [_cellTooltipOptions.asyncParamsPropName || "__params"]: asyncResult });
+ renderTooltipFormatter(_cellTooltipOptions.asyncPostFormatter, cell, value, columnDef, itemWithAsyncData);
+ }
+ function calculateAvailableSpaceTop(element) {
+ var availableSpace = 0, pageScrollTop = windowScrollPosition2().top, elmOffset = getHtmlElementOffset(element);
+ if (elmOffset) {
+ var elementOffsetTop = elmOffset.top;
+ availableSpace = elementOffsetTop - pageScrollTop;
+ }
+ return availableSpace;
+ }
+ function cancellablePromise(inputPromise) {
+ var hasCancelled = !1;
+ return inputPromise instanceof Promise ? {
+ promise: inputPromise.then(function(result) {
+ if (hasCancelled)
+ throw { isPromiseCancelled: !0 };
+ return result;
+ }),
+ cancel: function() {
+ hasCancelled = !0;
+ }
+ } : inputPromise;
+ }
+ function windowScrollPosition2() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ function getHtmlElementOffset(element) {
+ if (element) {
+ var rect = element.getBoundingClientRect(), top = 0, left = 0, bottom = 0, right = 0;
+ return rect.top !== void 0 && rect.left !== void 0 && (top = rect.top + window.pageYOffset, left = rect.left + window.pageXOffset, right = rect.right, bottom = rect.bottom), { top, left, bottom, right };
+ }
+ }
+ function hideTooltip() {
+ _cancellablePromise && _cancellablePromise.cancel && _cancellablePromise.cancel();
+ var prevTooltip = document.body.querySelector("." + _cellTooltipOptions.className + "." + _grid.getUID());
+ prevTooltip && prevTooltip.remove && prevTooltip.remove();
+ }
+ function reposition(cell) {
+ if (_tooltipElm) {
+ _cellNodeElm = _cellNodeElm || _grid.getCellNode(cell.row, cell.cell);
+ var cellPosition = getHtmlElementOffset(_cellNodeElm), cellContainerWidth = _cellNodeElm.offsetWidth, calculatedTooltipHeight = _tooltipElm.getBoundingClientRect().height, calculatedTooltipWidth = _tooltipElm.getBoundingClientRect().width, calculatedBodyWidth = document.body.offsetWidth || window.innerWidth, newPositionTop = cellPosition.top - _tooltipElm.offsetHeight - (_cellTooltipOptions.offsetTopBottom || 0), newPositionLeft = (cellPosition && cellPosition.left || 0) - (_cellTooltipOptions.offsetRight || 0), position = _cellTooltipOptions.position || "auto";
+ position === "center" ? (newPositionLeft += cellContainerWidth / 2 - calculatedTooltipWidth / 2 + (_cellTooltipOptions.offsetRight || 0), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-center-align")) : position === "right-align" || (position === "auto" || position !== "left-align") && newPositionLeft + calculatedTooltipWidth > calculatedBodyWidth ? (newPositionLeft -= calculatedTooltipWidth - cellContainerWidth - (_cellTooltipOptions.offsetLeft || 0), _tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.add("arrow-right-align")) : (_tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-left-align")), position === "bottom" || position === "auto" && calculatedTooltipHeight > calculateAvailableSpaceTop(_cellNodeElm) ? (newPositionTop = cellPosition.top + (_gridOptions.rowHeight || 0) + (_cellTooltipOptions.offsetTopBottom || 0), _tooltipElm.classList.remove("arrow-down"), _tooltipElm.classList.add("arrow-up")) : (_tooltipElm.classList.add("arrow-down"), _tooltipElm.classList.remove("arrow-up")), _tooltipElm.style.top = newPositionTop + "px", _tooltipElm.style.left = newPositionLeft + "px";
+ }
+ }
+ function parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item) {
+ if (typeof formatterOrText == "function") {
+ var tooltipText = formatterOrText(cell.row, cell.cell, value, columnDef, item, _grid), formatterText = typeof tooltipText == "object" && tooltipText && tooltipText.text ? tooltipText.text : typeof tooltipText == "string" ? tooltipText : "";
+ return _grid.sanitizeHtmlString(formatterText);
+ } else if (typeof formatterOrText == "string")
+ return _grid.sanitizeHtmlString(formatterOrText);
+ return "";
+ }
+ function renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) {
+ _tooltipElm = document.createElement("div"), _tooltipElm.className = _cellTooltipOptions.className, _tooltipElm.classList.add(_grid.getUID()), _tooltipElm.classList.add("l" + cell.cell), _tooltipElm.classList.add("r" + cell.cell);
+ var outputText = tooltipText || parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || "";
+ outputText = _cellTooltipOptions.tooltipTextMaxLength && outputText.length > _cellTooltipOptions.tooltipTextMaxLength ? outputText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..." : outputText;
+ let finalOutputText = "";
+ !tooltipText || _cellTooltipOptions && _cellTooltipOptions.renderRegularTooltipAsHtml ? (finalOutputText = _grid.sanitizeHtmlString(outputText), _tooltipElm.innerHTML = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.whiteSpace || _defaults.whiteSpace) : (finalOutputText = outputText || "", _tooltipElm.textContent = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.regularTooltipWhiteSpace || _defaults.regularTooltipWhiteSpace), _cellTooltipOptions.maxHeight && (_tooltipElm.style.maxHeight = _cellTooltipOptions.maxHeight + "px"), _cellTooltipOptions.maxWidth && (_tooltipElm.style.maxWidth = _cellTooltipOptions.maxWidth + "px"), finalOutputText && (document.body.appendChild(_tooltipElm), reposition(cell), _cellTooltipOptions.hideArrow || _tooltipElm.classList.add("tooltip-arrow"), swapAndClearTitleAttribute(inputTitleElm, outputText));
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ function setOptions(newOptions) {
+ _options = Utils19.extend({}, _options, newOptions);
+ }
+ Utils19.extend(this, {
+ init,
+ destroy,
+ hide: hideTooltip,
+ setOptions,
+ pluginName: "CustomTooltip"
+ });
+}
+
+// src/plugins/slick.draggablegrouping.js
+var BindingEventService9 = BindingEventService, SlickEvent12 = Event, EventHandler8 = EventHandler, Utils20 = Utils;
+function DraggableGrouping(options) {
+ var _grid, _gridUid, _gridColumns, _dataView, _dropzoneElm, _droppableInstance, dropzonePlaceholder, groupToggler, _defaults = {}, onGroupChanged = new SlickEvent12(), _bindingEventService = new BindingEventService9(), _handler = new EventHandler8(), _sortableLeftInstance, _sortableRightInstance;
+ function init(grid) {
+ options = Utils20.extend(!0, {}, _defaults, options), _grid = grid, _gridUid = _grid.getUID(), _gridColumns = _grid.getColumns(), _dataView = _grid.getData(), _dropzoneElm = grid.getPreHeaderPanel(), _dropzoneElm.classList.add("slick-dropzone");
+ var dropPlaceHolderText = options.dropPlaceHolderText || "Drop a column header here to group by the column";
+ dropzonePlaceholder = document.createElement("div"), dropzonePlaceholder.className = "slick-placeholder", dropzonePlaceholder.textContent = dropPlaceHolderText, groupToggler = document.createElement("div"), groupToggler.className = "slick-group-toggle-all expanded", groupToggler.style.display = "none", _dropzoneElm.appendChild(dropzonePlaceholder), _dropzoneElm.appendChild(groupToggler), setupColumnDropbox(), _handler.subscribe(_grid.onHeaderCellRendered, function(e, args) {
+ var column = args.column, node = args.node;
+ if (!Utils20.isEmptyObject(column.grouping) && node && (node.style.cursor = "pointer", options.groupIconCssClass || options.groupIconImage)) {
+ let groupableIconElm = document.createElement("span");
+ groupableIconElm.className = "slick-column-groupable", options.groupIconCssClass && groupableIconElm.classList.add(...options.groupIconCssClass.split(" ")), options.groupIconImage && (groupableIconElm.style.background = "url(" + options.groupIconImage + ") no-repeat center center"), node.appendChild(groupableIconElm);
+ }
+ });
+ for (var i2 = 0; i2 < _gridColumns.length; i2++) {
+ var columnId = _gridColumns[i2].field;
+ _grid.updateColumnHeader(columnId);
+ }
+ }
+ function setupColumnReorder(grid, headers, _headerColumnWidthDiff, setColumns, setupColumnResize, _columns, getColumnIndex, _uid, trigger) {
+ let dropzoneElm = grid.getPreHeaderPanel();
+ var sortableOptions = {
+ animation: 50,
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dataIdAttr: "data-id",
+ group: {
+ name: "shared",
+ pull: "clone",
+ put: !1
+ },
+ revertClone: !0,
+ // filter: function (_e, target) {
+ // // block column from being able to be dragged if it's already a grouped column
+ // // NOTE: need to disable for now since it also blocks the column reordering
+ // return columnsGroupBy.some(c => c.id === target.getAttribute('data-id'));
+ // },
+ onStart: function() {
+ dropzoneElm.classList.add("slick-dropzone-hover"), dropzoneElm.classList.add("slick-dropzone-placeholder-hover");
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm.style.display = "inline-block", groupToggler.style.display = "none", dropzoneElm.querySelectorAll(".slick-dropped-grouping").forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "none");
+ },
+ onEnd: function(e) {
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ dropzoneElm.classList.remove("slick-dropzone-hover"), draggablePlaceholderElm.classList.remove("slick-dropzone-placeholder-hover"), dropzonePlaceholder && (dropzonePlaceholder.style.display = "none"), draggablePlaceholderElm && draggablePlaceholderElm.parentElement && draggablePlaceholderElm.parentElement.classList.remove("slick-dropzone-placeholder-hover");
+ let droppedGroupingElms = dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ if (droppedGroupingElms.forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "inline-flex"), droppedGroupingElms.length && (draggablePlaceholderElm && (draggablePlaceholderElm.style.display = "none"), groupToggler.style.display = "inline-block"), !grid.getEditorLock().commitCurrentEdit())
+ return;
+ let reorderedIds = _sortableLeftInstance && _sortableLeftInstance.toArray() || [];
+ if (headers.length > 1) {
+ let ids = _sortableRightInstance && _sortableRightInstance.toArray() || [];
+ for (let id of ids)
+ reorderedIds.push(id);
+ }
+ let finalReorderedColumns = [], reorderedColumns = grid.getColumns();
+ for (let reorderedId of reorderedIds)
+ finalReorderedColumns.push(reorderedColumns[getColumnIndex(reorderedId)]);
+ setColumns(finalReorderedColumns), trigger(grid.onColumnsReordered, { grid }), e.stopPropagation(), setupColumnResize();
+ }
+ };
+ return _sortableLeftInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-left`), sortableOptions), _sortableRightInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-right`), sortableOptions), {
+ sortableLeftInstance: _sortableLeftInstance,
+ sortableRightInstance: _sortableRightInstance
+ };
+ }
+ function destroy() {
+ _sortableLeftInstance && _sortableLeftInstance.el && _sortableLeftInstance.destroy(), _sortableRightInstance && _sortableRightInstance.el && _sortableRightInstance.destroy(), onGroupChanged.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), Utils20.emptyElement(document.querySelector(`.${_gridUid} .slick-preheader-panel`));
+ }
+ function addDragOverDropzoneListeners() {
+ let draggablePlaceholderElm = _dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm && (_bindingEventService.bind(draggablePlaceholderElm, "dragover", (e) => e.preventDefault), _bindingEventService.bind(draggablePlaceholderElm, "dragenter", () => _dropzoneElm.classList.add("slick-dropzone-hover")), _bindingEventService.bind(draggablePlaceholderElm, "dragleave", () => _dropzoneElm.classList.remove("slick-dropzone-hover")));
+ }
+ function setupColumnDropbox() {
+ let dropzoneElm = _dropzoneElm;
+ _droppableInstance = Sortable.create(dropzoneElm, {
+ group: "shared",
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-droppable-sortitem-hover",
+ draggable: ".slick-dropped-grouping",
+ dragoverBubble: !0,
+ onAdd: (evt) => {
+ let el = evt.item, elId = el.getAttribute("id");
+ elId && elId.replace(_gridUid, "") && handleGroupByDrop(dropzoneElm, Sortable.utils.clone(evt.item)), evt.clone.style.opacity = ".5", el.parentNode && el.parentNode.removeChild(el);
+ },
+ onUpdate: () => {
+ let sortArray = _droppableInstance && _droppableInstance.toArray() || [], newGroupingOrder = [];
+ for (var i2 = 0, l = sortArray.length; i2 < l; i2++)
+ for (var a = 0, b = columnsGroupBy.length; a < b; a++)
+ if (columnsGroupBy[a].id == sortArray[i2]) {
+ newGroupingOrder.push(columnsGroupBy[a]);
+ break;
+ }
+ columnsGroupBy = newGroupingOrder, updateGroupBy("sort-group");
+ }
+ }), addDragOverDropzoneListeners(), groupToggler && _bindingEventService.bind(groupToggler, "click", (event) => {
+ let target = event.target;
+ toggleGroupToggler(target, target && target.classList.contains("expanded"));
+ });
+ }
+ var columnsGroupBy = [];
+ function handleGroupByDrop(containerElm, headerColumnElm) {
+ let headerColDataId = headerColumnElm.getAttribute("data-id"), columnId = headerColDataId && headerColDataId.replace(_gridUid, ""), columnAllowed = !0;
+ for (let colGroupBy of columnsGroupBy)
+ colGroupBy.id === columnId && (columnAllowed = !1);
+ if (columnAllowed) {
+ for (let col of _gridColumns)
+ if (col.id === columnId && col.grouping && !Utils20.isEmptyObject(col.grouping)) {
+ let columnNameElm = headerColumnElm.querySelector(".slick-column-name"), entryElm = document.createElement("div");
+ entryElm.id = `${_gridUid}_${col.id}_entry`, entryElm.className = "slick-dropped-grouping", entryElm.dataset.id = `${col.id}`;
+ let groupTextElm = document.createElement("div");
+ groupTextElm.className = "slick-dropped-grouping-title", groupTextElm.style.display = "inline-flex", groupTextElm.textContent = columnNameElm ? columnNameElm.textContent : headerColumnElm.textContent, entryElm.appendChild(groupTextElm);
+ let groupRemoveIconElm = document.createElement("div");
+ groupRemoveIconElm.className = "slick-groupby-remove", options.deleteIconCssClass && groupRemoveIconElm.classList.add(...options.deleteIconCssClass.split(" ")), options.deleteIconImage && groupRemoveIconElm.classList.add(...options.deleteIconImage.split(" ")), options.deleteIconCssClass || groupRemoveIconElm.classList.add("slick-groupby-remove-icon"), !options.deleteIconCssClass && !options.deleteIconImage && groupRemoveIconElm.classList.add("slick-groupby-remove-image"), options && options.hideGroupSortIcons !== !0 && col.sortable && col.grouping && col.grouping.sortAsc === void 0 && (col.grouping.sortAsc = !0), entryElm.appendChild(groupRemoveIconElm), entryElm.appendChild(document.createElement("div")), containerElm.appendChild(entryElm), addColumnGroupBy(col), addGroupByRemoveClickHandler(col.id, groupRemoveIconElm, headerColumnElm, entryElm);
+ }
+ groupToggler.style.display = "inline-block";
+ }
+ }
+ function addColumnGroupBy(column) {
+ columnsGroupBy.push(column), updateGroupBy("add-group");
+ }
+ function addGroupByRemoveClickHandler(id, groupRemoveIconElm, headerColumnElm, entry) {
+ _bindingEventService.bind(groupRemoveIconElm, "click", () => {
+ let boundedElms = _bindingEventService.boundedEvents.filter((boundedEvent) => boundedEvent.element === groupRemoveIconElm);
+ for (let boundedEvent of boundedElms)
+ _bindingEventService.unbind(boundedEvent.element, "click", boundedEvent.listener);
+ removeGroupBy(id, headerColumnElm, entry);
+ });
+ }
+ function setDroppedGroups(groupingInfo) {
+ let groupingInfos = Array.isArray(groupingInfo) ? groupingInfo : [groupingInfo];
+ dropzonePlaceholder.style.display = "none";
+ for (let groupInfo of groupingInfos) {
+ let columnElm = _grid.getHeaderColumn(groupInfo);
+ handleGroupByDrop(_dropzoneElm, columnElm);
+ }
+ }
+ function clearDroppedGroups() {
+ columnsGroupBy = [], updateGroupBy("clear-all");
+ let allDroppedGroupingElms = _dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ groupToggler.style.display = "none";
+ for (let groupElm of Array.from(allDroppedGroupingElms)) {
+ let groupRemoveBtnElm = _dropzoneElm.querySelector(".slick-groupby-remove");
+ groupRemoveBtnElm && groupRemoveBtnElm.remove(), groupElm && groupElm.remove();
+ }
+ dropzonePlaceholder.style.display = "inline-block";
+ }
+ function removeFromArray(arr) {
+ for (var what, a = arguments, L = a.length, ax; L > 1 && arr.length; )
+ for (what = a[--L]; (ax = arr.indexOf(what)) != -1; )
+ arr.splice(ax, 1);
+ return arr;
+ }
+ function removeGroupBy(id, _column, entry) {
+ entry.remove();
+ var groupby = [];
+ _gridColumns.forEach(function(e) {
+ groupby[e.id] = e;
+ }), removeFromArray(columnsGroupBy, groupby[id]), columnsGroupBy.length === 0 && (dropzonePlaceholder.style = "block", groupToggler.style.display = "none"), updateGroupBy("remove-group");
+ }
+ function toggleGroupToggler(targetElm, collapsing = !0, shouldExecuteDataViewCommand = !0) {
+ targetElm && (collapsing === !0 ? (targetElm.classList.add("collapsed"), targetElm.classList.remove("expanded"), shouldExecuteDataViewCommand && _dataView.collapseAllGroups()) : (targetElm.classList.remove("collapsed"), targetElm.classList.add("expanded"), shouldExecuteDataViewCommand && _dataView.expandAllGroups()));
+ }
+ function updateGroupBy(originator) {
+ if (columnsGroupBy.length === 0) {
+ _dataView.setGrouping([]), onGroupChanged.notify({ caller: originator, groupColumns: [] });
+ return;
+ }
+ var groupingArray = [];
+ columnsGroupBy.forEach(function(element) {
+ groupingArray.push(element.grouping);
+ }), _dataView.setGrouping(groupingArray), onGroupChanged.notify({ caller: originator, groupColumns: groupingArray });
+ }
+ Utils20.extend(this, {
+ init,
+ destroy,
+ pluginName: "DraggableGrouping",
+ onGroupChanged,
+ setDroppedGroups,
+ clearDroppedGroups,
+ getSetupColumnReorder: setupColumnReorder
+ });
+}
+
+// src/plugins/slick.headerbuttons.js
+var BindingEventService10 = BindingEventService, SlickEvent13 = Event, EventHandler9 = EventHandler, Utils21 = Utils;
+function HeaderButtons(options) {
+ var _grid, _self = this, _handler = new EventHandler9(), _bindingEventService = new BindingEventService10(), _defaults = {
+ buttonCssClass: "slick-header-button"
+ };
+ function init(grid) {
+ options = Utils21.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns());
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons)
+ for (var i2 = column.header.buttons.length; i2--; ) {
+ var button = column.header.buttons[i2], isItemVisible = runOverrideFunctionWhenExists(button.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(button.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(button, "itemUsabilityOverride") && (button.disabled = !isItemUsable);
+ let btn = document.createElement("div");
+ btn.className = options.buttonCssClass, btn.ariaLabel = "Header Button", btn.role = "button", button.disabled && btn.classList.add("slick-header-button-disabled"), button.showOnHover && btn.classList.add("slick-header-button-hidden"), button.image && (btn.style.backgroundImage = "url(" + button.image + ")"), button.cssClass && btn.classList.add(...button.cssClass.split(" ")), button.tooltip && (btn.title = button.tooltip), button.handler && _bindingEventService.bind(btn, "click", button.handler), _bindingEventService.bind(btn, "click", handleButtonClick.bind(this, button, args.column)), args.node.appendChild(btn);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons) {
+ let buttonCssClass = (options.buttonCssClass || "").replace(/(\s+)/g, ".");
+ buttonCssClass && args.node.querySelectorAll(`.${buttonCssClass}`).forEach((elm) => elm.remove());
+ }
+ }
+ function handleButtonClick(button, columnDef, e) {
+ let command = button.command || "", callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ button
+ };
+ command != null && (callbackArgs.command = command), typeof button.action == "function" && button.action.call(this, e, callbackArgs), command != null && !button.disabled && (_self.onCommand.notify(callbackArgs, e, _self), _grid.updateColumnHeader(columnDef.id)), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils21.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderButtons",
+ onCommand: new SlickEvent13()
+ });
+}
+
+// src/plugins/slick.headermenu.js
+var BindingEventService11 = BindingEventService, SlickEvent14 = Event, EventHandler10 = EventHandler, Utils22 = Utils;
+function HeaderMenu(options) {
+ var _grid, _self = this, _handler = new EventHandler10(), _bindingEventService = new BindingEventService11(), _defaults = {
+ buttonCssClass: null,
+ buttonImage: null,
+ minWidth: 100,
+ autoAlign: !0,
+ autoAlignOffset: 0
+ }, _activeHeaderColumnElm, _menuElm;
+ function init(grid) {
+ options = Utils22.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns()), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this));
+ }
+ function setOptions(newOptions) {
+ options = Utils22.extend(!0, {}, options, newOptions);
+ }
+ function getGridUidSelector() {
+ let gridUid = _grid.getUID() || "";
+ return gridUid ? `.${gridUid}` : "";
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm = _menuElm || document.body.querySelector(`.slick-header-menu${getGridUidSelector()}`), _menuElm && _menuElm.remove(), _activeHeaderColumnElm = void 0;
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && hideMenu();
+ }
+ function hideMenu() {
+ _menuElm && (_menuElm.remove(), _menuElm = void 0), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.remove("slick-header-column-active");
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column, menu = column.header && column.header.menu;
+ if (menu) {
+ if (!runOverrideFunctionWhenExists(options.menuUsabilityOverride, args))
+ return;
+ let elm = document.createElement("div");
+ if (elm.className = "slick-header-menubutton", elm.ariaLabel = "Header Menu", elm.role = "button", !options.buttonCssClass && !options.buttonImage && (options.buttonCssClass = "caret"), options.buttonCssClass) {
+ let icon = document.createElement("span");
+ icon.classList.add(...options.buttonCssClass.split(" ")), elm.appendChild(icon);
+ }
+ options.buttonImage && (elm.style.backgroundImage = "url(" + options.buttonImage + ")"), options.tooltip && (elm.title = options.tooltip), _bindingEventService.bind(elm, "click", (e2) => showMenu(e2, menu, args.column)), args.node.appendChild(elm);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ column.header && column.header.menu && args.node.querySelectorAll(".slick-header-menubutton").forEach((elm) => elm.remove());
+ }
+ function showMenu(event, menu, columnDef) {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ menu
+ };
+ if (_self.onBeforeMenuShow.notify(callbackArgs, event, _self).getReturnValue() == !1)
+ return;
+ if (!_menuElm) {
+ _menuElm = document.createElement("div"), _menuElm.className = "slick-header-menu", _menuElm.role = "menu", _menuElm.style.minWidth = `${options.minWidth}px`, _menuElm.setAttribute("aria-expanded", "true");
+ let containerNode = _grid.getContainerNode();
+ containerNode && containerNode.appendChild(_menuElm);
+ }
+ Utils22.emptyElement(_menuElm);
+ for (var i2 = 0; i2 < menu.items.length; i2++) {
+ var item = menu.items[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let menuItem = document.createElement("div");
+ if (menuItem.className = "slick-header-menuitem", menuItem.role = "menuitem", item.divider || item === "divider") {
+ menuItem.classList.add("slick-header-menuitem-divider");
+ continue;
+ }
+ item.disabled && menuItem.classList.add("slick-header-menuitem-disabled"), item.hidden && menuItem.classList.add("slick-header-menuitem-hidden"), item.cssClass && menuItem.classList.add(...item.cssClass.split(" ")), item.tooltip && (menuItem.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-header-menuicon", menuItem.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-header-menucontent", textElm.textContent = item.title, menuItem.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), _menuElm.appendChild(menuItem), _bindingEventService.bind(menuItem, "click", handleMenuItemClick.bind(this, item, columnDef));
+ }
+ let buttonElm = event.target, btnOffset = Utils22.offset(buttonElm), menuOffset = Utils22.offset(_menuElm), leftPos = btnOffset && btnOffset.left || 0;
+ if (options.autoAlign) {
+ let gridPos = _grid.getGridPosition();
+ leftPos + _menuElm.offsetWidth >= gridPos.width && (leftPos = leftPos + buttonElm.clientWidth - _menuElm.clientWidth + (options.autoAlignOffset || 0));
+ }
+ _menuElm.style.top = `${(buttonElm.clientHeight || btnOffset && btnOffset.top || 0) + (options && options.menuOffsetTop || 0)}px`, _menuElm.style.left = `${leftPos - menuOffset.left}px`, _activeHeaderColumnElm = _menuElm.closest(".slick-header-column"), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.add("slick-header-column-active"), _self.onAfterMenuShow.notify(callbackArgs, event, _self).getReturnValue() != !1 && (event.preventDefault(), event.stopPropagation());
+ }
+ function handleMenuItemClick(item, columnDef, e) {
+ let command = item.command || "";
+ if (item.disabled || item.divider || item === "divider")
+ return !1;
+ if (command != null && command !== "") {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ command,
+ item
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ e.defaultPrevented || hideMenu(), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils22.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent14(),
+ onBeforeMenuShow: new SlickEvent14(),
+ onCommand: new SlickEvent14()
+ });
+}
+
+// src/plugins/slick.resizer.js
+var BindingEventService12 = BindingEventService, SlickEvent15 = Event, Utils23 = Utils;
+function Resizer(_options, fixedDimensions) {
+ let DATAGRID_MIN_HEIGHT = 180, DATAGRID_MIN_WIDTH = 300, DATAGRID_BOTTOM_PADDING = 20, _self = this, _fixedHeight, _fixedWidth, _grid, _gridOptions, _gridUid, _lastDimensions, _timer, _resizePaused = !1, _gridDomElm, _pageContainerElm, _gridContainerElm, _defaults = {
+ bottomPadding: 20,
+ applyResizeToContainer: !1,
+ minHeight: 180,
+ minWidth: 300,
+ rightPadding: 0
+ }, options = {}, _bindingEventService = new BindingEventService12();
+ function setOptions(_newOptions) {
+ options = Utils23.extend(!0, {}, _defaults, options, _newOptions);
+ }
+ function init(grid) {
+ setOptions(_options), _grid = grid, _gridOptions = _grid.getOptions(), _gridUid = _grid.getUID(), _gridDomElm = _grid.getContainerNode(), typeof _options.container == "string" ? _pageContainerElm = typeof _options.container == "string" ? document.querySelector(_options.container) : _options.container : _pageContainerElm = _options.container, options.gridContainer && (_gridContainerElm = options.gridContainer), fixedDimensions && (_fixedHeight = fixedDimensions.height, _fixedWidth = fixedDimensions.width), _gridOptions && bindAutoResizeDataGrid();
+ }
+ function bindAutoResizeDataGrid(newSizes) {
+ let gridElmOffset = Utils23.offset(_gridDomElm);
+ (_gridDomElm !== void 0 || gridElmOffset !== void 0) && (resizeGrid(0, newSizes, null), _bindingEventService.bind(window, "resize", function(event) {
+ _self.onGridBeforeResize.notify({ grid: _grid }, event, _self), _resizePaused || (resizeGrid(0, newSizes, event), resizeGrid(0, newSizes, event));
+ }));
+ }
+ function calculateGridNewDimensions() {
+ let gridElmOffset = Utils23.offset(_gridDomElm);
+ if (!window || _pageContainerElm === void 0 || _gridDomElm === void 0 || gridElmOffset === void 0)
+ return null;
+ let bottomPadding = options && options.bottomPadding !== void 0 ? options.bottomPadding : DATAGRID_BOTTOM_PADDING, gridHeight = 0, gridOffsetTop = 0;
+ options.calculateAvailableSizeBy === "container" ? gridHeight = Utils23.innerSize(_pageContainerElm, "height") || 0 : (gridHeight = window.innerHeight || 0, gridOffsetTop = gridElmOffset !== void 0 ? gridElmOffset.top : 0);
+ let availableHeight = gridHeight - gridOffsetTop - bottomPadding, availableWidth = Utils23.innerSize(_pageContainerElm, "width") || window.innerWidth || 0, maxHeight = options && options.maxHeight || void 0, minHeight = options && options.minHeight !== void 0 ? options.minHeight : DATAGRID_MIN_HEIGHT, maxWidth = options && options.maxWidth || void 0, minWidth = options && options.minWidth !== void 0 ? options.minWidth : DATAGRID_MIN_WIDTH, newHeight = availableHeight, newWidth = options && options.rightPadding ? availableWidth - options.rightPadding : availableWidth;
+ return newHeight < minHeight && (newHeight = minHeight), maxHeight && newHeight > maxHeight && (newHeight = maxHeight), newWidth < minWidth && (newWidth = minWidth), maxWidth && newWidth > maxWidth && (newWidth = maxWidth), {
+ height: _fixedHeight || newHeight,
+ width: _fixedWidth || newWidth
+ };
+ }
+ function destroy() {
+ _self.onGridBeforeResize.unsubscribe(), _self.onGridAfterResize.unsubscribe(), _bindingEventService.unbindAll();
+ }
+ function getLastResizeDimensions() {
+ return _lastDimensions;
+ }
+ function pauseResizer(isResizePaused) {
+ _resizePaused = isResizePaused;
+ }
+ function resizeGrid(delay, newSizes, event) {
+ if (delay = delay || 0, typeof Promise == "function")
+ return new Promise(function(resolve) {
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resolve(resizeGridCallback(newSizes, event));
+ }, delay)) : resolve(resizeGridCallback(newSizes, event));
+ });
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resizeGridCallback(newSizes, event);
+ }, delay)) : resizeGridCallback(newSizes, event);
+ }
+ function resizeGridCallback(newSizes, event) {
+ let lastDimensions = resizeGridWithDimensions(newSizes);
+ return _self.onGridAfterResize.notify({ grid: _grid, dimensions: lastDimensions }, event, _self), lastDimensions;
+ }
+ function resizeGridWithDimensions(newSizes) {
+ let availableDimensions = calculateGridNewDimensions();
+ if ((newSizes || availableDimensions) && _gridDomElm)
+ try {
+ let newHeight = newSizes && newSizes.height ? newSizes.height : availableDimensions.height, newWidth = newSizes && newSizes.width ? newSizes.width : availableDimensions.width;
+ _gridOptions.autoHeight || (_gridDomElm.style.height = `${newHeight}px`), _gridDomElm.style.width = `${newWidth}px`, _gridContainerElm && (_gridContainerElm.style.width = `${newWidth}px`), new RegExp("MSIE [6-8]").exec(navigator.userAgent) === null && _grid && _grid.resizeCanvas && _grid.resizeCanvas(), _gridOptions && _gridOptions.enableAutoSizeColumns && _grid.autosizeColumns && _gridUid && document.querySelector(`.${_gridUid}`) && _grid.autosizeColumns(), _lastDimensions = {
+ height: newHeight,
+ width: newWidth
+ };
+ } catch {
+ destroy();
+ }
+ return _lastDimensions;
+ }
+ Utils23.extend(this, {
+ init,
+ destroy,
+ pluginName: "Resizer",
+ bindAutoResizeDataGrid,
+ getLastResizeDimensions,
+ pauseResizer,
+ resizeGrid,
+ setOptions,
+ onGridAfterResize: new SlickEvent15(),
+ onGridBeforeResize: new SlickEvent15()
+ });
+}
+
+// src/plugins/slick.rowdetailview.js
+var SlickEvent16 = Event, EventHandler11 = EventHandler, Utils24 = Utils;
+function RowDetailView(options) {
+ var _grid, _gridOptions, _gridUid, _dataView, _dataViewIdProperty = "id", _expandableOverride = null, _self = this, _lastRange = null, _expandedRows = [], _handler = new EventHandler11(), _outsideRange = 5, _visibleRenderedCellCount = 0, _defaults = {
+ columnId: "_detail_selector",
+ cssClass: "detailView-toggle",
+ expandedClass: null,
+ collapsedClass: null,
+ keyPrefix: "_",
+ loadOnce: !1,
+ collapseAllOnSort: !0,
+ saveDetailViewOnScroll: !0,
+ singleRowExpand: !1,
+ useSimpleViewportCalc: !1,
+ alwaysRenderColumn: !0,
+ toolTip: "",
+ width: 30,
+ maxRows: null
+ }, _keyPrefix = _defaults.keyPrefix, _gridRowBuffer = 0, _rowIdsOutOfViewport = [], _options = Utils24.extend(!0, {}, _defaults, options);
+ typeof _options.expandableOverride == "function" && expandableOverride(_options.expandableOverride);
+ function init(grid) {
+ if (!grid)
+ throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the "init()" method');
+ _grid = grid, _gridUid = grid.getUID(), _gridOptions = grid.getOptions() || {}, _dataView = _grid.getData(), _keyPrefix = _options && _options.keyPrefix || "_", _gridRowBuffer = _grid.getOptions().minRowBuffer, _grid.getOptions().minRowBuffer = _options.panelRows + 3, _handler.subscribe(_grid.onClick, handleClick).subscribe(_grid.onScroll, handleScroll), _options.collapseAllOnSort && (_handler.subscribe(_grid.onSort, collapseAll), _expandedRows = [], _rowIdsOutOfViewport = []), _handler.subscribe(_grid.getData().onRowCountChanged, function() {
+ _grid.updateRowCount(), _grid.render();
+ }), _handler.subscribe(_grid.getData().onRowsChanged, function(e, a) {
+ _grid.invalidateRows(a.rows), _grid.render();
+ }), subscribeToOnAsyncResponse(), _handler.subscribe(_dataView.onSetItemsCalled, function() {
+ _dataViewIdProperty = _dataView && _dataView.getIdPropertyName() || "id";
+ }), _options.useSimpleViewportCalc && _handler.subscribe(_grid.onRendered, function(e, args) {
+ args && args.endRow && (_visibleRenderedCellCount = args.endRow - args.startRow);
+ });
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _self.onAsyncResponse.unsubscribe(), _self.onAsyncEndUpdate.unsubscribe(), _self.onAfterRowDetailToggle.unsubscribe(), _self.onBeforeRowDetailToggle.unsubscribe(), _self.onRowOutOfViewportRange.unsubscribe(), _self.onRowBackToViewportRange.unsubscribe();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ _options = Utils24.extend(!0, {}, _options, options2), _options && _options.singleRowExpand && collapseAll();
+ }
+ function arrayFindIndex(sourceArray, value) {
+ if (sourceArray) {
+ for (var i2 = 0; i2 < sourceArray.length; i2++)
+ if (sourceArray[i2] === value)
+ return i2;
+ }
+ return -1;
+ }
+ function handleClick(e, args) {
+ var dataContext = _grid.getDataItem(args.row);
+ if (checkExpandableOverride(args.row, dataContext, _grid) && (_options.useRowClick || _grid.getColumns()[args.cell].id === _options.columnId && e.target.classList.contains(_options.cssClass || ""))) {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ _self.onBeforeRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext
+ }, e, _self), toggleRowSelection(args.row, dataContext), _self.onAfterRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext,
+ expandedRows: _expandedRows
+ }, e, _self), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function handleScroll() {
+ _options.useSimpleViewportCalc ? calculateOutOfRangeViewsSimplerVersion() : calculateOutOfRangeViews();
+ }
+ function calculateOutOfRangeViews() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ if (_expandedRows.length > 0) {
+ var scrollDir = "DOWN";
+ if (_lastRange) {
+ if (_lastRange.top === renderedRange.top && _lastRange.bottom === renderedRange.bottom)
+ return;
+ (_lastRange.top > renderedRange.top || // Or we are at very top but our bottom is increasing
+ _lastRange.top === 0 && renderedRange.top === 0 && _lastRange.bottom > renderedRange.bottom) && (scrollDir = "UP");
+ }
+ }
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), rowPadding = row[_keyPrefix + "sizePadding"], rowOutOfRange = arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0;
+ scrollDir === "UP" ? (_options.saveDetailViewOnScroll && rowIndex >= renderedRange.bottom - _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex - _outsideRange < renderedRange.top && rowIndex >= renderedRange.top ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex + rowPadding > renderedRange.bottom && notifyOutOfViewport(row, row[_dataViewIdProperty])) : scrollDir === "DOWN" && (_options.saveDetailViewOnScroll && rowIndex <= renderedRange.top + _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex + rowPadding + _outsideRange > renderedRange.bottom && rowIndex < rowIndex + rowPadding ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex < renderedRange.top && notifyOutOfViewport(row, row[_dataViewIdProperty]));
+ }), _lastRange = renderedRange;
+ }
+ }
+ function calculateOutOfRangeViewsSimplerVersion() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), isOutOfVisibility = checkIsRowOutOfViewportRange(rowIndex, renderedRange);
+ !isOutOfVisibility && arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0 ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : isOutOfVisibility && notifyOutOfViewport(row, row[_dataViewIdProperty]);
+ });
+ }
+ }
+ function checkIsRowOutOfViewportRange(rowIndex, renderedRange) {
+ return Math.abs(renderedRange.bottom - _gridRowBuffer - rowIndex) > _visibleRenderedCellCount * 2;
+ }
+ function notifyOutOfViewport(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ _self.onRowOutOfViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !0)
+ }, null, _self);
+ }
+ function notifyBackToViewportWhenDomExist(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ setTimeout(function() {
+ document.querySelector(`.${_gridUid} .cellDetailView_${item[_dataViewIdProperty]}`) && _self.onRowBackToViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !1)
+ }, null, _self);
+ }, 100);
+ }
+ function syncOutOfViewportArray(rowId, isAdding) {
+ var arrayRowIndex = arrayFindIndex(_rowIdsOutOfViewport, rowId);
+ return isAdding && arrayRowIndex < 0 ? _rowIdsOutOfViewport.push(rowId) : !isAdding && arrayRowIndex >= 0 && _rowIdsOutOfViewport.splice(arrayRowIndex, 1), _rowIdsOutOfViewport;
+ }
+ function toggleRowSelection(rowNumber, dataContext) {
+ checkExpandableOverride(rowNumber, dataContext, _grid) && (_dataView.beginUpdate(), handleAccordionShowHide(dataContext), _dataView.endUpdate());
+ }
+ function collapseAll() {
+ _dataView.beginUpdate();
+ for (var i2 = _expandedRows.length - 1; i2 >= 0; i2--)
+ collapseDetailView(_expandedRows[i2], !0);
+ _dataView.endUpdate();
+ }
+ function collapseDetailView(item, isMultipleCollapsing) {
+ isMultipleCollapsing || _dataView.beginUpdate(), _options.loadOnce && saveDetailView(item), item[_keyPrefix + "collapsed"] = !0;
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ item[_keyPrefix + "sizePadding"] = 0, _dataView.updateItem(item[_dataViewIdProperty], item), _expandedRows = _expandedRows.filter(function(r) {
+ return r[_dataViewIdProperty] !== item[_dataViewIdProperty];
+ }), isMultipleCollapsing || _dataView.endUpdate();
+ }
+ function expandDetailView(item) {
+ if (_options && _options.singleRowExpand && collapseAll(), item[_keyPrefix + "collapsed"] = !1, _expandedRows.push(item), item[_keyPrefix + "detailContent"] || (item[_keyPrefix + "detailViewLoaded"] = !1), !item[_keyPrefix + "detailViewLoaded"] || _options.loadOnce !== !0)
+ item[_keyPrefix + "detailContent"] = _options.preTemplate(item);
+ else {
+ _self.onAsyncResponse.notify({
+ item,
+ itemDetail: item,
+ detailView: item[_keyPrefix + "detailContent"]
+ }, void 0, this), applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item);
+ return;
+ }
+ applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item), _options.process(item);
+ }
+ function saveDetailView(item) {
+ let view = document.querySelector(`.${_gridUid} .innerDetailView_${item[_dataViewIdProperty]}`);
+ if (view) {
+ let html = view.innerHTML;
+ html !== void 0 && (item[`${_keyPrefix}detailContent`] = html);
+ }
+ }
+ function subscribeToOnAsyncResponse() {
+ _self.onAsyncResponse.subscribe(function(e, args) {
+ if (!args || !args.item && !args.itemDetail)
+ throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.item" property.';
+ var itemDetail = args.item || args.itemDetail;
+ args.detailView ? itemDetail[_keyPrefix + "detailContent"] = args.detailView : itemDetail[_keyPrefix + "detailContent"] = _options.postTemplate(itemDetail), itemDetail[_keyPrefix + "detailViewLoaded"] = !0, _dataView.updateItem(itemDetail[_dataViewIdProperty], itemDetail), _self.onAsyncEndUpdate.notify({
+ grid: _grid,
+ item: itemDetail,
+ itemDetail
+ }, e, _self);
+ });
+ }
+ function handleAccordionShowHide(item) {
+ item && (item[_keyPrefix + "collapsed"] ? expandDetailView(item) : collapseDetailView(item));
+ }
+ var getPaddingItem = function(parent, offset2) {
+ var item = {};
+ for (var prop in _grid.getData())
+ item[prop] = null;
+ return item[_dataViewIdProperty] = parent[_dataViewIdProperty] + "." + offset2, item[_keyPrefix + "collapsed"] = !0, item[_keyPrefix + "isPadding"] = !0, item[_keyPrefix + "parent"] = parent, item[_keyPrefix + "offset"] = offset2, item;
+ };
+ function applyTemplateNewLineHeight(item) {
+ var rowCount = _options.panelRows, lineHeight = 13;
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / _gridOptions.rowHeight), item[_keyPrefix + "height"] = item[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: "",
+ toolTip: _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ alwaysRenderColumn: _options.alwaysRenderColumn,
+ cssClass: _options.cssClass,
+ formatter: detailSelectionFormatter
+ };
+ }
+ function getExpandedRows() {
+ return _expandedRows;
+ }
+ function detailSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ if (checkExpandableOverride(row, dataContext, grid)) {
+ if (dataContext[_keyPrefix + "collapsed"] == null && (dataContext[_keyPrefix + "collapsed"] = !0, dataContext[_keyPrefix + "sizePadding"] = 0, dataContext[_keyPrefix + "height"] = 0, dataContext[_keyPrefix + "isPadding"] = !1, dataContext[_keyPrefix + "parent"] = void 0, dataContext[_keyPrefix + "offset"] = 0), !dataContext[_keyPrefix + "isPadding"])
+ if (dataContext[_keyPrefix + "collapsed"]) {
+ var collapsedClasses = _options.cssClass + " expand ";
+ return _options.collapsedClass && (collapsedClasses += _options.collapsedClass), '
';
+ } else {
+ var html = [], rowHeight = _gridOptions.rowHeight, outterHeight = dataContext[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ _options.maxRows !== null && dataContext[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, dataContext[_keyPrefix + "sizePadding"] = _options.maxRows);
+ var expandedClasses = _options.cssClass + " collapse ";
+ return _options.expandedClass && (expandedClasses += _options.expandedClass), html.push('
'), html.push(''), html.push('
'), html.push('
', dataContext[_keyPrefix + "detailContent"], "
"), html.join("");
+ }
+ } else
+ return null;
+ return null;
+ }
+ function resizeDetailView(item) {
+ if (item) {
+ var mainContainer = document.querySelector("." + _gridUid + " .detailViewContainer_" + item[_dataViewIdProperty]), cellItem = document.querySelector("." + _gridUid + " .cellDetailView_" + item[_dataViewIdProperty]), inner = document.querySelector("." + _gridUid + " .innerDetailView_" + item[_dataViewIdProperty]);
+ if (!(!mainContainer || !cellItem || !inner)) {
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ var rowHeight = _gridOptions.rowHeight, lineHeight = 13;
+ mainContainer.style.minHeight = null;
+ var itemHeight = mainContainer.scrollHeight, rowCount = Math.ceil(itemHeight / rowHeight);
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / rowHeight), item[_keyPrefix + "height"] = itemHeight;
+ var outterHeight = item[_keyPrefix + "sizePadding"] * rowHeight;
+ _options.maxRows !== null && item[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, item[_keyPrefix + "sizePadding"] = _options.maxRows), _grid.getOptions().minRowBuffer < item[_keyPrefix + "sizePadding"] && (_grid.getOptions().minRowBuffer = item[_keyPrefix + "sizePadding"] + 3), mainContainer.setAttribute("style", "min-height: " + item[_keyPrefix + "height"] + "px"), cellItem && cellItem.setAttribute("style", "height: " + outterHeight + "px; top:" + rowHeight + "px");
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ saveDetailView(item);
+ }
+ }
+ }
+ function getFilterItem(item) {
+ return item[_keyPrefix + "isPadding"] && item[_keyPrefix + "parent"] && (item = item[_keyPrefix + "parent"]), item;
+ }
+ function checkExpandableOverride(row, dataContext, grid) {
+ return typeof _expandableOverride == "function" ? _expandableOverride(row, dataContext, grid) : !0;
+ }
+ function expandableOverride(overrideFn) {
+ _expandableOverride = overrideFn;
+ }
+ Utils24.extend(this, {
+ init,
+ destroy,
+ pluginName: "RowDetailView",
+ collapseAll,
+ collapseDetailView,
+ expandDetailView,
+ expandableOverride,
+ getColumnDefinition,
+ getExpandedRows,
+ getFilterItem,
+ getOptions,
+ resizeDetailView,
+ saveDetailView,
+ setOptions,
+ // events
+ onAsyncResponse: new SlickEvent16(),
+ onAsyncEndUpdate: new SlickEvent16(),
+ onAfterRowDetailToggle: new SlickEvent16(),
+ onBeforeRowDetailToggle: new SlickEvent16(),
+ onRowOutOfViewportRange: new SlickEvent16(),
+ onRowBackToViewportRange: new SlickEvent16()
+ });
+}
+
+// src/plugins/slick.rowmovemanager.js
+var SlickEvent17 = Event, EventHandler12 = EventHandler, Utils25 = Utils;
+function RowMoveManager(options) {
+ var _grid, _canvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler12(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils25.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils25.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows));
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_canvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _canvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_canvas.clientWidth}px`, dd.guide.style.top = "-1000px", _canvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils25.offset(_canvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _grid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_grid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ // cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd " + options.cssClass || "", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils25.extend(this, {
+ onBeforeMoveRows: new SlickEvent17(),
+ onMoveRows: new SlickEvent17(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "RowMoveManager"
+ });
+}
+
+// src/plugins/slick.rowselectionmodel.js
+var EventData7 = EventData, EventHandler13 = EventHandler, keyCode6 = keyCode, SlickEvent18 = Event, SlickRange4 = Range, Draggable4 = Draggable, CellRangeDecorator3 = CellRangeDecorator, CellRangeSelector3 = CellRangeSelector, Utils26 = Utils;
+function RowSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _handler = new EventHandler13(), _inHandler, _options, _selector, _isRowMoveManagerHandler, _defaults = {
+ selectActiveRow: !0,
+ dragToSelect: !1,
+ autoScrollWhenDrag: !0,
+ cellRangeSelector: void 0
+ };
+ function init(grid) {
+ if (typeof Draggable4 > "u")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ if (_options = Utils26.extend(!0, {}, _defaults, options), _selector = _options.cellRangeSelector, _grid = grid, !_selector && _options.dragToSelect) {
+ if (!CellRangeDecorator3)
+ throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true");
+ _selector = new CellRangeSelector3({
+ selectionCss: {
+ border: "none"
+ },
+ autoScroll: _options.autoScrollWhenDrag
+ });
+ }
+ _handler.subscribe(
+ _grid.onActiveCellChanged,
+ wrapHandler(handleActiveCellChange)
+ ), _handler.subscribe(
+ _grid.onKeyDown,
+ wrapHandler(handleKeyDown)
+ ), _handler.subscribe(
+ _grid.onClick,
+ wrapHandler(handleClick)
+ ), _selector && (grid.registerPlugin(_selector), _selector.onCellRangeSelecting.subscribe(handleCellRangeSelected), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected));
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _selector && (_selector.onCellRangeSelecting.unsubscribe(handleCellRangeSelected), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector.destroy && _selector.destroy());
+ }
+ function wrapHandler(handler) {
+ return function() {
+ _inHandler || (_inHandler = !0, handler.apply(this, arguments), _inHandler = !1);
+ };
+ }
+ function rangesToRows(ranges) {
+ for (var rows = [], i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++)
+ rows.push(j);
+ return rows;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = _grid.getColumns().length - 1, i2 = 0; i2 < rows.length; i2++)
+ ranges.push(new SlickRange4(rows[i2], 0, rows[i2], lastCell));
+ return ranges;
+ }
+ function getRowsRange(from, to) {
+ var i2, rows = [];
+ for (i2 = from; i2 <= to; i2++)
+ rows.push(i2);
+ for (i2 = to; i2 < from; i2++)
+ rows.push(i2);
+ return rows;
+ }
+ function getSelectedRows() {
+ return rangesToRows(_ranges);
+ }
+ function setSelectedRows(rows) {
+ setSelectedRanges(rowsToRanges(rows), "SlickRowSelectionModel.setSelectedRows");
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ _ranges = ranges;
+ var eventData = new EventData7(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickRowSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRows(getSelectedRows());
+ }
+ function handleActiveCellChange(e, data) {
+ _options.selectActiveRow && data.row != null && setSelectedRanges([new SlickRange4(data.row, 0, data.row, _grid.getColumns().length - 1)]);
+ }
+ function handleKeyDown(e) {
+ var activeRow = _grid.getActiveCell();
+ if (_grid.getOptions().multiSelect && activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == keyCode6.UP || e.which == keyCode6.DOWN)) {
+ var selectedRows = getSelectedRows();
+ selectedRows.sort(function(x, y) {
+ return x - y;
+ }), selectedRows.length || (selectedRows = [activeRow.row]);
+ var top = selectedRows[0], bottom = selectedRows[selectedRows.length - 1], active;
+ if (e.which == keyCode6.DOWN ? active = activeRow.row < bottom || top == bottom ? ++bottom : ++top : active = activeRow.row < bottom ? --bottom : --top, active >= 0 && active < _grid.getDataLength()) {
+ _grid.scrollRowIntoView(active);
+ var tempRanges = rowsToRanges(getRowsRange(top, bottom));
+ setSelectedRanges(tempRanges);
+ }
+ e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function handleClick(e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (!cell || !_grid.canCellBeActive(cell.row, cell.cell) || !_grid.getOptions().multiSelect || !e.ctrlKey && !e.shiftKey && !e.metaKey)
+ return !1;
+ var selection = rangesToRows(_ranges), idx = selection.indexOf(cell.row);
+ if (idx === -1 && (e.ctrlKey || e.metaKey))
+ selection.push(cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (idx !== -1 && (e.ctrlKey || e.metaKey))
+ selection = selection.filter((o) => o !== cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (selection.length && e.shiftKey) {
+ var last = selection.pop(), from = Math.min(cell.row, last), to = Math.max(cell.row, last);
+ selection = [];
+ for (var i2 = from; i2 <= to; i2++)
+ i2 !== last && selection.push(i2);
+ selection.push(last), _grid.setActiveCell(cell.row, cell.cell);
+ }
+ var tempRanges = rowsToRanges(selection);
+ return setSelectedRanges(tempRanges), e.stopImmediatePropagation(), !0;
+ }
+ function handleBeforeCellRangeSelected(e, cell) {
+ if (!_isRowMoveManagerHandler) {
+ var rowMoveManager = _grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager");
+ _isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils26.noop;
+ }
+ if (_grid.getEditorLock().isActive() || _isRowMoveManagerHandler(cell.cell))
+ return e.stopPropagation(), !1;
+ _grid.setActiveCell(cell.row, cell.cell);
+ }
+ function handleCellRangeSelected(e, args) {
+ if (!_grid.getOptions().multiSelect || !_options.selectActiveRow)
+ return !1;
+ setSelectedRanges([new SlickRange4(args.range.fromRow, 0, args.range.toRow, _grid.getColumns().length - 1)]);
+ }
+ Utils26.extend(this, {
+ getSelectedRows,
+ setSelectedRows,
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "RowSelectionModel",
+ onSelectedRangesChanged: new SlickEvent18()
+ });
+}
+
+// src/plugins/slick.state.js
+var SlickEvent19 = Event, Utils27 = Utils, localStorageWrapper = function() {
+ var localStorage = window.localStorage;
+ return typeof localStorage > "u" && console.error("localStorage is not available. slickgrid statepersistor disabled."), {
+ get: function(key) {
+ return new Promise((resolve, reject) => {
+ if (!localStorage) {
+ reject("missing localStorage");
+ return;
+ }
+ try {
+ var d = localStorage.getItem(key);
+ if (d)
+ return resolve(JSON.parse(d));
+ resolve({});
+ } catch (exc) {
+ reject(exc);
+ }
+ });
+ },
+ set: function(key, obj) {
+ localStorage && (typeof obj < "u" && (obj = JSON.stringify(obj)), localStorage.setItem(key, obj));
+ }
+ };
+}, defaults = {
+ key_prefix: "slickgrid:",
+ storage: new localStorageWrapper(),
+ scrollRowIntoView: !0
+};
+function State(options) {
+ options = Utils27.extend(!0, {}, defaults, options);
+ var _grid, _cid, _store = options.storage, onStateChanged = new SlickEvent19(), userData = {
+ state: null,
+ current: null
+ };
+ function init(grid) {
+ _grid = grid, _cid = grid.cid || options.cid, _cid ? (_grid.onColumnsResized.subscribe(save), _grid.onColumnsReordered.subscribe(save), _grid.onSort.subscribe(save)) : console.warn("grid has no client id. state persisting is disabled.");
+ }
+ function destroy() {
+ _grid.onSort.unsubscribe(save), _grid.onColumnsReordered.unsubscribe(save), _grid.onColumnsResized.unsubscribe(save), save();
+ }
+ function save() {
+ if (_cid && _store) {
+ var state = {
+ sortcols: getSortColumns(),
+ viewport: _grid.getViewport(),
+ columns: getColumns(),
+ userData: null
+ };
+ return state.userData = userData.current, setUserDataFromState(state.userData), onStateChanged.notify(state), _store.set(options.key_prefix + _cid, state);
+ }
+ }
+ function restore() {
+ return new Promise((resolve, reject) => {
+ if (!_cid) {
+ reject("missing client id");
+ return;
+ }
+ if (!_store) {
+ reject("missing store");
+ return;
+ }
+ _store.get(options.key_prefix + _cid).then(function(state) {
+ if (state) {
+ if (state.sortcols && _grid.setSortColumns(state.sortcols || []), state.viewport && options.scrollRowIntoView && _grid.scrollRowIntoView(state.viewport.top, !0), state.columns) {
+ var defaultColumns = options.defaultColumns;
+ if (defaultColumns) {
+ var defaultColumnsLookup = {};
+ defaultColumns.forEach(function(colDef) {
+ defaultColumnsLookup[colDef.id] = colDef;
+ });
+ var cols = [];
+ (state.columns || []).forEach(function(columnDef) {
+ defaultColumnsLookup[columnDef.id] && cols.push(Utils27.extend(!0, {}, defaultColumnsLookup[columnDef.id], {
+ width: columnDef.width,
+ headerCssClass: columnDef.headerCssClass
+ }));
+ }), state.columns = cols;
+ }
+ _grid.setColumns(state.columns);
+ }
+ setUserDataFromState(state.userData);
+ }
+ resolve(state);
+ }).catch(function(e) {
+ reject(e);
+ });
+ });
+ }
+ function setUserData(data) {
+ return userData.current = data, this;
+ }
+ function setUserDataFromState(data) {
+ return userData.state = data, setUserData(data);
+ }
+ function getUserData() {
+ return userData.current;
+ }
+ function getStateUserData() {
+ return userData.state;
+ }
+ function resetUserData() {
+ return userData.current = userData.state, this;
+ }
+ function getColumns() {
+ return _grid.getColumns().map(function(col) {
+ return {
+ id: col.id,
+ width: col.width
+ };
+ });
+ }
+ function getSortColumns() {
+ var sortCols = _grid.getSortColumns();
+ return sortCols;
+ }
+ function reset() {
+ _store.set(options.key_prefix + _cid, {}), setUserDataFromState(null);
+ }
+ Utils27.extend(this, {
+ init,
+ destroy,
+ save,
+ setUserData,
+ resetUserData,
+ getUserData,
+ getStateUserData,
+ restore,
+ onStateChanged,
+ reset
+ });
+}
+/**
+ * @license
+ * (c) 2009-2016 Michael Leibman
+ * michael{dot}leibman{at}gmail{dot}com
+ * http://github.com/mleibman/slickgrid
+ *
+ * Distributed under MIT license.
+ * All rights reserved.
+ *
+ * SlickGrid v4.0.0
+ *
+ * NOTES:
+ * Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.
+ * This increases the speed dramatically, but can only be done safely because there are no event handlers
+ * or data associated with any cell/row DOM nodes. Cell editors must make sure they implement .destroy()
+ * and do proper cleanup.
+ */
diff --git a/dist/controls/slick.columnmenu.min.js b/dist/controls/slick.columnmenu.min.js
deleted file mode 100644
index 9459a852..00000000
--- a/dist/controls/slick.columnmenu.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./controls/slick.columnmenu.js
- */
-!function(x){"use strict";Slick.Utils.extend(!0,x,{Slick:{Controls:{ColumnPicker:function(a,e,n){var i,m,p,h,k=e,C=n,f=e&&e.getUID?e.getUID():"",c=new Slick.Event,l=new Slick.BindingEventService,g={fadeSpeed:250,hideForceFitButton:!1,hideSyncResizeButton:!1,forceFitTitle:"Force fit columns",syncResizeTitle:"Synchronous resize",headerColumnValueExtractor:function(e){return e.name}};function t(e){e.onHeaderContextMenu.subscribe(d),e.onColumnsReordered.subscribe(y),C=Slick.Utils.extend({},g,n),(p=document.createElement("div")).className="slick-columnpicker "+f,p.style.display="none",document.body.appendChild(p);var e=document.createElement("button"),t=(e.type="button",e.className="close",e.dataset.dismiss="slick-columnpicker",e.ariaLabel="Close",document.createElement("span"));t.className="close",t.ariaHidden="true",t.innerHTML="×",e.appendChild(t),p.appendChild(e),(C.columnPickerTitle||C.columnPicker&&C.columnPicker.columnTitle)&&(t=C.columnPickerTitle||C.columnPicker.columnTitle,(i=document.createElement("div")).className="slick-gridmenu-custom",i.textContent=t,p.appendChild(i)),l.bind(p,"click",u),(m=document.createElement("span")).className="slick-columnpicker-list",l.bind(document.body,"mousedown",r),l.bind(document.body,"beforeunload",o)}function o(){k.onHeaderContextMenu.unsubscribe(d),k.onColumnsReordered.unsubscribe(y),l.unbindAll(),m&&m.remove(),p&&p.remove()}function r(e){(p===e.target||p&&p.contains(e.target))&&"close"!==e.target.className||(p.setAttribute("aria-expanded","false"),p.style.display="none")}function d(e){e.preventDefault(),Slick.Utils.emptyElement(m),y(),h=[];let t,n,i;for(var l,c,o,r=0;r
{void 0!==a[t].hidden&&(a[t].hidden=!e.checked),e.checked&&n.push(a[t])}),n.length?(k.setColumns(n),c.notify({columnId:i,showing:t,allColumns:a,columns:n,grid:k})):e.target.checked=!0}}function s(t){for(let e=0;e .close{float:right}.slick-columnpicker .title{font-size:16px;width:60%;border-bottom:solid 1px #d6d6d6;margin-bottom:10px}.slick-columnpicker li{list-style:none;margin:0;padding:0;background:none}.slick-columnpicker input{margin:4px}.slick-columnpicker li a{display:block;padding:4px;font-weight:bold}.slick-columnpicker li a:hover{background:white}.slick-columnpicker-list li.hidden{display:none}
\ No newline at end of file
diff --git a/dist/controls/slick.columnpicker.min.js b/dist/controls/slick.columnpicker.min.js
deleted file mode 100644
index 966fde37..00000000
--- a/dist/controls/slick.columnpicker.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./controls/slick.columnpicker.js
- */
-!function(x){"use strict";Slick.Utils.extend(!0,x,{Slick:{Controls:{ColumnPicker:function(a,e,n){var i,m,p,h,k=e,C=n,f=e&&e.getUID?e.getUID():"",c=new Slick.Event,l=new Slick.BindingEventService,g={fadeSpeed:250,hideForceFitButton:!1,hideSyncResizeButton:!1,forceFitTitle:"Force fit columns",syncResizeTitle:"Synchronous resize",headerColumnValueExtractor:function(e){return e.name}};function t(e){e.onHeaderContextMenu.subscribe(d),e.onColumnsReordered.subscribe(y),C=Slick.Utils.extend({},g,n),(p=document.createElement("div")).className="slick-columnpicker "+f,p.style.display="none",document.body.appendChild(p);var e=document.createElement("button"),t=(e.type="button",e.className="close",e.dataset.dismiss="slick-columnpicker",e.ariaLabel="Close",document.createElement("span"));t.className="close",t.ariaHidden="true",t.innerHTML="×",e.appendChild(t),p.appendChild(e),(C.columnPickerTitle||C.columnPicker&&C.columnPicker.columnTitle)&&(t=C.columnPickerTitle||C.columnPicker.columnTitle,(i=document.createElement("div")).className="slick-gridmenu-custom",i.textContent=t,p.appendChild(i)),l.bind(p,"click",u),(m=document.createElement("span")).className="slick-columnpicker-list",l.bind(document.body,"mousedown",r),l.bind(document.body,"beforeunload",o)}function o(){k.onHeaderContextMenu.unsubscribe(d),k.onColumnsReordered.unsubscribe(y),l.unbindAll(),m&&m.remove(),p&&p.remove()}function r(e){(p===e.target||p&&p.contains(e.target))&&"close"!==e.target.className||(p.setAttribute("aria-expanded","false"),p.style.display="none")}function d(e){e.preventDefault(),Slick.Utils.emptyElement(m),y(),h=[];let t,n,i;for(var l,c,o,r=0;r{void 0!==a[t].hidden&&(a[t].hidden=!e.checked),e.checked&&n.push(a[t])}),n.length?(k.setColumns(n),c.notify({columnId:i,showing:t,allColumns:a,columns:n,grid:k})):e.target.checked=!0}}function s(t){for(let e=0;e .close{float:right}.slick-gridmenu .title{font-size:16px;width:calc(100% - 30px);border-bottom:solid 1px #d6d6d6;margin-bottom:5px}.slick-gridmenu li{list-style:none;margin:0;padding:0;background:none}.slick-gridmenu input{margin:4px}.slick-gridmenu li a{display:block;padding:4px;font-weight:bold}.slick-gridmenu li a:hover{background:white}.slick-gridmenu-custom{margin-bottom:10px}.slick-gridmenu-{position:absolute;display:inline-block;margin:0;padding:2px;cursor:default}.slick-gridmenu-item{list-style:none;margin:0;cursor:pointer;padding:2px 4px;border:1px solid transparent;border-radius:3px;display:block}.slick-gridmenu-item:hover{border-color:silver;background:white}.slick-gridmenu-item-disabled{border-color:transparent!important;background:inherit!important}.slick-gridmenu-icon{display:inline-block;width:16px;height:16px;vertical-align:middle;margin-right:4px;background-repeat:no-repeat;background-position:center center}.slick-gridmenu-content{display:inline-block;vertical-align:middle}.slick-gridmenu-item-disabled{color:silver}.slick-gridmenu-item-hidden{display:none}.slick-gridmenu-list li.hidden{display:none}.slick-gridmenu-item.slick-gridmenu-item-divider{cursor:default;border:none;overflow:hidden;padding:0;height:1px;margin:8px 2px;background-color:#cecece}.slick-gridmenu-item-divider.slick-gridmenu-item:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/controls/slick.gridmenu.min.js b/dist/controls/slick.gridmenu.min.js
deleted file mode 100644
index ee0bc3e3..00000000
--- a/dist/controls/slick.gridmenu.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./controls/slick.gridmenu.js
- */
-"use strict";!function(R){Slick.Utils.extend(!0,R,{Slick:{Controls:{GridMenu:function(p,e,o){var h,l,n,C,s,f,d,M,y,b=e,k=e&&e.getUID?e.getUID():"",v=!1,E=o,S=this,w={showButton:!0,hideForceFitButton:!1,hideSyncResizeButton:!1,forceFitTitle:"Force fit columns",marginBottom:15,menuWidth:18,contentMinWidth:0,resizeOnShowHeaderRow:!1,syncResizeTitle:"Synchronous resize",useClickToRepositionMenu:!0,headerColumnValueExtractor:function(e){return e.name}},r=new Slick.BindingEventService;function t(e){h=e.getOptions();var n,t=E.gridMenu&&E.gridMenu.menuWidth||w.menuWidth;(s=h&&h.hasOwnProperty("frozenColumn")&&0<=h.frozenColumn?document.querySelector(`.${k} .slick-header-right`):document.querySelector(`.${k} .slick-header-left`)).style.width=`calc(100% - ${t}px)`,(E.gridMenu&&null!=E.gridMenu.resizeOnShowHeaderRow?E.gridMenu:w).resizeOnShowHeaderRow&&E.showHeaderRow&&(n=document.querySelector(`.${k}.slick-headerrow`))&&(n.style.width=`calc(100% - ${t}px)`),(E.gridMenu&&void 0!==E.gridMenu.showButton?E.gridMenu:w).showButton&&((d=document.createElement("button")).className="slick-gridmenu-button",d.ariaLabel="Grid Menu",E.gridMenu&&E.gridMenu.iconCssClass?d.classList.add(...E.gridMenu.iconCssClass.split(" ")):((n=document.createElement("img")).src=E.gridMenu&&E.gridMenu.iconImage?E.gridMenu.iconImage:"../images/drag-handle.png",d.appendChild(n)),o.iconCssClass&&d.classList.add(...o.iconCssClass.split(" ")),s.parentElement.insertBefore(d,s.parentElement.firstChild),r.bind(d,"click",a)),(M=document.createElement("div")).className="slick-gridmenu "+k,M.style.display="none",document.body.appendChild(M);(t=document.createElement("button")).type="button",t.className="close",t.dataset.dismiss="slick-gridmenu",t.ariaLabel="Close";var i=document.createElement("span");i.className="close",i.ariaHidden="true",i.innerHTML="×",t.appendChild(i),M.appendChild(t),(C=document.createElement("div")).className="slick-gridmenu-custom",C.role="menu",M.appendChild(C),T(E,C),b.onColumnsReordered.subscribe(z),(E=Slick.Utils.extend({},w,E)).gridMenu&&E.gridMenu.columnTitle&&((l=document.createElement("div")).className="title",l.innerHTML=E.gridMenu.columnTitle,M.appendChild(l)),r.bind(M,"click",B),(f=document.createElement("span")).className="slick-gridmenu-list",f.role="menu",r.bind(document.body,"mousedown",m),r.bind(document.body,"beforeunload",u),e.onBeforeDestroy.subscribe(u)}function u(){S.onAfterMenuShow.unsubscribe(),S.onBeforeMenuShow.unsubscribe(),S.onMenuClose.unsubscribe(),S.onCommand.unsubscribe(),S.onColumnsChanged.unsubscribe(),b.onColumnsReordered.unsubscribe(z),b.onBeforeDestroy.unsubscribe(),b.onSetOptions.unsubscribe(),r.unbindAll(),M&&M.remove&&M.remove(),i()}function i(){r.unbindAll();var e=document.querySelector("div.slick-gridmenu."+k);e&&(e.style.display="none"),s&&(s.style.width="100%"),d&&d.remove(),M&&M.remove()}function T(t,i){if(t.gridMenu&&t.gridMenu.customItems){E.gridMenu&&E.gridMenu.customTitle&&((n=document.createElement("div")).className="title",n.innerHTML=E.gridMenu.customTitle,i.appendChild(n));for(let n=0,e=t.gridMenu.customItems.length;n{e.checked&&(p[n].hidden&&(p[n].hidden=!1),t.push(p[n]))}),t.length?(i={columnId:i,showing:n,grid:b,allColumns:p,columns:t},b.setColumns(t),S.onColumnsChanged.notify(i,e,S)):e.target.checked=!0}}function L(){return b.getColumns()}function O(e,n){return"function"!=typeof e||e.call(this,n)}e.onSetOptions.subscribe(function(e,n){var t;n&&n.optionsBefore&&n.optionsAfter&&(t=0<=n.optionsBefore.frozenColumn&&-1===n.optionsAfter.frozenColumn,n=-1===n.optionsBefore.frozenColumn&&0<=n.optionsAfter.frozenColumn,t||n)&&c()}),t(b),Slick.Utils.extend(this,{init:t,getAllColumns:function(){return p},getVisibleColumns:L,destroy:u,deleteMenu:i,recreateGridMenu:c,showGridMenu:a,setOptions:function(e){o=Slick.Utils.extend({},o,e)},updateAllTitles:function(e){n&&n.innerHTML&&(n.innerHTML=e.customTitle),l&&l.innerHTML&&(l.innerHTML=e.columnTitle)},hideMenu:x,onAfterMenuShow:new Slick.Event,onBeforeMenuShow:new Slick.Event,onMenuClose:new Slick.Event,onCommand:new Slick.Event,onColumnsChanged:new Slick.Event})}}}})}(window);
\ No newline at end of file
diff --git a/dist/controls/slick.gridmenu.min.js.map b/dist/controls/slick.gridmenu.min.js.map
deleted file mode 100644
index 4ab95979..00000000
--- a/dist/controls/slick.gridmenu.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","Controls","GridMenu","columns","grid","options","_gridOptions","_columnTitleElm","_customTitleElm","_customMenuElm","_headerElm","_listElm","_buttonElm","_menuElm","columnCheckboxes","_grid","_gridUid","getUID","_isMenuOpen","_options","_self","this","_defaults","showButton","hideForceFitButton","hideSyncResizeButton","forceFitTitle","marginBottom","menuWidth","contentMinWidth","resizeOnShowHeaderRow","syncResizeTitle","useClickToRepositionMenu","headerColumnValueExtractor","columnDef","name","_bindingEventService","BindingEventService","init","getOptions","iconImageElm","gridMenuWidth","gridMenu","hasOwnProperty","frozenColumn","document","querySelector","style","width","undefined","showHeaderRow","headerRow","createElement","className","ariaLabel","iconCssClass","classList","add","split","src","iconImage","appendChild","parentElement","insertBefore","firstChild","bind","showGridMenu","display","body","buttonElm","type","dataset","dismiss","spanCloseElm","ariaHidden","innerHTML","role","populateCustomMenus","onColumnsReordered","subscribe","updateColumnOrder","columnTitle","updateColumn","handleBodyMouseDown","destroy","onBeforeDestroy","onAfterMenuShow","unsubscribe","onBeforeMenuShow","onMenuClose","onCommand","onColumnsChanged","onSetOptions","unbindAll","remove","deleteMenu","gridMenuElm","customMenuElm","customItems","customTitle","let","i","ln","length","addClickListener","item","callbackArgs","menu","visibleColumns","getVisibleColumns","isItemVisible","runOverrideFunctionWhenExists","itemVisibilityOverride","isItemUsable","itemUsabilityOverride","Object","prototype","call","disabled","liElm","divider","hidden","cssClass","tooltip","title","iconElm","backgroundImage","textElm","textCssClass","handleMenuItemClick","recreateGridMenu","e","targetEvent","touches","preventDefault","emptyElement","allColumns","menuUsabilityOverride","stopPropagation","notify","getReturnValue","columnId","columnLabel","excludeCssClass","id","excludeFromGridMenu","checkboxElm","labelElm","columnid","getColumnIndex","checked","push","htmlFor","forceFitCheckboxElm","option","textContent","forceFitColumns","syncResizeCheckboxElm","syncColumnCellResize","target","nodeName","opacity","menuIconOffset","offset","offsetWidth","currentMenuWidth","nextPositionTop","pageY","top","nextPositionLeft","pageX","left","menuMarginBottom","minWidth","height","maxHeight","innerHeight","clientY","event","contains","hideMenu","command","action","leaveOpen","defaultPrevented","hide","current","getColumns","slice","ordered","Array","shift","isChecked","previousVisibleColumns","setOptions","setColumns","forEach","columnCheckbox","idx","showing","overrideFn","args","switchedFromRegularToFrozen","optionsBefore","optionsAfter","switchedFromFrozenToRegular","getAllColumns","newOptions","updateAllTitles","gridMenuOptions","Event"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/controls/slick.pager.min.css b/dist/controls/slick.pager.min.css
deleted file mode 100644
index 0355a6df..00000000
--- a/dist/controls/slick.pager.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.slick-pager{width:100%;height:26px;border:1px solid gray;border-top:0;background:url('../images/header-columns-bg.gif') repeat-x center bottom;vertical-align:middle}.slick-pager .slick-pager-status{display:inline-block;padding:6px}.slick-pager .ui-icon-container{display:inline-block;margin:0px;border-color:gray}.slick-pager .slick-pager-nav{display:inline-block;float:left;padding:2px}.slick-pager .slick-pager-settings{display:block;float:right;padding:2px}.slick-pager .slick-pager-settings *{vertical-align:middle}.slick-pager .slick-pager-settings a{padding:2px;text-decoration:underline;cursor:pointer}
\ No newline at end of file
diff --git a/dist/controls/slick.pager.min.js b/dist/controls/slick.pager.min.js
deleted file mode 100644
index a1ea3882..00000000
--- a/dist/controls/slick.pager.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./controls/slick.pager.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{Controls:{Pager:function(c,r,d,p){const e=C(d);let u,g,m={showAllText:"Showing all {rowCount} rows",showPageText:"Showing page {pageNum} of {pageCount}",showCountText:"From {countBegin} to {countEnd} of {rowCount} rows",showCount:!1,pagingOptions:[{data:0,name:"All",ariaLabel:"Show All Pages"},{data:-1,name:"Auto",ariaLabel:"Auto Page Size"},{data:25,name:"25",ariaLabel:"Show 25 rows per page"},{data:50,name:"50",ariaLabel:"Show 50 rows per page"},{data:100,name:"100",ariaLabel:"Show 100 rows per page"}],showPageSizes:!1};var k=new Slick.BindingEventService;function a(){g=Slick.Utils.extend(!0,{},m,p),c.onPagingInfoChanged.subscribe(function(e,a){v(a)});var e=C(d);if(e&&(!e.jquery||e[0])){const s=document.createElement("span");s.className="slick-pager-nav";var a=document.createElement("span");a.className="slick-pager-settings",(u=document.createElement("span")).className="slick-pager-status";const l=document.createElement("span");l.className="slick-pager-settings-expanded",l.textContent="Show: ";for(let e=0;e{var e=l.style.display;l.style.display="none"===e?"inline":"none"}),a.appendChild(i);[{key:"first",ariaLabel:"First Page",callback:h},{key:"prev",ariaLabel:"Previous Page",callback:S},{key:"next",ariaLabel:"Next Page",callback:w},{key:"end",ariaLabel:"Last Page",callback:f}].forEach(e=>{var a=document.createElement("span"),t=(a.className="ui-state-default ui-corner-all ui-icon-container",document.createElement("span"));t.role="button",t.ariaLabel=e.ariaLabel,t.className=`ui-icon ui-icon-seek-${e.key} slick-icon-seek-`+e.key,k.bind(t,"click",e.callback),a.appendChild(t),s.appendChild(a)});o=document.createElement("div");o.className="slick-pager",o.appendChild(s),o.appendChild(a),o.appendChild(u),e.appendChild(o)}v(c.getPagingInfo())}function n(){var e=!Slick.GlobalEditorLock.commitCurrentEdit(),a=c.getPagingInfo(),t=a.totalPages-1;return{canGotoFirst:!e&&0!==a.pageSize&&0e.classList.remove("ui-state-disabled","slick-icon-state-disabled")),t.canGotoFirst||(e.querySelector(".ui-icon-seek-first").classList.add("ui-state-disabled"),e.querySelector(".slick-icon-seek-first").classList.add("slick-icon-state-disabled")),t.canGotoLast||(e.querySelector(".ui-icon-seek-end").classList.add("ui-state-disabled"),e.querySelector(".slick-icon-seek-end").classList.add("slick-icon-state-disabled")),t.canGotoNext||(e.querySelector(".ui-icon-seek-next").classList.add("ui-state-disabled"),e.querySelector(".slick-icon-seek-next").classList.add("slick-icon-state-disabled")),t.canGotoPrev||(e.querySelector(".ui-icon-seek-prev").classList.add("ui-state-disabled"),e.querySelector(".slick-icon-seek-prev").classList.add("slick-icon-state-disabled")),0===a.pageSize?u.textContent=g.showAllText.replace("{rowCount}",a.totalRows+"").replace("{pageCount}",a.totalPages+""):u.textContent=g.showPageText.replace("{pageNum}",a.pageNum+1+"").replace("{pageCount}",a.totalPages+""),g.showCount&&0!==a.pageSize){t=a.pageNum*a.pageSize;let e=u.textContent;e&&(e+=" - "),u.textContent=e+g.showCountText.replace("{rowCount}",a.totalRows+"").replace("{countBegin}",1+t).replace("{countEnd}",Math.min(t+a.pageSize,a.totalRows))}}}a(),Slick.Utils.extend(this,{init:a,destroy:function(){b(0),k.unbindAll(),e.innerHTML=""}})}}}})}(window);
\ No newline at end of file
diff --git a/dist/controls/slick.pager.min.js.map b/dist/controls/slick.pager.min.js.map
deleted file mode 100644
index bbe80f9e..00000000
--- a/dist/controls/slick.pager.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","Controls","Pager","dataView","grid","selectorOrElm","options","container","getContainerElement","let","statusElm","_options","_defaults","showAllText","showPageText","showCountText","showCount","pagingOptions","data","name","ariaLabel","showPageSizes","_bindingEventService","BindingEventService","init","onPagingInfoChanged","subscribe","e","pagingInfo","updatePager","jquery","navElm","document","createElement","className","settingsElm","pagerSettingsElm","textContent","o","length","p","anchorElm","dataset","val","appendChild","bind","vp","pagesize","target","undefined","Number","setPageSize","getViewport","bottom","top","parseInt","style","display","displayPaginationContainer","displayIconElm","role","styleDisplay","key","callback","gotoFirst","gotoPrev","gotoNext","gotoLast","forEach","pageBtn","iconElm","innerIconElm","slickPagerElm","getPagingInfo","getNavState","cannotLeaveEditMode","GlobalEditorLock","commitCurrentEdit","lastPage","totalPages","canGotoFirst","pageSize","pageNum","canGotoLast","canGotoPrev","canGotoNext","n","setRefreshHints","isFilterUnchanged","setPagingOptions","state","querySelector","querySelectorAll","pagerIcon","classList","remove","add","replace","totalRows","pageBegin","currentText","Math","min","this","destroy","unbindAll","innerHTML"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/esm/index.js b/dist/esm/index.js
new file mode 100644
index 00000000..b2ce0726
--- /dev/null
+++ b/dist/esm/index.js
@@ -0,0 +1,7508 @@
+// src/slick.core.js
+function EventData(event, args) {
+ this.event = event;
+ let nativeEvent = event, arguments_ = args, isPropagationStopped = !1, isImmediatePropagationStopped = !1, isDefaultPrevented = !1, returnValues = [], returnValue;
+ if (event) {
+ let eventProps = [
+ "altKey",
+ "ctrlKey",
+ "metaKey",
+ "shiftKey",
+ "key",
+ "keyCode",
+ "clientX",
+ "clientY",
+ "offsetX",
+ "offsetY",
+ "pageX",
+ "pageY",
+ "bubbles",
+ "type",
+ "which",
+ "x",
+ "y"
+ ];
+ for (let key of eventProps)
+ this[key] = event[key];
+ }
+ this.target = nativeEvent ? nativeEvent.target : void 0, this.stopPropagation = function() {
+ isPropagationStopped = !0, nativeEvent && nativeEvent.stopPropagation();
+ }, this.isPropagationStopped = function() {
+ return isPropagationStopped;
+ }, this.stopImmediatePropagation = function() {
+ isImmediatePropagationStopped = !0, nativeEvent && nativeEvent.stopImmediatePropagation();
+ }, this.isImmediatePropagationStopped = function() {
+ return isImmediatePropagationStopped;
+ }, this.getNativeEvent = function() {
+ return nativeEvent;
+ }, this.preventDefault = function() {
+ nativeEvent && nativeEvent.preventDefault(), isDefaultPrevented = !0;
+ }, this.isDefaultPrevented = function() {
+ return nativeEvent ? nativeEvent.defaultPrevented : isDefaultPrevented;
+ }, this.addReturnValue = function(value) {
+ returnValues.push(value), returnValue === void 0 && value !== void 0 && (returnValue = value);
+ }, this.getReturnValue = function() {
+ return returnValue;
+ }, this.getArguments = function() {
+ return arguments_;
+ };
+}
+function Event() {
+ var handlers = [];
+ this.subscribe = function(fn) {
+ handlers.push(fn);
+ }, this.unsubscribe = function(fn) {
+ for (var i2 = handlers.length - 1; i2 >= 0; i2--)
+ handlers[i2] === fn && handlers.splice(i2, 1);
+ }, this.notify = function(args, e, scope) {
+ e instanceof EventData || (e = new EventData(e, args)), scope = scope || this;
+ for (var i2 = 0; i2 < handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i2++) {
+ let returnValue = handlers[i2].call(scope, e, args);
+ e.addReturnValue(returnValue);
+ }
+ return e;
+ };
+}
+function EventHandler() {
+ var handlers = [];
+ this.subscribe = function(event, handler) {
+ return handlers.push({
+ event,
+ handler
+ }), event.subscribe(handler), this;
+ }, this.unsubscribe = function(event, handler) {
+ for (var i2 = handlers.length; i2--; )
+ if (handlers[i2].event === event && handlers[i2].handler === handler) {
+ handlers.splice(i2, 1), event.unsubscribe(handler);
+ return;
+ }
+ return this;
+ }, this.unsubscribeAll = function() {
+ for (var i2 = handlers.length; i2--; )
+ handlers[i2].event.unsubscribe(handlers[i2].handler);
+ return handlers = [], this;
+ };
+}
+function Range(fromRow, fromCell, toRow, toCell) {
+ toRow === void 0 && toCell === void 0 && (toRow = fromRow, toCell = fromCell), this.fromRow = Math.min(fromRow, toRow), this.fromCell = Math.min(fromCell, toCell), this.toRow = Math.max(fromRow, toRow), this.toCell = Math.max(fromCell, toCell), this.isSingleRow = function() {
+ return this.fromRow == this.toRow;
+ }, this.isSingleCell = function() {
+ return this.fromRow == this.toRow && this.fromCell == this.toCell;
+ }, this.contains = function(row, cell) {
+ return row >= this.fromRow && row <= this.toRow && cell >= this.fromCell && cell <= this.toCell;
+ }, this.toString = function() {
+ return this.isSingleCell() ? "(" + this.fromRow + ":" + this.fromCell + ")" : "(" + this.fromRow + ":" + this.fromCell + " - " + this.toRow + ":" + this.toCell + ")";
+ };
+}
+function NonDataItem() {
+ this.__nonDataRow = !0;
+}
+function Group() {
+ this.__group = !0, this.level = 0, this.count = 0, this.value = null, this.title = null, this.collapsed = !1, this.selectChecked = !1, this.totals = null, this.rows = [], this.groups = null, this.groupingKey = null;
+}
+Group.prototype = new NonDataItem();
+Group.prototype.equals = function(group) {
+ return this.value === group.value && this.count === group.count && this.collapsed === group.collapsed && this.title === group.title;
+};
+function GroupTotals() {
+ this.__groupTotals = !0, this.group = null, this.initialized = !1;
+}
+GroupTotals.prototype = new NonDataItem();
+function EditorLock() {
+ var activeEditController = null;
+ this.isActive = function(editController) {
+ return editController ? activeEditController === editController : activeEditController !== null;
+ }, this.activate = function(editController) {
+ if (editController !== activeEditController) {
+ if (activeEditController !== null)
+ throw new Error("SlickGrid.EditorLock.activate: an editController is still active, can't activate another editController");
+ if (!editController.commitCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()");
+ if (!editController.cancelCurrentEdit)
+ throw new Error("SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()");
+ activeEditController = editController;
+ }
+ }, this.deactivate = function(editController) {
+ if (activeEditController) {
+ if (activeEditController !== editController)
+ throw new Error("SlickGrid.EditorLock.deactivate: specified editController is not the currently active one");
+ activeEditController = null;
+ }
+ }, this.commitCurrentEdit = function() {
+ return activeEditController ? activeEditController.commitCurrentEdit() : !0;
+ }, this.cancelCurrentEdit = function() {
+ return activeEditController ? activeEditController.cancelCurrentEdit() : !0;
+ };
+}
+function regexSanitizer(dirtyHtml) {
+ return dirtyHtml.replace(/(\b)(on[a-z]+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(<)(\/*)(script|script defer)(.*)(>|>">)/gi, "");
+}
+function calculateAvailableSpace(element) {
+ let bottom = 0, top = 0, left = 0, right = 0, windowHeight = window.innerHeight || 0, windowWidth = window.innerWidth || 0, scrollPosition = windowScrollPosition(), pageScrollTop = scrollPosition.top, pageScrollLeft = scrollPosition.left, elmOffset = offset(element);
+ if (elmOffset) {
+ let elementOffsetTop = elmOffset.top || 0, elementOffsetLeft = elmOffset.left || 0;
+ top = elementOffsetTop - pageScrollTop, bottom = windowHeight - (elementOffsetTop - pageScrollTop), left = elementOffsetLeft - pageScrollLeft, right = windowWidth - (elementOffsetLeft - pageScrollLeft);
+ }
+ return { top, bottom, left, right };
+}
+function createDomElement(tagName, elementOptions, appendToParent) {
+ let elm = document.createElement(tagName);
+ return elementOptions && Object.keys(elementOptions).forEach((elmOptionKey) => {
+ let elmValue = elementOptions[elmOptionKey];
+ typeof elmValue == "object" ? Object.assign(elm[elmOptionKey], elmValue) : elm[elmOptionKey] = elementOptions[elmOptionKey];
+ }), appendToParent && appendToParent.appendChild && appendToParent.appendChild(elm), elm;
+}
+function debounce(callback, wait) {
+ let timeoutId = null;
+ return (...args) => {
+ wait >= 0 ? (clearTimeout(timeoutId), timeoutId = setTimeout(() => callback.apply(null, args), wait)) : callback.apply(null);
+ };
+}
+function emptyElement(element) {
+ if (element && element.firstChild)
+ for (; element.firstChild; )
+ element.lastChild && element.removeChild(element.lastChild);
+ return element;
+}
+function innerSize(elm, type) {
+ let size = 0;
+ if (elm) {
+ let clientSize = type === "height" ? "clientHeight" : "clientWidth", sides = type === "height" ? ["top", "bottom"] : ["left", "right"];
+ size = elm[clientSize];
+ for (let side of sides) {
+ let sideSize = parseFloat(getElementProp(elm, `padding-${side}`)) || 0;
+ size -= sideSize;
+ }
+ }
+ return size;
+}
+function getElementProp(elm, property) {
+ return elm && elm.getComputedStyle ? window.getComputedStyle(elm, null).getPropertyValue(property) : null;
+}
+function isEmptyObject(obj) {
+ return obj == null ? !0 : Object.entries(obj).length === 0;
+}
+function noop() {
+}
+function offset(el) {
+ if (!el || !el.getBoundingClientRect)
+ return;
+ let box = el.getBoundingClientRect(), docElem = document.documentElement;
+ return {
+ top: box.top + window.pageYOffset - docElem.clientTop,
+ left: box.left + window.pageXOffset - docElem.clientLeft
+ };
+}
+function windowScrollPosition() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+}
+function width(el, value) {
+ if (!(!el || !el.getBoundingClientRect)) {
+ if (value === void 0)
+ return el.getBoundingClientRect().width;
+ setStyleSize(el, "width", value);
+ }
+}
+function height(el, value) {
+ if (el) {
+ if (value === void 0)
+ return el.getBoundingClientRect().height;
+ setStyleSize(el, "height", value);
+ }
+}
+function setStyleSize(el, style, val) {
+ typeof val == "function" ? val = val() : typeof val == "string" ? el.style[style] = val : el.style[style] = val + "px";
+}
+function contains(parent, child) {
+ return !parent || !child ? !1 : !parents(child).every(function(p) {
+ return parent != p;
+ });
+}
+function isHidden(el) {
+ return el.offsetWidth === 0 && el.offsetHeight === 0;
+}
+function parents(el, selector) {
+ let parents2 = [], visible = selector == ":visible", hidden = selector == ":hidden";
+ for (; (el = el.parentNode) && el !== document && !(!el || !el.parentNode); )
+ hidden ? isHidden(el) && parents2.push(el) : visible ? isHidden(el) || parents2.push(el) : (!selector || el.matches(selector)) && parents2.push(el);
+ return parents2;
+}
+function toFloat(value) {
+ var x = parseFloat(value);
+ return isNaN(x) ? 0 : x;
+}
+function show(el, type) {
+ type = type || "", Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = type;
+ }) : el.style.display = type;
+}
+function hide(el) {
+ Array.isArray(el) ? el.forEach(function(e) {
+ e.style.display = "none";
+ }) : el.style.display = "none";
+}
+function slideUp(el, callback) {
+ return slideAnimation(el, "slideUp", callback);
+}
+function slideDown(el, callback) {
+ return slideAnimation(el, "slideDown", callback);
+}
+function slideAnimation(el, slideDirection, callback) {
+ if (window.jQuery !== void 0) {
+ window.jQuery(el)[slideDirection]("fast", callback);
+ return;
+ }
+ slideDirection === "slideUp" ? hide(el) : show(el), callback();
+}
+var getProto = Object.getPrototypeOf, class2type = {}, toString = class2type.toString, hasOwn = class2type.hasOwnProperty, fnToString = hasOwn.toString, ObjectFunctionString = fnToString.call(Object);
+function isFunction(obj) {
+ return typeof obj == "function" && typeof obj.nodeType != "number" && typeof obj.item != "function";
+}
+function isPlainObject(obj) {
+ var proto, Ctor;
+ return !obj || toString.call(obj) !== "[object Object]" ? !1 : (proto = getProto(obj), proto ? (Ctor = hasOwn.call(proto, "constructor") && proto.constructor, typeof Ctor == "function" && fnToString.call(Ctor) === ObjectFunctionString) : !0);
+}
+function extend() {
+ var options, name, src, copy, copyIsArray, clone, target = arguments[0], i2 = 1, length = arguments.length, deep = !1;
+ for (typeof target == "boolean" ? (deep = target, target = arguments[i2] || {}, i2++) : target = target || {}, typeof target != "object" && !isFunction(target) && (target = {}), i2 === length && (target = this, i2--); i2 < length; i2++)
+ if ((options = arguments[i2]) != null)
+ for (name in options)
+ copy = options[name], !(name === "__proto__" || target === copy) && (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy))) ? (src = target[name], copyIsArray && !Array.isArray(src) ? clone = [] : !copyIsArray && !isPlainObject(src) ? clone = {} : clone = src, copyIsArray = !1, target[name] = extend(deep, clone, copy)) : copy !== void 0 && (target[name] = copy));
+ return target;
+}
+function BindingEventService() {
+ this.boundedEvents = [], this.destroy = function() {
+ this.unbindAll(), this.boundedEvents = [];
+ }, this.bind = function(element, eventName, listener, options) {
+ element.addEventListener(eventName, listener, options), this.boundedEvents.push({ element, eventName, listener });
+ }, this.unbind = function(element, eventName, listener) {
+ element && element.removeEventListener && element.removeEventListener(eventName, listener);
+ }, this.unbindByEventName = function(element, eventName) {
+ let boundedEvent = this.boundedEvents.find((e) => e.element === element && e.eventName === eventName);
+ boundedEvent && this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);
+ }, this.unbindAll = function() {
+ for (; this.boundedEvents.length > 0; ) {
+ let boundedEvent = this.boundedEvents.pop(), { element, eventName, listener } = boundedEvent;
+ this.unbind(element, eventName, listener);
+ }
+ };
+}
+var SlickCore = {
+ // "Event": Event,
+ // "EventData": EventData,
+ // "EventHandler": EventHandler,
+ // "Range": Range,
+ // "NonDataRow": NonDataItem,
+ // "Group": Group,
+ // "GroupTotals": GroupTotals,
+ // "EditorLock": EditorLock,
+ RegexSanitizer: regexSanitizer,
+ // "BindingEventService": BindingEventService,
+ Utils: {
+ debounce,
+ extend,
+ calculateAvailableSpace,
+ createDomElement,
+ emptyElement,
+ innerSize,
+ isEmptyObject,
+ noop,
+ offset,
+ height,
+ width,
+ setStyleSize,
+ contains,
+ toFloat,
+ parents,
+ show,
+ hide,
+ slideUp,
+ slideDown,
+ storage: {
+ // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati
+ _storage: /* @__PURE__ */ new WeakMap(),
+ put: function(element, key, obj) {
+ this._storage.has(element) || this._storage.set(element, /* @__PURE__ */ new Map()), this._storage.get(element).set(key, obj);
+ },
+ get: function(element, key) {
+ let el = this._storage.get(element);
+ return el ? el.get(key) : null;
+ },
+ remove: function(element, key) {
+ var ret = this._storage.get(element).delete(key);
+ return !this._storage.get(element).size === 0 && this._storage.delete(element), ret;
+ }
+ }
+ },
+ /***
+ * A global singleton editor lock.
+ * @class GlobalEditorLock
+ * @static
+ * @constructor
+ */
+ GlobalEditorLock: new EditorLock(),
+ keyCode: {
+ SPACE: 8,
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ RIGHT: 39,
+ TAB: 9,
+ UP: 38,
+ A: 65
+ },
+ preClickClassName: "slick-edit-preclick",
+ GridAutosizeColsMode: {
+ None: "NOA",
+ LegacyOff: "LOF",
+ LegacyForceFit: "LFF",
+ IgnoreViewport: "IGV",
+ FitColsToViewport: "FCV",
+ FitViewportToCols: "FVC"
+ },
+ ColAutosizeMode: {
+ Locked: "LCK",
+ Guide: "GUI",
+ Content: "CON",
+ ContentExpandOnly: "CXO",
+ ContentIntelligent: "CTI"
+ },
+ RowSelectionMode: {
+ FirstRow: "FS1",
+ FirstNRows: "FSN",
+ AllRows: "ALL",
+ LastRow: "LS1"
+ },
+ ValueFilterMode: {
+ None: "NONE",
+ DeDuplicate: "DEDP",
+ GetGreatestAndSub: "GR8T",
+ GetLongestTextAndSub: "LNSB",
+ GetLongestText: "LNSC"
+ },
+ WidthEvalMode: {
+ Auto: "AUTO",
+ TextOnly: "CANV",
+ HTML: "HTML"
+ }
+}, {
+ Utils,
+ GlobalEditorLock,
+ keyCode,
+ preClickClassName,
+ GridAutosizeColsMode,
+ ColAutosizeMode,
+ RowSelectionMode,
+ ValueFilterMode,
+ WidthEvalMode
+} = SlickCore;
+
+// src/slick.compositeeditor.js
+function CompositeEditor(columns, containers, options) {
+ var defaultOptions = {
+ modalType: "edit",
+ // available type (create, edit, mass)
+ validationFailedMsg: "Some of the fields have failed validation",
+ validationMsgPrefix: null,
+ show: null,
+ hide: null,
+ position: null,
+ destroy: null,
+ formValues: {},
+ editors: {}
+ }, noop2 = function() {
+ }, firstInvalidEditor;
+ options = Slick.Utils.extend({}, defaultOptions, options);
+ function getContainerBox(i2) {
+ var c = containers[i2], offset2 = Slick.Utils.offset(c), w = Slick.Utils.width(c), h = Slick.Utils.height(c);
+ return {
+ top: offset2 && offset2.top,
+ left: offset2 && offset2.left,
+ bottom: offset2 && offset2.top + h,
+ right: offset2 && offset2.left + w,
+ width: w,
+ height: h,
+ visible: !0
+ };
+ }
+ function editor(args) {
+ var editors = [];
+ function init() {
+ for (var newArgs = {}, idx = 0; idx < columns.length; ) {
+ if (columns[idx].editor) {
+ var column = columns[idx];
+ newArgs = Slick.Utils.extend(!1, {}, args), newArgs.container = containers[idx], newArgs.column = column, newArgs.position = getContainerBox(idx), newArgs.commitChanges = noop2, newArgs.cancelChanges = noop2, newArgs.compositeEditorOptions = options, newArgs.formValues = {};
+ var currentEditor = new column.editor(newArgs);
+ options.editors[column.id] = currentEditor, editors.push(currentEditor);
+ }
+ idx++;
+ }
+ setTimeout(function() {
+ Array.isArray(editors) && editors.length > 0 && editors[0].focus && editors[0].focus();
+ }, 0);
+ }
+ this.destroy = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].destroy(), idx++;
+ options.destroy && options.destroy(), editors = [];
+ }, this.focus = function() {
+ (firstInvalidEditor || editors[0]).focus();
+ }, this.isValueChanged = function() {
+ for (var idx = 0; idx < editors.length; ) {
+ if (editors[idx].isValueChanged())
+ return !0;
+ idx++;
+ }
+ return !1;
+ }, this.serializeValue = function() {
+ for (var serializedValue = [], idx = 0; idx < editors.length; )
+ serializedValue[idx] = editors[idx].serializeValue(), idx++;
+ return serializedValue;
+ }, this.applyValue = function(item, state) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].applyValue(item, state[idx]), idx++;
+ }, this.loadValue = function(item) {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].loadValue(item), idx++;
+ }, this.validate = function(target) {
+ var validationResults, errors = [], targetElm = target || null;
+ firstInvalidEditor = null;
+ for (var idx = 0; idx < editors.length; ) {
+ var columnDef = editors[idx].args && editors[idx].args.column || {};
+ if (columnDef) {
+ var validationElm = document.querySelector(".item-details-validation.editor-" + columnDef.id), labelElm = document.querySelector(".item-details-label.editor-" + columnDef.id), editorElm = document.querySelector("[data-editorid=" + columnDef.id + "]"), validationMsgPrefix = options && options.validationMsgPrefix || "";
+ (!targetElm || Slick.Utils.contains(editorElm, targetElm)) && (validationResults = editors[idx].validate(), validationResults.valid ? validationElm && (validationElm.textContent = "", editorElm.classList.remove("invalid"), labelElm.classList.remove("invalid")) : (firstInvalidEditor = editors[idx], errors.push({
+ index: idx,
+ editor: editors[idx],
+ container: containers[idx],
+ msg: validationResults.msg
+ }), validationElm && (validationElm.textContent = validationMsgPrefix + validationResults.msg, labelElm.classList.add("invalid"), editorElm.classList.add("invalid")))), validationElm = null, labelElm = null, editorElm = null;
+ }
+ idx++;
+ }
+ return targetElm = null, errors.length ? {
+ valid: !1,
+ msg: options.validationFailedMsg,
+ errors
+ } : {
+ valid: !0,
+ msg: ""
+ };
+ }, this.hide = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].hide && editors[idx].hide(), idx++;
+ options.hide && options.hide();
+ }, this.show = function() {
+ for (var idx = 0; idx < editors.length; )
+ editors[idx].show && editors[idx].show(), idx++;
+ options.show && options.show();
+ }, this.position = function(box) {
+ options.position && options.position(box);
+ }, init();
+ }
+ return editor.prototype = this, editor;
+}
+
+// src/slick.groupitemmetadataprovider.js
+var Group2 = Group, keyCode2 = keyCode, Utils2 = Utils;
+function GroupItemMetadataProvider(inputOptions) {
+ var _grid, _defaults = {
+ checkboxSelect: !1,
+ checkboxSelectCssClass: "slick-group-select-checkbox",
+ checkboxSelectPlugin: null,
+ groupCssClass: "slick-group",
+ groupTitleCssClass: "slick-group-title",
+ totalsCssClass: "slick-group-totals",
+ groupFocusable: !0,
+ totalsFocusable: !1,
+ toggleCssClass: "slick-group-toggle",
+ toggleExpandedCssClass: "expanded",
+ toggleCollapsedCssClass: "collapsed",
+ enableExpandCollapse: !0,
+ groupFormatter: defaultGroupCellFormatter,
+ totalsFormatter: defaultTotalsCellFormatter,
+ includeHeaderTotals: !1
+ }, options = Utils2.extend(!0, {}, _defaults, inputOptions);
+ function getOptions() {
+ return options;
+ }
+ function setOptions(inputOptions2) {
+ Utils2.extend(!0, options, inputOptions2);
+ }
+ function defaultGroupCellFormatter(row, cell, value, columnDef, item, grid) {
+ if (!options.enableExpandCollapse)
+ return item.title;
+ var indentation = item.level * 15 + "px";
+ return (options.checkboxSelect ? ' ' : "") + "" + item.title + " ";
+ }
+ function defaultTotalsCellFormatter(row, cell, value, columnDef, item, grid) {
+ return columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef, grid) || "";
+ }
+ function init(grid) {
+ _grid = grid, _grid.onClick.subscribe(handleGridClick), _grid.onKeyDown.subscribe(handleGridKeyDown);
+ }
+ function destroy() {
+ _grid && (_grid.onClick.unsubscribe(handleGridClick), _grid.onKeyDown.unsubscribe(handleGridKeyDown));
+ }
+ function handleGridClick(e, args) {
+ var target = e.target, item = this.getDataItem(args.row);
+ if (item && item instanceof Group2 && target.classList.contains(options.toggleCssClass || "")) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ if (item && item instanceof Group2 && target.classList.contains(options.checkboxSelectCssClass)) {
+ item.selectChecked = !item.selectChecked, target.classList.remove(item.selectChecked ? "unchecked" : "checked"), target.classList.add(item.selectChecked ? "checked" : "unchecked");
+ var rowIndexes = _grid.getData().mapItemsToRows(item.rows);
+ (item.selectChecked ? options.checkboxSelectPlugin.selectRows : options.checkboxSelectPlugin.deSelectRows)(rowIndexes);
+ }
+ }
+ function handleGridKeyDown(e, args) {
+ if (options.enableExpandCollapse && e.which == keyCode2.SPACE) {
+ var activeCell = this.getActiveCell();
+ if (activeCell) {
+ var item = this.getDataItem(activeCell.row);
+ if (item && item instanceof Group2) {
+ var range = _grid.getRenderedRange();
+ this.getData().setRefreshHints({
+ ignoreDiffsBefore: range.top,
+ ignoreDiffsAfter: range.bottom + 1
+ }), item.collapsed ? this.getData().expandGroup(item.groupingKey) : this.getData().collapseGroup(item.groupingKey), e.stopImmediatePropagation(), e.preventDefault();
+ }
+ }
+ }
+ }
+ function getGroupRowMetadata(item) {
+ var groupLevel = item && item.level;
+ return {
+ selectable: !1,
+ focusable: options.groupFocusable,
+ cssClasses: options.groupCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.includeHeaderTotals && options.totalsFormatter,
+ columns: {
+ 0: {
+ colspan: options.includeHeaderTotals ? "1" : "*",
+ formatter: options.groupFormatter,
+ editor: null
+ }
+ }
+ };
+ }
+ function getTotalsRowMetadata(item) {
+ var groupLevel = item && item.group && item.group.level;
+ return {
+ selectable: !1,
+ focusable: options.totalsFocusable,
+ cssClasses: options.totalsCssClass + " slick-group-level-" + groupLevel,
+ formatter: options.totalsFormatter,
+ editor: null
+ };
+ }
+ return {
+ init,
+ destroy,
+ getGroupRowMetadata,
+ getTotalsRowMetadata,
+ getOptions,
+ setOptions
+ };
+}
+
+// src/slick.dataview.js
+var SlickEvent = Event, EventData2 = EventData, Group3 = Group, GroupTotals2 = GroupTotals, Utils3 = Utils, GroupItemMetadataProvider2 = GroupItemMetadataProvider;
+function DataView(options) {
+ var self = this, defaults2 = {
+ groupItemMetadataProvider: null,
+ inlineFilters: !1
+ }, idProperty = "id", items = [], rows = [], idxById = /* @__PURE__ */ new Map(), rowsById = null, filter = null, updated = null, suspend = !1, isBulkSuspend = !1, bulkDeleteIds = /* @__PURE__ */ new Map(), sortAsc = !0, fastSortField, sortComparer, refreshHints = {}, prevRefreshHints = {}, filterArgs, filteredItems = [], compiledFilter, compiledFilterWithCaching, filterCache = [], _grid = null, groupingInfoDefaults = {
+ getter: null,
+ formatter: null,
+ comparer: function(a, b) {
+ return a.value === b.value ? 0 : a.value > b.value ? 1 : -1;
+ },
+ predefinedValues: [],
+ aggregators: [],
+ aggregateEmpty: !1,
+ aggregateCollapsed: !1,
+ aggregateChildGroups: !1,
+ collapsed: !1,
+ displayTotalsRow: !0,
+ lazyTotalsCalculation: !1
+ }, groupingInfos = [], groups = [], toggledGroupsByLevel = [], groupingDelimiter = ":|:", selectedRowIds = null, preSelectedRowIdsChangeFn, pagesize = 0, pagenum = 0, totalRows = 0, onSelectedRowIdsChanged = new SlickEvent(), onSetItemsCalled = new SlickEvent(), onRowCountChanged = new SlickEvent(), onRowsChanged = new SlickEvent(), onRowsOrCountChanged = new SlickEvent(), onBeforePagingInfoChanged = new SlickEvent(), onPagingInfoChanged = new SlickEvent(), onGroupExpanded = new SlickEvent(), onGroupCollapsed = new SlickEvent();
+ options = Utils3.extend(!0, {}, defaults2, options);
+ function beginUpdate(bulkUpdate) {
+ suspend = !0, isBulkSuspend = bulkUpdate === !0;
+ }
+ function endUpdate() {
+ var wasBulkSuspend = isBulkSuspend;
+ isBulkSuspend = !1, suspend = !1, wasBulkSuspend && (processBulkDelete(), ensureIdUniqueness()), refresh();
+ }
+ function destroy() {
+ items = [], idxById = null, rowsById = null, filter = null, updated = null, sortComparer = null, filterCache = [], filteredItems = [], compiledFilter = null, compiledFilterWithCaching = null, _grid && _grid.onSelectedRowsChanged && _grid.onCellCssStylesChanged && (_grid.onSelectedRowsChanged.unsubscribe(), _grid.onCellCssStylesChanged.unsubscribe()), self.onRowsOrCountChanged && self.onRowsOrCountChanged.unsubscribe();
+ }
+ function setRefreshHints(hints) {
+ refreshHints = hints;
+ }
+ function setFilterArgs(args) {
+ filterArgs = args;
+ }
+ function processBulkDelete() {
+ if (idxById) {
+ for (var id, item, newIdx = 0, i2 = 0, l = items.length; i2 < l; i2++) {
+ if (item = items[i2], id = item[idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ bulkDeleteIds.has(id) ? idxById.delete(id) : (items[newIdx] = item, idxById.set(id, newIdx), ++newIdx);
+ }
+ items.length = newIdx, bulkDeleteIds = /* @__PURE__ */ new Map();
+ }
+ }
+ function updateIdxById(startingIndex) {
+ if (!(isBulkSuspend || !idxById)) {
+ startingIndex = startingIndex || 0;
+ for (var id, i2 = startingIndex, l = items.length; i2 < l; i2++) {
+ if (id = items[i2][idProperty], id === void 0)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ idxById.set(id, i2);
+ }
+ }
+ }
+ function ensureIdUniqueness() {
+ if (!(isBulkSuspend || !idxById)) {
+ for (var id, i2 = 0, l = items.length; i2 < l; i2++)
+ if (id = items[i2][idProperty], id === void 0 || idxById.get(id) !== i2)
+ throw new Error("[SlickGrid DataView] Each data element must implement a unique 'id' property");
+ }
+ }
+ function getItems() {
+ return items;
+ }
+ function getIdPropertyName() {
+ return idProperty;
+ }
+ function setItems(data, objectIdProperty) {
+ objectIdProperty !== void 0 && (idProperty = objectIdProperty), items = filteredItems = data, onSetItemsCalled.notify({ idProperty: objectIdProperty, itemCount: items.length }, null, self), idxById = /* @__PURE__ */ new Map(), updateIdxById(), ensureIdUniqueness(), refresh();
+ }
+ function setPagingOptions(args) {
+ onBeforePagingInfoChanged.notify(getPagingInfo(), null, self).getReturnValue() !== !1 && (args.pageSize != null && (pagesize = args.pageSize, pagenum = pagesize ? Math.min(pagenum, Math.max(0, Math.ceil(totalRows / pagesize) - 1)) : 0), args.pageNum != null && (pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(totalRows / pagesize) - 1))), onPagingInfoChanged.notify(getPagingInfo(), null, self), refresh());
+ }
+ function getPagingInfo() {
+ var totalPages = pagesize ? Math.max(1, Math.ceil(totalRows / pagesize)) : 1;
+ return { pageSize: pagesize, pageNum: pagenum, totalRows, totalPages, dataView: self };
+ }
+ function sort(comparer, ascending) {
+ sortAsc = ascending, sortComparer = comparer, fastSortField = null, ascending === !1 && items.reverse(), items.sort(comparer), ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function fastSort(field, ascending) {
+ sortAsc = ascending, fastSortField = field, sortComparer = null;
+ var oldToString = Object.prototype.toString;
+ Object.prototype.toString = typeof field == "function" ? field : function() {
+ return this[field];
+ }, ascending === !1 && items.reverse(), items.sort(), Object.prototype.toString = oldToString, ascending === !1 && items.reverse(), idxById = /* @__PURE__ */ new Map(), updateIdxById(), refresh();
+ }
+ function reSort() {
+ sortComparer ? sort(sortComparer, sortAsc) : fastSortField && fastSort(fastSortField, sortAsc);
+ }
+ function getFilteredItems() {
+ return filteredItems;
+ }
+ function getFilteredItemCount() {
+ return filteredItems.length;
+ }
+ function getFilter() {
+ return filter;
+ }
+ function setFilter(filterFn) {
+ filter = filterFn, options.inlineFilters && (compiledFilter = compileFilter(), compiledFilterWithCaching = compileFilterWithCaching()), refresh();
+ }
+ function getGrouping() {
+ return groupingInfos;
+ }
+ function setGrouping(groupingInfo) {
+ options.groupItemMetadataProvider || (options.groupItemMetadataProvider = new GroupItemMetadataProvider2()), groups = [], toggledGroupsByLevel = [], groupingInfo = groupingInfo || [], groupingInfos = groupingInfo instanceof Array ? groupingInfo : [groupingInfo];
+ for (var i2 = 0; i2 < groupingInfos.length; i2++) {
+ var gi = groupingInfos[i2] = Utils3.extend(!0, {}, groupingInfoDefaults, groupingInfos[i2]);
+ gi.getterIsAFn = typeof gi.getter == "function", gi.compiledAccumulators = [];
+ for (var idx = gi.aggregators.length; idx--; )
+ gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);
+ toggledGroupsByLevel[i2] = {};
+ }
+ refresh();
+ }
+ function groupBy(valueGetter, valueFormatter, sortComparer2) {
+ if (valueGetter == null) {
+ setGrouping([]);
+ return;
+ }
+ setGrouping({
+ getter: valueGetter,
+ formatter: valueFormatter,
+ comparer: sortComparer2
+ });
+ }
+ function setAggregators(groupAggregators, includeCollapsed) {
+ if (!groupingInfos.length)
+ throw new Error("[SlickGrid DataView] At least one grouping must be specified before calling setAggregators().");
+ groupingInfos[0].aggregators = groupAggregators, groupingInfos[0].aggregateCollapsed = includeCollapsed, setGrouping(groupingInfos);
+ }
+ function getItemByIdx(i2) {
+ return items[i2];
+ }
+ function getIdxById(id) {
+ return idxById && idxById.get(id);
+ }
+ function ensureRowsByIdCache() {
+ if (!rowsById) {
+ rowsById = {};
+ for (var i2 = 0, l = rows.length; i2 < l; i2++)
+ rowsById[rows[i2][idProperty]] = i2;
+ }
+ }
+ function getRowByItem(item) {
+ return ensureRowsByIdCache(), rowsById[item[idProperty]];
+ }
+ function getRowById(id) {
+ return ensureRowsByIdCache(), rowsById[id];
+ }
+ function getItemById(id) {
+ return items[idxById && idxById.get(id)];
+ }
+ function mapItemsToRows(itemArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i2 = 0, l = itemArray.length; i2 < l; i2++) {
+ var row = rowsById[itemArray[i2][idProperty]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapIdsToRows(idArray) {
+ var rows2 = [];
+ ensureRowsByIdCache();
+ for (var i2 = 0, l = idArray.length; i2 < l; i2++) {
+ var row = rowsById[idArray[i2]];
+ row != null && (rows2[rows2.length] = row);
+ }
+ return rows2;
+ }
+ function mapRowsToIds(rowArray) {
+ for (var ids = [], i2 = 0, l = rowArray.length; i2 < l; i2++)
+ if (rowArray[i2] < rows.length) {
+ let rowItem = rows[rowArray[i2]];
+ ids[ids.length] = rowItem && rowItem[idProperty];
+ }
+ return ids;
+ }
+ function updateSingleItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id))
+ throw new Error("[SlickGrid DataView] Invalid id");
+ if (id !== item[idProperty]) {
+ var newId = item[idProperty];
+ if (newId == null)
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a null id");
+ if (idxById.has(newId))
+ throw new Error("[SlickGrid DataView] Cannot update item to associate with a non-unique id");
+ idxById.set(newId, idxById.get(id)), idxById.delete(id), updated && updated[id] && delete updated[id], id = newId;
+ }
+ items[idxById.get(id)] = item, updated || (updated = {}), updated[id] = !0;
+ }
+ }
+ function updateItem(id, item) {
+ updateSingleItem(id, item), refresh();
+ }
+ function updateItems(ids, newItems) {
+ if (ids.length !== newItems.length)
+ throw new Error("[SlickGrid DataView] Mismatch on the length of ids and items provided to update");
+ for (var i2 = 0, l = newItems.length; i2 < l; i2++)
+ updateSingleItem(ids[i2], newItems[i2]);
+ refresh();
+ }
+ function insertItem(insertBefore, item) {
+ items.splice(insertBefore, 0, item), updateIdxById(insertBefore), refresh();
+ }
+ function insertItems(insertBefore, newItems) {
+ Array.prototype.splice.apply(items, [insertBefore, 0].concat(newItems)), updateIdxById(insertBefore), refresh();
+ }
+ function addItem(item) {
+ items.push(item), updateIdxById(items.length - 1), refresh();
+ }
+ function addItems(newItems) {
+ items = items.concat(newItems), updateIdxById(items.length - newItems.length), refresh();
+ }
+ function deleteItem(id) {
+ if (idxById)
+ if (isBulkSuspend)
+ bulkDeleteIds.set(id, !0);
+ else {
+ var idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), items.splice(idx, 1), updateIdxById(idx), refresh();
+ }
+ }
+ function deleteItems(ids) {
+ if (!(ids.length === 0 || !idxById))
+ if (isBulkSuspend)
+ for (var i2 = 0, l = ids.length; i2 < l; i2++) {
+ var id = ids[i2], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ bulkDeleteIds.set(id, !0);
+ }
+ else {
+ for (var indexesToDelete = [], i2 = 0, l = ids.length; i2 < l; i2++) {
+ var id = ids[i2], idx = idxById.get(id);
+ if (idx === void 0)
+ throw new Error("[SlickGrid DataView] Invalid id");
+ idxById.delete(id), indexesToDelete.push(idx);
+ }
+ indexesToDelete.sort();
+ for (var i2 = indexesToDelete.length - 1; i2 >= 0; --i2)
+ items.splice(indexesToDelete[i2], 1);
+ updateIdxById(indexesToDelete[0]), refresh();
+ }
+ }
+ function sortedAddItem(item) {
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()");
+ insertItem(sortedIndex(item), item);
+ }
+ function sortedUpdateItem(id, item) {
+ if (idxById) {
+ if (!idxById.has(id) || id !== item[idProperty])
+ throw new Error("[SlickGrid DataView] Invalid or non-matching id " + idxById.get(id));
+ if (!sortComparer)
+ throw new Error("[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()");
+ var oldItem = getItemById(id);
+ sortComparer(oldItem, item) !== 0 ? (deleteItem(id), sortedAddItem(item)) : updateItem(id, item);
+ }
+ }
+ function sortedIndex(searchItem) {
+ for (var low = 0, high = items.length; low < high; ) {
+ var mid = low + high >>> 1;
+ sortComparer(items[mid], searchItem) === -1 ? low = mid + 1 : high = mid;
+ }
+ return low;
+ }
+ function getItemCount() {
+ return items.length;
+ }
+ function getLength() {
+ return rows.length;
+ }
+ function getItem(i2) {
+ var item = rows[i2];
+ if (item && item.__group && item.totals && !item.totals.initialized) {
+ var gi = groupingInfos[item.level];
+ gi.displayTotalsRow || (calculateTotals(item.totals), item.title = gi.formatter ? gi.formatter(item) : item.value);
+ } else
+ item && item.__groupTotals && !item.initialized && calculateTotals(item);
+ return item;
+ }
+ function getItemMetadata(i2) {
+ var item = rows[i2];
+ return item === void 0 ? null : item.__group ? options.groupItemMetadataProvider.getGroupRowMetadata(item) : item.__groupTotals ? options.groupItemMetadataProvider.getTotalsRowMetadata(item) : null;
+ }
+ function expandCollapseAllGroups(level, collapse) {
+ if (level == null)
+ for (var i2 = 0; i2 < groupingInfos.length; i2++)
+ toggledGroupsByLevel[i2] = {}, groupingInfos[i2].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level: i2, groupingKey: null }) : onGroupExpanded.notify({ level: i2, groupingKey: null });
+ else
+ toggledGroupsByLevel[level] = {}, groupingInfos[level].collapsed = collapse, collapse === !0 ? onGroupCollapsed.notify({ level, groupingKey: null }) : onGroupExpanded.notify({ level, groupingKey: null });
+ refresh();
+ }
+ function collapseAllGroups(level) {
+ expandCollapseAllGroups(level, !0);
+ }
+ function expandAllGroups(level) {
+ expandCollapseAllGroups(level, !1);
+ }
+ function expandCollapseGroup(level, groupingKey, collapse) {
+ toggledGroupsByLevel[level][groupingKey] = groupingInfos[level].collapsed ^ collapse, refresh();
+ }
+ function collapseGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (groupingKey = arg0, level = arg0.split(groupingDelimiter).length - 1) : (groupingKey = args.join(groupingDelimiter), level = args.length - 1), expandCollapseGroup(level, groupingKey, !0), onGroupCollapsed.notify({ level, groupingKey });
+ }
+ function expandGroup(varArgs) {
+ var args = Array.prototype.slice.call(arguments), arg0 = args[0], groupingKey, level;
+ args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1 ? (level = arg0.split(groupingDelimiter).length - 1, groupingKey = arg0) : (level = args.length - 1, groupingKey = args.join(groupingDelimiter)), expandCollapseGroup(level, groupingKey, !1), onGroupExpanded.notify({ level, groupingKey });
+ }
+ function getGroups() {
+ return groups;
+ }
+ function extractGroups(rows2, parentGroup) {
+ for (var group, val, groups2 = [], groupsByVal = {}, r, level = parentGroup ? parentGroup.level + 1 : 0, gi = groupingInfos[level], i2 = 0, l = gi.predefinedValues.length; i2 < l; i2++)
+ val = gi.predefinedValues[i2], group = groupsByVal[val], group || (group = new Group3(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group);
+ for (var i2 = 0, l = rows2.length; i2 < l; i2++)
+ r = rows2[i2], val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter], group = groupsByVal[val], group || (group = new Group3(), group.value = val, group.level = level, group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : "") + val, groups2[groups2.length] = group, groupsByVal[val] = group), group.rows[group.count++] = r;
+ if (level < groupingInfos.length - 1)
+ for (var i2 = 0; i2 < groups2.length; i2++)
+ group = groups2[i2], group.groups = extractGroups(group.rows, group);
+ return groups2.length && addTotals(groups2, level), groups2.sort(groupingInfos[level].comparer), groups2;
+ }
+ function calculateTotals(totals) {
+ var group = totals.group, gi = groupingInfos[group.level], isLeafLevel = group.level == groupingInfos.length, agg, idx = gi.aggregators.length;
+ if (!isLeafLevel && gi.aggregateChildGroups)
+ for (var i2 = group.groups.length; i2--; )
+ group.groups[i2].totals.initialized || calculateTotals(group.groups[i2].totals);
+ for (; idx--; )
+ agg = gi.aggregators[idx], agg.init(), !isLeafLevel && gi.aggregateChildGroups ? gi.compiledAccumulators[idx].call(agg, group.groups) : gi.compiledAccumulators[idx].call(agg, group.rows), agg.storeResult(totals);
+ totals.initialized = !0;
+ }
+ function addGroupTotals(group) {
+ var gi = groupingInfos[group.level], totals = new GroupTotals2();
+ totals.group = group, group.totals = totals, gi.lazyTotalsCalculation || calculateTotals(totals);
+ }
+ function addTotals(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupCollapsed = gi.collapsed, toggledGroups = toggledGroupsByLevel[level], idx = groups2.length, g; idx--; )
+ g = groups2[idx], !(g.collapsed && !gi.aggregateCollapsed) && (g.groups && addTotals(g.groups, level + 1), gi.aggregators.length && (gi.aggregateEmpty || g.rows.length || g.groups && g.groups.length) && addGroupTotals(g), g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey], g.title = gi.formatter ? gi.formatter(g) : g.value);
+ }
+ function flattenGroupedRows(groups2, level) {
+ level = level || 0;
+ for (var gi = groupingInfos[level], groupedRows = [], rows2, gl = 0, g, i2 = 0, l = groups2.length; i2 < l; i2++) {
+ if (g = groups2[i2], groupedRows[gl++] = g, !g.collapsed) {
+ rows2 = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;
+ for (var j = 0, jj = rows2.length; j < jj; j++)
+ groupedRows[gl++] = rows2[j];
+ }
+ g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed) && (groupedRows[gl++] = g.totals);
+ }
+ return groupedRows;
+ }
+ function getFunctionInfo(fn) {
+ var fnStr = fn.toString(), usingEs5 = fnStr.indexOf("function") >= 0, fnRegex = usingEs5 ? /^function[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/ : /^[^(]*\(([^)]*)\)\s*{([\s\S]*)}$/, matches = fn.toString().match(fnRegex);
+ return {
+ params: matches[1].split(","),
+ body: matches[2]
+ };
+ }
+ function compileAccumulatorLoop(aggregator) {
+ if (aggregator.accumulate) {
+ var accumulatorInfo = getFunctionInfo(aggregator.accumulate), fn = new Function(
+ "_items",
+ "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" + accumulatorInfo.params[0] + " = _items[_i]; " + accumulatorInfo.body + "}"
+ ), fnName = "compiledAccumulatorLoop";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ } else
+ return function() {
+ };
+ }
+ function compileFilter() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args", tpl), fnName = "compiledFilter";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function compileFilterWithCaching() {
+ var filterInfo = getFunctionInfo(filter), filterPath1 = "{ continue _coreloop; }$1", filterPath2 = "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1", filterBody = filterInfo.body.replace(/return false\s*([;}]|\}|$)/gi, filterPath1).replace(/return!1([;}]|\}|$)/gi, filterPath1).replace(/return true\s*([;}]|\}|$)/gi, filterPath2).replace(/return!0([;}]|\}|$)/gi, filterPath2).replace(
+ /return ([^;}]+?)\s*([;}]|$)/gi,
+ "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2"
+ ), tpl = [
+ //"function(_items, _args, _cache) { ",
+ "var _retval = [], _idx = 0; ",
+ "var $item$, $args$ = _args; ",
+ "_coreloop: ",
+ "for (var _i = 0, _il = _items.length; _i < _il; _i++) { ",
+ "$item$ = _items[_i]; ",
+ "if (_cache[_i]) { ",
+ "_retval[_idx++] = $item$; ",
+ "continue _coreloop; ",
+ "} ",
+ "$filter$; ",
+ "} ",
+ "return _retval; "
+ //"}"
+ ].join("");
+ tpl = tpl.replace(/\$filter\$/gi, filterBody), tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]), tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]);
+ var fn = new Function("_items,_args,_cache", tpl), fnName = "compiledFilterWithCaching";
+ return fn.displayName = fnName, fn.name = setFunctionName(fn, fnName), fn;
+ }
+ function setFunctionName(fn, fnName) {
+ try {
+ Object.defineProperty(fn, "name", {
+ writable: !0,
+ value: fnName
+ });
+ } catch {
+ fn.name = fnName;
+ }
+ }
+ function uncompiledFilter(items2, args) {
+ for (var retval = [], idx = 0, i2 = 0, ii = items2.length; i2 < ii; i2++)
+ filter(items2[i2], args) && (retval[idx++] = items2[i2]);
+ return retval;
+ }
+ function uncompiledFilterWithCaching(items2, args, cache) {
+ for (var retval = [], idx = 0, item, i2 = 0, ii = items2.length; i2 < ii; i2++)
+ item = items2[i2], cache[i2] ? retval[idx++] = item : filter(item, args) && (retval[idx++] = item, cache[i2] = !0);
+ return retval;
+ }
+ function getFilteredAndPagedItems(items2) {
+ if (filter) {
+ var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter, batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;
+ refreshHints.isFilterNarrowing ? filteredItems = batchFilter(filteredItems, filterArgs) : refreshHints.isFilterExpanding ? filteredItems = batchFilterWithCaching(items2, filterArgs, filterCache) : refreshHints.isFilterUnchanged || (filteredItems = batchFilter(items2, filterArgs));
+ } else
+ filteredItems = pagesize ? items2 : items2.concat();
+ var paged;
+ return pagesize ? (filteredItems.length <= pagenum * pagesize && (filteredItems.length === 0 ? pagenum = 0 : pagenum = Math.floor((filteredItems.length - 1) / pagesize)), paged = filteredItems.slice(pagesize * pagenum, pagesize * pagenum + pagesize)) : paged = filteredItems, { totalRows: filteredItems.length, rows: paged };
+ }
+ function getRowDiffs(rows2, newRows) {
+ var item, r, eitherIsNonData, diff = [], from = 0, to = Math.max(newRows.length, rows2.length);
+ refreshHints && refreshHints.ignoreDiffsBefore && (from = Math.max(
+ 0,
+ Math.min(newRows.length, refreshHints.ignoreDiffsBefore)
+ )), refreshHints && refreshHints.ignoreDiffsAfter && (to = Math.min(
+ newRows.length,
+ Math.max(0, refreshHints.ignoreDiffsAfter)
+ ));
+ for (var i2 = from, rl = rows2.length; i2 < to; i2++)
+ i2 >= rl ? diff[diff.length] = i2 : (item = newRows[i2], r = rows2[i2], (!item || groupingInfos.length && (eitherIsNonData = item.__nonDataRow || r.__nonDataRow) && item.__group !== r.__group || item.__group && !item.equals(r) || eitherIsNonData && // no good way to compare totals since they are arbitrary DTOs
+ // deep object comparison is pretty expensive
+ // always considering them 'dirty' seems easier for the time being
+ (item.__groupTotals || r.__groupTotals) || item[idProperty] != r[idProperty] || updated && updated[item[idProperty]]) && (diff[diff.length] = i2));
+ return diff;
+ }
+ function recalc(_items) {
+ rowsById = null, (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing || refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) && (filterCache = []);
+ var filteredItems2 = getFilteredAndPagedItems(_items);
+ totalRows = filteredItems2.totalRows;
+ var newRows = filteredItems2.rows;
+ groups = [], groupingInfos.length && (groups = extractGroups(newRows), groups.length && (newRows = flattenGroupedRows(groups)));
+ var diff = getRowDiffs(rows, newRows);
+ return rows = newRows, diff;
+ }
+ function refresh() {
+ if (!suspend) {
+ var previousPagingInfo = Utils3.extend(!0, {}, getPagingInfo()), countBefore = rows.length, totalRowsBefore = totalRows, diff = recalc(items, filter);
+ pagesize && totalRows < pagenum * pagesize && (pagenum = Math.max(0, Math.ceil(totalRows / pagesize) - 1), diff = recalc(items, filter)), updated = null, prevRefreshHints = refreshHints, refreshHints = {}, totalRowsBefore !== totalRows && onBeforePagingInfoChanged.notify(previousPagingInfo, null, self) !== !1 && onPagingInfoChanged.notify(getPagingInfo(), null, self), countBefore !== rows.length && onRowCountChanged.notify({ previous: countBefore, current: rows.length, itemCount: items.length, dataView: self, callingOnRowsChanged: diff.length > 0 }, null, self), diff.length > 0 && onRowsChanged.notify({ rows: diff, itemCount: items.length, dataView: self, calledOnRowCountChanged: countBefore !== rows.length }, null, self), (countBefore !== rows.length || diff.length > 0) && onRowsOrCountChanged.notify({
+ rowsDiff: diff,
+ previousRowCount: countBefore,
+ currentRowCount: rows.length,
+ itemCount: items.length,
+ rowCountChanged: countBefore !== rows.length,
+ rowsChanged: diff.length > 0,
+ dataView: self
+ }, null, self);
+ }
+ }
+ function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {
+ var self2 = this;
+ _grid = grid;
+ var inHandler;
+ selectedRowIds = self2.mapRowsToIds(grid.getSelectedRows());
+ function setSelectedRowIds(rowIds) {
+ rowIds === !1 ? selectedRowIds = [] : selectedRowIds.sort().join(",") !== rowIds.sort().join(",") && (selectedRowIds = rowIds);
+ }
+ function update() {
+ if (selectedRowIds.length > 0 && !inHandler) {
+ inHandler = !0;
+ var selectedRows = self2.mapIdsToRows(selectedRowIds);
+ if (!preserveHidden) {
+ var selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: self2.mapRowsToIds(selectedRows),
+ rows: selectedRows,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData2(), self2);
+ }
+ grid.setSelectedRows(selectedRows), inHandler = !1;
+ }
+ }
+ return grid.onSelectedRowsChanged.subscribe(function(e, args) {
+ if (!inHandler) {
+ var newSelectedRowIds = self2.mapRowsToIds(args.rows), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: newSelectedRowIds,
+ rows: args.rows,
+ added: !0,
+ dataView: self2
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self2.getAllSelectedFilteredIds()
+ }), new EventData2(), self2);
+ }
+ }), preSelectedRowIdsChangeFn = function(args) {
+ if (!inHandler) {
+ inHandler = !0;
+ var overwrite = typeof args.added > "u";
+ if (overwrite)
+ setSelectedRowIds(args.ids);
+ else {
+ var rowIds;
+ if (args.added)
+ if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {
+ var hiddenSelectedRowIds = selectedRowIds.filter(function(id) {
+ return self2.getRowById(id) === void 0;
+ });
+ rowIds = hiddenSelectedRowIds.concat(args.ids);
+ } else
+ rowIds = args.ids;
+ else
+ preserveHiddenOnSelectionChange && grid.getOptions().multiSelect ? rowIds = selectedRowIds.filter(function(id) {
+ return args.ids.indexOf(id) === -1;
+ }) : rowIds = [];
+ setSelectedRowIds(rowIds);
+ }
+ inHandler = !1;
+ }
+ }, this.onRowsOrCountChanged.subscribe(update), onSelectedRowIdsChanged;
+ }
+ function getAllSelectedIds() {
+ return selectedRowIds;
+ }
+ function getAllSelectedFilteredIds() {
+ return getAllSelectedFilteredItems().map(function(item) {
+ return item[idProperty];
+ });
+ }
+ function setSelectedIds(selectedIds, options2) {
+ var isRowBeingAdded = options2 && options2.isRowBeingAdded, shouldTriggerEvent = options2 && options2.shouldTriggerEvent, applyRowSelectionToGrid = options2 && options2.applyRowSelectionToGrid;
+ isRowBeingAdded !== !1 && (isRowBeingAdded = !0);
+ var selectedRows = self.mapIdsToRows(selectedIds), selectedRowsChangedArgs = {
+ grid: _grid,
+ ids: selectedIds,
+ rows: selectedRows,
+ added: isRowBeingAdded,
+ dataView: self
+ };
+ preSelectedRowIdsChangeFn(selectedRowsChangedArgs), shouldTriggerEvent !== !1 && onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {
+ selectedRowIds,
+ filteredIds: self.getAllSelectedFilteredIds()
+ }), new EventData2(), self), applyRowSelectionToGrid !== !1 && _grid && _grid.setSelectedRows(selectedRows);
+ }
+ function getAllSelectedItems() {
+ var selectedData = [], selectedIds = getAllSelectedIds();
+ return selectedIds.forEach(function(id) {
+ selectedData.push(self.getItemById(id));
+ }), selectedData;
+ }
+ function getAllSelectedFilteredItems() {
+ if (!Array.isArray(selectedRowIds))
+ return [];
+ var intersection = filteredItems.filter(function(a) {
+ return selectedRowIds.some(function(b) {
+ return a[idProperty] === b;
+ });
+ });
+ return intersection || [];
+ }
+ function syncGridCellCssStyles(grid, key) {
+ var hashById, inHandler;
+ storeCellCssStyles(grid.getCellCssStyles(key));
+ function storeCellCssStyles(hash) {
+ hashById = {};
+ for (var row in hash) {
+ var id = rows[row][idProperty];
+ hashById[id] = hash[row];
+ }
+ }
+ function update() {
+ if (hashById) {
+ inHandler = !0, ensureRowsByIdCache();
+ var newHash = {};
+ for (var id in hashById) {
+ var row = rowsById[id];
+ row != null && (newHash[row] = hashById[id]);
+ }
+ grid.setCellCssStyles(key, newHash), inHandler = !1;
+ }
+ }
+ grid.onCellCssStylesChanged.subscribe(function(e, args) {
+ debugger;
+ inHandler || key == args.key && (args.hash ? storeCellCssStyles(args.hash) : (grid.onCellCssStylesChanged.unsubscribe(), self.onRowsOrCountChanged.unsubscribe(update)));
+ }), this.onRowsOrCountChanged.subscribe(update);
+ }
+ Utils3.extend(this, {
+ // methods
+ beginUpdate,
+ endUpdate,
+ destroy,
+ setPagingOptions,
+ getPagingInfo,
+ getIdPropertyName,
+ getItems,
+ setItems,
+ setFilter,
+ getFilter,
+ getFilteredItems,
+ getFilteredItemCount,
+ sort,
+ fastSort,
+ reSort,
+ setGrouping,
+ getGrouping,
+ groupBy,
+ setAggregators,
+ collapseAllGroups,
+ expandAllGroups,
+ collapseGroup,
+ expandGroup,
+ getGroups,
+ getAllSelectedIds,
+ getAllSelectedItems,
+ getAllSelectedFilteredIds,
+ getAllSelectedFilteredItems,
+ setSelectedIds,
+ getIdxById,
+ getRowByItem,
+ getRowById,
+ getItemById,
+ getItemByIdx,
+ mapItemsToRows,
+ mapRowsToIds,
+ mapIdsToRows,
+ setRefreshHints,
+ setFilterArgs,
+ refresh,
+ updateItem,
+ updateItems,
+ insertItem,
+ insertItems,
+ addItem,
+ addItems,
+ deleteItem,
+ deleteItems,
+ sortedAddItem,
+ sortedUpdateItem,
+ syncGridSelection,
+ syncGridCellCssStyles,
+ // data provider methods
+ getItemCount,
+ getLength,
+ getItem,
+ getItemMetadata,
+ // events
+ onSelectedRowIdsChanged,
+ // NOTE this will only work when used with "syncGridSelection"
+ onSetItemsCalled,
+ onRowCountChanged,
+ onRowsChanged,
+ onRowsOrCountChanged,
+ onBeforePagingInfoChanged,
+ onPagingInfoChanged,
+ onGroupExpanded,
+ onGroupCollapsed
+ });
+}
+function AvgAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.count_ = 0, this.nonNullCount_ = 0, this.sum_ = 0;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ this.count_++, val != null && val !== "" && !isNaN(val) && (this.nonNullCount_++, this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.avg || (groupTotals.avg = {}), this.nonNullCount_ !== 0 && (groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_);
+ };
+}
+function MinAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.min_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.min_ == null || val < this.min_) && (this.min_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.min || (groupTotals.min = {}), groupTotals.min[this.field_] = this.min_;
+ };
+}
+function MaxAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.max_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.max_ == null || val > this.max_) && (this.max_ = val);
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.max || (groupTotals.max = {}), groupTotals.max[this.field_] = this.max_;
+ };
+}
+function SumAggregator(field) {
+ this.field_ = field, this.init = function() {
+ this.sum_ = null;
+ }, this.accumulate = function(item) {
+ var val = item[this.field_];
+ val != null && val !== "" && !isNaN(val) && (this.sum_ += parseFloat(val));
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.sum || (groupTotals.sum = {}), groupTotals.sum[this.field_] = this.sum_;
+ };
+}
+function CountAggregator(field) {
+ this.field_ = field, this.init = function() {
+ }, this.storeResult = function(groupTotals) {
+ groupTotals.count || (groupTotals.count = {}), groupTotals.count[this.field_] = groupTotals.group.rows.length;
+ };
+}
+var Aggregators = {
+ Avg: AvgAggregator,
+ Min: MinAggregator,
+ Max: MaxAggregator,
+ Sum: SumAggregator,
+ Count: CountAggregator
+};
+
+// src/slick.editors.js
+var keyCode3 = keyCode, Utils4 = Utils;
+function TextEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.getValue = function() {
+ return input.value;
+ }, this.setValue = function(val) {
+ input.value = val;
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field] || "", input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function IntegerEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid integer"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function FloatEditor(args) {
+ var input, defaultValue, scope = this, navOnLR;
+ this.args = args, this.init = function() {
+ navOnLR = args.grid.getOptions().editorCellNavOnLRKeys, input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.addEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.focus(), input.select(), args.compositeEditorOptions && input.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ input.removeEventListener("keydown.nav", navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav), input.removeEventListener("change", this.onChange), input.remove();
+ }, this.focus = function() {
+ input.focus();
+ };
+ function getDecimalPlaces() {
+ var rtn = args.column.editorFixedDecimalPlaces;
+ return typeof rtn > "u" && (rtn = FloatEditor.DefaultDecimalPlaces), !rtn && rtn !== 0 ? null : rtn;
+ }
+ this.loadValue = function(item) {
+ defaultValue = item[args.column.field];
+ var decPlaces = getDecimalPlaces();
+ decPlaces !== null && (defaultValue || defaultValue === 0) && defaultValue.toFixed && (defaultValue = defaultValue.toFixed(decPlaces)), input.value = defaultValue, input.defaultValue = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ var rtn = parseFloat(input.value);
+ FloatEditor.AllowEmptyValue ? !rtn && rtn !== 0 && (rtn = "") : rtn = rtn || 0;
+ var decPlaces = getDecimalPlaces();
+ return decPlaces !== null && (rtn || rtn === 0) && rtn.toFixed && (rtn = parseFloat(rtn.toFixed(decPlaces))), rtn;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (isNaN(input.value))
+ return {
+ valid: !1,
+ msg: "Please enter a valid number"
+ };
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+FloatEditor.DefaultDecimalPlaces = null;
+FloatEditor.AllowEmptyValue = !1;
+function FlatpickrEditor(args) {
+ if (typeof flatpickr > "u")
+ throw new Error("Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/");
+ var input, defaultValue, scope = this;
+ this.args = args;
+ var flatpickrInstance;
+ this.init = function() {
+ input = Utils4.createDomElement("input", { type: "text", className: "editor-text" }, args.container), input.focus(), input.select(), flatpickrInstance = flatpickr(input, {
+ closeOnSelect: !0,
+ allowInput: !0,
+ altInput: !0,
+ altFormat: "m/d/Y",
+ dateFormat: "m/d/Y",
+ onChange: () => {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ }
+ }), args.compositeEditorOptions || setTimeout(() => {
+ scope.show(), scope.focus();
+ }, 50), Utils4.width(input, Utils4.width(input) - (args.compositeEditorOptions ? 28 : 18));
+ }, this.destroy = function() {
+ scope.hide(), flatpickrInstance && flatpickrInstance.destroy(), input.remove();
+ }, this.show = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.open();
+ }, this.hide = function() {
+ !args.compositeEditorOptions && flatpickrInstance && flatpickrInstance.close();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], input.value = defaultValue, input.defaultValue = defaultValue, input.select(), flatpickrInstance && flatpickrInstance.setDate(defaultValue);
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function YesNoSelectEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils4.createDomElement("select", { tabIndex: 0, className: "editor-yesno" }, args.container), Utils4.createDomElement("option", { value: "yes", textContent: "Yes" }, select), Utils4.createDomElement("option", { value: "no", textContent: "No" }, select), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ select.value = (defaultValue = item[args.column.field]) ? "yes" : "no";
+ }, this.serializeValue = function() {
+ return select.value == "yes";
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return select.value != defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function CheckboxEditor(args) {
+ var select, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ select = Utils4.createDomElement("input", { className: "editor-checkbox", type: "checkbox", value: "true" }, args.container), select.focus(), args.compositeEditorOptions && select.addEventListener("change", this.onChange);
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.destroy = function() {
+ select.removeEventListener("change", this.onChange), select.remove();
+ }, this.focus = function() {
+ select.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = !!item[args.column.field], defaultValue ? select.checked = !0 : select.checked = !1;
+ }, this.serializeValue = function() {
+ return select.checked;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return this.serializeValue() !== defaultValue;
+ }, this.validate = function() {
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function PercentCompleteEditor(args) {
+ var input, picker, defaultValue, scope = this;
+ this.args = args;
+ var slider, sliderInputHandler = function() {
+ input.value = this.value;
+ }, sliderChangeHandler = function() {
+ if (args.compositeEditorOptions) {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }
+ };
+ this.init = function() {
+ input = Utils4.createDomElement("input", { className: "editor-percentcomplete", type: "text" }, args.container), Utils4.width(input, args.container.clientWidth - 25), picker = Utils4.createDomElement("div", { className: "editor-percentcomplete-picker" }, args.container);
+ let pickerIcon = Utils4.createDomElement("span", { className: "editor-percentcomplete-picker-icon" }, picker), containerHelper = Utils4.createDomElement("div", { className: "editor-percentcomplete-helper" }, picker), containerWrapper = Utils4.createDomElement("div", { className: "editor-percentcomplete-wrapper" }, containerHelper);
+ Utils4.createDomElement("div", { className: "editor-percentcomplete-slider" }, containerWrapper), Utils4.createDomElement("input", { className: "editor-percentcomplete-slider", type: "range" }, containerWrapper);
+ let containerButtons = Utils4.createDomElement("div", { className: "editor-percentcomplete-buttons" }, containerWrapper);
+ Utils4.createDomElement("button", { value: "0", className: "slick-btn slick-btn-default", textContent: "Not started" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils4.createDomElement("button", { value: "50", className: "slick-btn slick-btn-default", textContent: "In Progress" }, containerButtons), containerButtons.appendChild(document.createElement("br")), Utils4.createDomElement("button", { value: "100", className: "slick-btn slick-btn-default", textContent: "Complete" }, containerButtons), input.focus(), input.select(), slider = picker.querySelector("input.editor-percentcomplete-slider"), slider.value = defaultValue, slider.addEventListener("input", sliderInputHandler), slider.addEventListener("change", sliderChangeHandler);
+ let buttons = picker.querySelectorAll(".editor-percentcomplete-buttons button");
+ [].forEach.call(buttons, (button) => {
+ button.addEventListener("click", this.onClick);
+ });
+ }, this.onClick = function() {
+ input.value = this.value, slider.value = this.value;
+ }, this.destroy = function() {
+ slider.removeEventListener("input", sliderInputHandler), slider.removeEventListener("change", sliderChangeHandler), picker.querySelectorAll(".editor-percentcomplete-buttons button").forEach((button) => button.removeEventListener("click", this.onClick)), input.remove(), picker.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ defaultValue = item[args.column.field], slider.value = defaultValue, input.value = defaultValue, input.select();
+ }, this.serializeValue = function() {
+ return parseInt(input.value, 10) || 0;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && (parseInt(input.value, 10) || 0) != defaultValue;
+ }, this.validate = function() {
+ return isNaN(parseInt(input.value, 10)) ? {
+ valid: !1,
+ msg: "Please enter a valid positive number"
+ } : {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function LongTextEditor(args) {
+ var input, wrapper, defaultValue, scope = this;
+ this.args = args, this.init = function() {
+ var compositeEditorOptions = args.compositeEditorOptions;
+ args.grid.getOptions().editorCellNavOnLRKeys;
+ var container = compositeEditorOptions ? args.container : document.body;
+ if (wrapper = Utils4.createDomElement("div", { className: "slick-large-editor-text" }, container), compositeEditorOptions ? (wrapper.style.position = "relative", Utils4.setStyleSize(wrapper, "padding", 0), Utils4.setStyleSize(wrapper, "border", 0)) : wrapper.style.position = "absolute", input = Utils4.createDomElement("textarea", { rows: 5, style: { background: "white", width: "250px", height: "80px", border: "0", outline: "0" } }, wrapper), compositeEditorOptions)
+ input.addEventListener("change", this.onChange);
+ else {
+ let btnContainer = Utils4.createDomElement("div", { style: "text-align:right" }, wrapper);
+ Utils4.createDomElement("button", { id: "save", className: "slick-btn slick-btn-primary", textContent: "Save" }, btnContainer), Utils4.createDomElement("button", { id: "cancel", className: "slick-btn slick-btn-default", textContent: "Cancel" }, btnContainer), wrapper.querySelector("#save").addEventListener("click", this.save), wrapper.querySelector("#cancel").addEventListener("click", this.cancel), input.addEventListener("keydown", this.handleKeyDown), scope.position(args.position);
+ }
+ input.focus(), input.select();
+ }, this.onChange = function() {
+ var activeCell = args.grid.getActiveCell();
+ scope.validate().valid && scope.applyValue(scope.args.item, scope.serializeValue()), scope.applyValue(scope.args.compositeEditorOptions.formValues, scope.serializeValue()), args.grid.onCompositeEditorChange.notify({ row: activeCell.row, cell: activeCell.cell, item: scope.args.item, column: scope.args.column, formValues: scope.args.compositeEditorOptions.formValues });
+ }, this.handleKeyDown = function(e) {
+ if (e.which == keyCode3.ENTER && e.ctrlKey)
+ scope.save();
+ else if (e.which == keyCode3.ESCAPE)
+ e.preventDefault(), scope.cancel();
+ else if (e.which == keyCode3.TAB && e.shiftKey)
+ e.preventDefault(), args.grid.navigatePrev();
+ else if (e.which == keyCode3.TAB)
+ e.preventDefault(), args.grid.navigateNext();
+ else if ((e.which == keyCode3.LEFT || e.which == keyCode3.RIGHT) && args.grid.getOptions().editorCellNavOnLRKeys) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ e.keyCode === keyCode3.LEFT && cursorPosition === 0 && args.grid.navigatePrev(), e.keyCode === keyCode3.RIGHT && cursorPosition >= textLength - 1 && args.grid.navigateNext();
+ }
+ }, this.save = function() {
+ (args.grid.getOptions() || {}).autoCommitEdit ? args.grid.getEditorLock().commitCurrentEdit() : args.commitChanges();
+ }, this.cancel = function() {
+ input.value = defaultValue, args.cancelChanges();
+ }, this.hide = function() {
+ Utils4.hide(wrapper);
+ }, this.show = function() {
+ Utils4.show(wrapper);
+ }, this.position = function(position) {
+ Utils4.setStyleSize(wrapper, "top", position.top - 5), Utils4.setStyleSize(wrapper, "left", position.left - 2);
+ }, this.destroy = function() {
+ args.compositeEditorOptions ? input.removeEventListener("change", this.onChange) : (wrapper.querySelector("#save").removeEventListener("click", this.save), wrapper.querySelector("#cancel").removeEventListener("click", this.cancel), input.removeEventListener("keydown", this.handleKeyDown)), wrapper.remove();
+ }, this.focus = function() {
+ input.focus();
+ }, this.loadValue = function(item) {
+ input.value = defaultValue = item[args.column.field], input.select();
+ }, this.serializeValue = function() {
+ return input.value;
+ }, this.applyValue = function(item, state) {
+ item[args.column.field] = state;
+ }, this.isValueChanged = function() {
+ return !(input.value === "" && defaultValue == null) && input.value != defaultValue;
+ }, this.validate = function() {
+ if (args.column.validator) {
+ var validationResults = args.column.validator(input.value, args);
+ if (!validationResults.valid)
+ return validationResults;
+ }
+ return {
+ valid: !0,
+ msg: null
+ };
+ }, this.init();
+}
+function handleKeydownLRNav(e) {
+ var cursorPosition = this.selectionStart, textLength = this.value.length;
+ (e.keyCode === keyCode3.LEFT && cursorPosition > 0 || e.keyCode === keyCode3.RIGHT && cursorPosition < textLength - 1) && e.stopImmediatePropagation();
+}
+function handleKeydownLRNoNav(e) {
+ (e.keyCode === keyCode3.LEFT || e.keyCode === keyCode3.RIGHT) && e.stopImmediatePropagation();
+}
+var Editors = {
+ Text: TextEditor,
+ Integer: IntegerEditor,
+ Float: FloatEditor,
+ Flatpickr: FlatpickrEditor,
+ YesNoSelect: YesNoSelectEditor,
+ Checkbox: CheckboxEditor,
+ PercentComplete: PercentCompleteEditor,
+ LongText: LongTextEditor
+};
+
+// src/slick.formatters.js
+function PercentCompleteFormatter(row, cell, value, columnDef, dataContext) {
+ return value == null || value === "" ? "-" : value < 50 ? "" + value + "% " : "" + value + "% ";
+}
+function PercentCompleteBarFormatter(row, cell, value, columnDef, dataContext) {
+ if (value == null || value === "")
+ return "";
+ var color;
+ return value < 30 ? color = "red" : value < 70 ? color = "silver" : color = "green", " ";
+}
+function YesNoFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? "Yes" : "No";
+}
+function CheckboxFormatter(row, cell, value, columnDef, dataContext) {
+ return ` `;
+}
+function CheckmarkFormatter(row, cell, value, columnDef, dataContext) {
+ return value ? ' ' : "";
+}
+var Formatters = {
+ PercentComplete: PercentCompleteFormatter,
+ PercentCompleteBar: PercentCompleteBarFormatter,
+ YesNo: YesNoFormatter,
+ Checkmark: CheckmarkFormatter,
+ Checkbox: CheckboxFormatter
+};
+
+// src/slick.interactions.js
+function Draggable(options) {
+ let { containerElement, onDragInit, onDragStart, onDrag, onDragEnd } = options, element, startX, startY, deltaX, deltaY, dragStarted;
+ if (containerElement || (containerElement = document), !containerElement || typeof containerElement.addEventListener != "function")
+ throw new Error("[Slick.Draggable] You did not provide a valid container html element that will be used for dragging.");
+ let originaldd = {
+ dragSource: containerElement,
+ dragHandle: null
+ };
+ containerElement && (containerElement.addEventListener("mousedown", userPressed), containerElement.addEventListener("touchstart", userPressed));
+ function executeDragCallbackWhenDefined(callback, e, dd) {
+ typeof callback == "function" && callback(e, dd);
+ }
+ function destroy() {
+ containerElement && (containerElement.removeEventListener("mousedown", userPressed), containerElement.removeEventListener("touchstart", userPressed));
+ }
+ function userPressed(event) {
+ element = event.target;
+ let targetEvent = event.touches ? event.touches[0] : event, { target } = targetEvent;
+ if (!options.allowDragFrom || options.allowDragFrom && element.matches(options.allowDragFrom)) {
+ originaldd.dragHandle = element;
+ let winScrollPos = windowScrollPosition2(element);
+ startX = winScrollPos.left + targetEvent.clientX, startY = winScrollPos.top + targetEvent.clientY, deltaX = targetEvent.clientX - targetEvent.clientX, deltaY = targetEvent.clientY - targetEvent.clientY, originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragInit, event, originaldd), document.addEventListener("mousemove", userMoved), document.addEventListener("touchmove", userMoved), document.addEventListener("mouseup", userReleased), document.addEventListener("touchend", userReleased), document.addEventListener("touchcancel", userReleased);
+ }
+ }
+ function userMoved(event) {
+ let targetEvent = event.touches ? event.touches[0] : event;
+ deltaX = targetEvent.clientX - startX, deltaY = targetEvent.clientY - startY;
+ let { target } = targetEvent;
+ dragStarted || (originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDragStart, event, originaldd), dragStarted = !0), originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target }), executeDragCallbackWhenDefined(onDrag, event, originaldd);
+ }
+ function userReleased(event) {
+ let { target } = event;
+ originaldd = Object.assign(originaldd, { target }), executeDragCallbackWhenDefined(onDragEnd, event, originaldd), document.removeEventListener("mousemove", userMoved), document.removeEventListener("touchmove", userMoved), document.removeEventListener("mouseup", userReleased), document.removeEventListener("touchend", userReleased), document.removeEventListener("touchcancel", userReleased), dragStarted = !1;
+ }
+ function windowScrollPosition2() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ return { destroy };
+}
+function MouseWheel(options) {
+ let { element, onMouseWheel } = options;
+ function destroy() {
+ element.removeEventListener("wheel", wheelHandler), element.removeEventListener("mousewheel", wheelHandler);
+ }
+ function init() {
+ element.addEventListener("wheel", wheelHandler), element.addEventListener("mousewheel", wheelHandler);
+ }
+ function wheelHandler(event) {
+ let orgEvent = event || window.event, delta = 0, deltaX = 0, deltaY = 0;
+ orgEvent.wheelDelta && (delta = orgEvent.wheelDelta / 120), orgEvent.detail && (delta = -orgEvent.detail / 3), deltaY = delta, orgEvent.axis !== void 0 && orgEvent.axis === orgEvent.HORIZONTAL_AXIS && (deltaY = 0, deltaX = -1 * delta), orgEvent.wheelDeltaY !== void 0 && (deltaY = orgEvent.wheelDeltaY / 120), orgEvent.wheelDeltaX !== void 0 && (deltaX = -1 * orgEvent.wheelDeltaX / 120), typeof onMouseWheel == "function" && onMouseWheel(event, delta, deltaX, deltaY);
+ }
+ return init(), { destroy };
+}
+function Resizable(options) {
+ let { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;
+ if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener != "function")
+ throw new Error("[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.");
+ function destroy() {
+ resizeableHandleElement && typeof resizeableHandleElement.removeEventListener == "function" && (resizeableHandleElement.removeEventListener("mousedown", resizeStartHandler), resizeableHandleElement.removeEventListener("touchstart", resizeStartHandler));
+ }
+ function executeResizeCallbackWhenDefined(callback, e) {
+ typeof callback == "function" && callback(e, { resizeableElement, resizeableHandleElement });
+ }
+ function resizeStartHandler(e) {
+ e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeStart, event), document.addEventListener("mousemove", resizingHandler), document.addEventListener("mouseup", resizeEndHandler), document.addEventListener("touchmove", resizingHandler), document.addEventListener("touchend", resizeEndHandler);
+ }
+ function resizingHandler(e) {
+ e.preventDefault && e.type !== "touchmove" && e.preventDefault();
+ let event = e.touches ? e.changedTouches[0] : e;
+ typeof onResize == "function" && (onResize(event, { resizeableElement, resizeableHandleElement }), onResize(event, { resizeableElement, resizeableHandleElement }));
+ }
+ function resizeEndHandler(e) {
+ let event = e.touches ? e.changedTouches[0] : e;
+ executeResizeCallbackWhenDefined(onResizeEnd, event), document.removeEventListener("mousemove", resizingHandler), document.removeEventListener("mouseup", resizeEndHandler), document.removeEventListener("touchmove", resizingHandler), document.removeEventListener("touchend", resizeEndHandler);
+ }
+ return resizeableHandleElement.addEventListener("mousedown", resizeStartHandler), resizeableHandleElement.addEventListener("touchstart", resizeStartHandler), { destroy };
+}
+
+// src/slick.grid.js
+var BindingEventService2 = BindingEventService, ColAutosizeMode2 = ColAutosizeMode, SlickEvent2 = Event, EventData3 = EventData, GlobalEditorLock2 = GlobalEditorLock, GridAutosizeColsMode2 = GridAutosizeColsMode;
+var keyCode4 = keyCode, preClickClassName2 = preClickClassName, SlickRange = Range, RowSelectionMode2 = RowSelectionMode, ValueFilterMode2 = ValueFilterMode, Utils5 = Utils, WidthEvalMode2 = WidthEvalMode, Draggable2 = Draggable, MouseWheel2 = MouseWheel, Resizable2 = Resizable, scrollbarDimensions, maxSupportedCssHeight;
+function SlickGrid(container, data, columns, options) {
+ var defaults2 = {
+ alwaysShowVerticalScroll: !1,
+ alwaysAllowHorizontalScroll: !1,
+ explicitInitialization: !1,
+ rowHeight: 25,
+ defaultColumnWidth: 80,
+ enableAddRow: !1,
+ leaveSpaceForNewRows: !1,
+ editable: !1,
+ autoEdit: !0,
+ autoCommitEdit: !1,
+ suppressActiveCellChangeOnEdit: !1,
+ enableCellNavigation: !0,
+ enableColumnReorder: !0,
+ asyncEditorLoading: !1,
+ asyncEditorLoadDelay: 100,
+ forceFitColumns: !1,
+ enableAsyncPostRender: !1,
+ asyncPostRenderDelay: 50,
+ enableAsyncPostRenderCleanup: !1,
+ asyncPostRenderCleanupDelay: 40,
+ auto: !1,
+ editorLock: GlobalEditorLock2,
+ showColumnHeader: !0,
+ showHeaderRow: !1,
+ headerRowHeight: 25,
+ createFooterRow: !1,
+ showFooterRow: !1,
+ footerRowHeight: 25,
+ createPreHeaderPanel: !1,
+ showPreHeaderPanel: !1,
+ preHeaderPanelHeight: 25,
+ showTopPanel: !1,
+ topPanelHeight: 25,
+ formatterFactory: null,
+ editorFactory: null,
+ cellFlashingCssClass: "flashing",
+ selectedCellCssClass: "selected",
+ multiSelect: !0,
+ enableTextSelectionOnCells: !1,
+ dataItemColumnValueExtractor: null,
+ frozenBottom: !1,
+ frozenColumn: -1,
+ frozenRow: -1,
+ frozenRightViewportMinWidth: 100,
+ fullWidthRows: !1,
+ multiColumnSort: !1,
+ numberedMultiColumnSort: !1,
+ tristateMultiColumnSort: !1,
+ sortColNumberInSeparateSpan: !1,
+ defaultFormatter,
+ forceSyncScrolling: !1,
+ addNewRowCssClass: "new-row",
+ preserveCopiedSelectionOnPaste: !1,
+ showCellSelection: !0,
+ viewportClass: null,
+ minRowBuffer: 3,
+ emulatePagingWhenScrolling: !0,
+ // when scrolling off bottom of viewport, place new row at top of viewport
+ editorCellNavOnLRKeys: !1,
+ enableMouseWheelScrollHandler: !0,
+ doPaging: !0,
+ autosizeColsMode: GridAutosizeColsMode2.LegacyOff,
+ autosizeColPaddingPx: 4,
+ autosizeTextAvgToMWidthRatio: 0.75,
+ viewportSwitchToScrollModeWidthPercent: void 0,
+ viewportMinWidthPx: void 0,
+ viewportMaxWidthPx: void 0,
+ suppressCssChangesOnHiddenInit: !1,
+ scrollDebounceDelay: -1,
+ // add a scroll delay to avoid screen flickering, -1 to disable delay
+ ffMaxSupportedCssHeight: 6e6,
+ maxSupportedCssHeight: 1e9,
+ sanitizer: void 0,
+ // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)
+ logSanitizedHtml: !1
+ // log to console when sanitised - recommend true for testing of dev and production
+ }, columnDefaults = {
+ name: "",
+ resizable: !0,
+ sortable: !1,
+ minWidth: 30,
+ maxWidth: void 0,
+ rerenderOnResize: !1,
+ headerCssClass: null,
+ defaultSortAsc: !0,
+ focusable: !0,
+ selectable: !0,
+ hidden: !1
+ }, columnAutosizeDefaults = {
+ ignoreHeaderText: !1,
+ colValueArray: void 0,
+ allowAddlPercent: void 0,
+ formatterOverride: void 0,
+ autosizeMode: ColAutosizeMode2.ContentIntelligent,
+ rowSelectionModeOnInit: void 0,
+ rowSelectionMode: RowSelectionMode2.FirstNRows,
+ rowSelectionCount: 100,
+ valueFilterMode: ValueFilterMode2.None,
+ widthEvalMode: WidthEvalMode2.Auto,
+ sizeToRemaining: void 0,
+ widthPx: void 0,
+ contentSizePx: 0,
+ headerWidthPx: 0,
+ colDataTypeOf: void 0
+ }, th, h, ph, n, cj, page = 0, offset2 = 0, vScrollDir = 1;
+ let show2 = Utils5.show, hide2 = Utils5.hide;
+ var _bindingEventService = new BindingEventService2(), initialized = !1, _container, uid = "slickgrid_" + Math.round(1e6 * Math.random()), self = this, _focusSink, _focusSink2, _groupHeaders = [], _headerScroller = [], _headers = [], _headerRows, _headerRowScroller, _headerRowSpacerL, _headerRowSpacerR, _footerRow, _footerRowScroller, _footerRowSpacerL, _footerRowSpacerR, _preHeaderPanel, _preHeaderPanelScroller, _preHeaderPanelSpacer, _preHeaderPanelR, _preHeaderPanelScrollerR, _preHeaderPanelSpacerR, _topPanelScrollers, _topPanels, _viewport, _canvas, _style, _boundAncestors = [], stylesheet, columnCssRulesL, columnCssRulesR, viewportH, viewportW, canvasWidth, canvasWidthL, canvasWidthR, headersWidth, headersWidthL, headersWidthR, viewportHasHScroll, viewportHasVScroll, headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, cellWidthDiff = 0, cellHeightDiff = 0, absoluteColumnMinWidth, hasFrozenRows = !1, frozenRowsHeight = 0, actualFrozenRow = -1, paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, topPanelH = 0, headerRowH = 0, footerRowH = 0, tabbingDirection = 1, _activeCanvasNode, _activeViewportNode, activePosX, activeRow, activeCell, activeCellNode = null, currentEditor = null, serializedEditorValue, editController, rowsCache = {}, renderedRows = 0, numVisibleRows = 0, prevScrollTop = 0, scrollTop = 0, lastRenderedScrollTop = 0, lastRenderedScrollLeft = 0, prevScrollLeft = 0, scrollLeft = 0, selectionModel, selectedRows = [], plugins = [], cellCssClasses = {}, columnsById = {}, sortColumns = [], columnPosLeft = [], columnPosRight = [], pagingActive = !1, pagingIsLastPage = !1, scrollThrottle = ActionThrottle(render, 50), h_editorLoader = null, h_render = null, h_postrender = null, h_postrenderCleanup = null, postProcessedRows = {}, postProcessToRow = null, postProcessFromRow = null, postProcessedCleanupQueue = [], postProcessgroupId = 0, counter_rows_rendered = 0, counter_rows_removed = 0, _paneHeaderL, _paneHeaderR, _paneTopL, _paneTopR, _paneBottomL, _paneBottomR, _headerScrollerL, _headerScrollerR, _headerL, _headerR, _groupHeadersL, _groupHeadersR, _headerRowScrollerL, _headerRowScrollerR, _footerRowScrollerL, _footerRowScrollerR, _headerRowL, _headerRowR, _footerRowL, _footerRowR, _topPanelScrollerL, _topPanelScrollerR, _topPanelL, _topPanelR, _viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR, _canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR, _viewportScrollContainerX, _viewportScrollContainerY, _headerScrollContainer, _headerRowScrollContainer, _footerRowScrollContainer, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, _hiddenParents, oldProps = [], enforceFrozenRowHeightRecalc = !1, columnResizeDragging = !1, slickDraggableInstance = null, slickMouseWheelInstances = [], slickResizableInstances = [], sortableSideLeftInstance, sortableSideRightInstance;
+ function init() {
+ if (typeof container == "string" ? _container = document.querySelector(container) : _container = container, !_container)
+ throw new Error("SlickGrid requires a valid container, " + container + " does not exist in the DOM.");
+ if (maxSupportedCssHeight = maxSupportedCssHeight || getMaxSupportedCssHeight(), options = Utils5.extend(!0, {}, defaults2, options), validateAndEnforceOptions(), columnDefaults.width = options.defaultColumnWidth, options.suppressCssChangesOnHiddenInit || cacheCssForHiddenInit(), updateColumnProps(), options.enableColumnReorder && (!Sortable || !Sortable.create))
+ throw new Error("SlickGrid requires Sortable.js module to be loaded");
+ editController = {
+ commitCurrentEdit,
+ cancelCurrentEdit
+ }, _container.replaceChildren(), _container.style.overflow = "hidden", _container.style.outline = 0, _container.classList.add(uid), _container.classList.add("ui-widget");
+ let containerStyles = window.getComputedStyle(_container);
+ /relative|absolute|fixed/.test(containerStyles.position) || (_container.style.position = "relative"), _focusSink = Utils5.createDomElement("div", { tabIndex: 0, style: { position: "fixed", width: "0px", height: "0px", top: "0px", left: "0px", outline: "0px" } }, _container), _paneHeaderL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-left", tabIndex: 0 }, _container), _paneHeaderR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-header slick-pane-right", tabIndex: 0 }, _container), _paneTopL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-left", tabIndex: 0 }, _container), _paneTopR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-top slick-pane-right", tabIndex: 0 }, _container), _paneBottomL = Utils5.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-left", tabIndex: 0 }, _container), _paneBottomR = Utils5.createDomElement("div", { className: "slick-pane slick-pane-bottom slick-pane-right", tabIndex: 0 }, _container), options.createPreHeaderPanel && (_preHeaderPanelScroller = Utils5.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderL), _preHeaderPanelScroller.appendChild(document.createElement("div")), _preHeaderPanel = Utils5.createDomElement("div", null, _preHeaderPanelScroller), _preHeaderPanelSpacer = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScroller), _preHeaderPanelScrollerR = Utils5.createDomElement("div", { className: "slick-preheader-panel ui-state-default slick-state-default", style: { overflow: "hidden", position: "relative" } }, _paneHeaderR), _preHeaderPanelR = Utils5.createDomElement("div", null, _preHeaderPanelScrollerR), _preHeaderPanelSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _preHeaderPanelScrollerR), options.showPreHeaderPanel || (hide2(_preHeaderPanelScroller), hide2(_preHeaderPanelScrollerR))), _headerScrollerL = Utils5.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-left" }, _paneHeaderL), _headerScrollerR = Utils5.createDomElement("div", { className: "slick-header ui-state-default slick-state-default slick-header-right" }, _paneHeaderR), _headerScroller.push(_headerScrollerL), _headerScroller.push(_headerScrollerR), _headerL = Utils5.createDomElement("div", { className: "slick-header-columns slick-header-columns-left", style: { left: "-1000px" } }, _headerScrollerL), _headerR = Utils5.createDomElement("div", { className: "slick-header-columns slick-header-columns-right", style: { left: "-1000px" } }, _headerScrollerR), _headers = [_headerL, _headerR], _headerRowScrollerL = Utils5.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopL), _headerRowScrollerR = Utils5.createDomElement("div", { className: "slick-headerrow ui-state-default slick-state-default" }, _paneTopR), _headerRowScroller = [_headerRowScrollerL, _headerRowScrollerR], _headerRowSpacerL = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerL), _headerRowSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _headerRowScrollerR), _headerRowL = Utils5.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-left" }, _headerRowScrollerL), _headerRowR = Utils5.createDomElement("div", { className: "slick-headerrow-columns slick-headerrow-columns-right" }, _headerRowScrollerR), _headerRows = [_headerRowL, _headerRowR], _topPanelScrollerL = Utils5.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopL), _topPanelScrollerR = Utils5.createDomElement("div", { className: "slick-top-panel-scroller ui-state-default slick-state-default" }, _paneTopR), _topPanelScrollers = [_topPanelScrollerL, _topPanelScrollerR], _topPanelL = Utils5.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerL), _topPanelR = Utils5.createDomElement("div", { className: "slick-top-panel", style: { width: "10000px" } }, _topPanelScrollerR), _topPanels = [_topPanelL, _topPanelR], options.showColumnHeader || _headerScroller.forEach(function(el) {
+ hide2(el);
+ }), options.showTopPanel || _topPanelScrollers.forEach(function(scroller) {
+ hide2(scroller);
+ }), options.showHeaderRow || _headerRowScroller.forEach(function(scroller) {
+ hide2(scroller);
+ }), _viewportTopL = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-left", tabIndex: 0 }, _paneTopL), _viewportTopR = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-top slick-viewport-right", tabIndex: 0 }, _paneTopR), _viewportBottomL = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-left", tabIndex: 0 }, _paneBottomL), _viewportBottomR = Utils5.createDomElement("div", { className: "slick-viewport slick-viewport-bottom slick-viewport-right", tabIndex: 0 }, _paneBottomR), _viewport = [_viewportTopL, _viewportTopR, _viewportBottomL, _viewportBottomR], options.viewportClass && _viewport.forEach(function(view) {
+ view.classList.add(options.viewportClass);
+ }), _activeViewportNode = _viewportTopL, _canvasTopL = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-left", tabIndex: 0 }, _viewportTopL), _canvasTopR = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-top grid-canvas-right", tabIndex: 0 }, _viewportTopR), _canvasBottomL = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-left", tabIndex: 0 }, _viewportBottomL), _canvasBottomR = Utils5.createDomElement("div", { className: "grid-canvas grid-canvas-bottom grid-canvas-right", tabIndex: 0 }, _viewportBottomR), _canvas = [_canvasTopL, _canvasTopR, _canvasBottomL, _canvasBottomR], scrollbarDimensions = scrollbarDimensions || measureScrollbar(), _activeCanvasNode = _canvasTopL, _preHeaderPanelSpacer && Utils5.width(_preHeaderPanelSpacer, getCanvasWidth() + scrollbarDimensions.width), _headers.forEach(function(el) {
+ Utils5.width(el, getHeadersWidth());
+ }), Utils5.width(_headerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), Utils5.width(_headerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), options.createFooterRow && (_footerRowScrollerR = Utils5.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopR), _footerRowScrollerL = Utils5.createDomElement("div", { className: "slick-footerrow ui-state-default slick-state-default" }, _paneTopL), _footerRowScroller = [_footerRowScrollerL, _footerRowScrollerR], _footerRowSpacerL = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerL), Utils5.width(_footerRowSpacerL, getCanvasWidth() + scrollbarDimensions.width), _footerRowSpacerR = Utils5.createDomElement("div", { style: { display: "block", height: "1px", position: "absolute", top: "0px", left: "0px" } }, _footerRowScrollerR), Utils5.width(_footerRowSpacerR, getCanvasWidth() + scrollbarDimensions.width), _footerRowL = Utils5.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-left" }, _footerRowScrollerL), _footerRowR = Utils5.createDomElement("div", { className: "slick-footerrow-columns slick-footerrow-columns-right" }, _footerRowScrollerR), _footerRow = [_footerRowL, _footerRowR], options.showFooterRow || _footerRowScroller.forEach(function(scroller) {
+ hide2(scroller);
+ })), _focusSink2 = _focusSink.cloneNode(!0), _container.append(_focusSink2), options.explicitInitialization || finishInitialization();
+ }
+ function finishInitialization() {
+ initialized || (initialized = !0, getViewportWidth(), getViewportHeight(), measureCellPaddingAndBorder(), disableSelection(_headers), options.enableTextSelectionOnCells || _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "selectstart.ui", function(event) {
+ event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement;
+ });
+ }), setFrozenOptions(), setPaneVisibility(), setScroller(), setOverflow(), updateColumnCaches(), createColumnHeaders(), createColumnFooter(), setupColumnSort(), createCssRules(), resizeCanvas(), bindAncestorScrollEvents(), _bindingEventService.bind(_container, "resize.slickgrid", resizeCanvas), _viewport.forEach(function(view) {
+ _bindingEventService.bind(view, "scroll", handleScroll);
+ }), options.enableMouseWheelScrollHandler && _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel2({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.bind(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.bind(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleHeaderRowScroll);
+ }), options.createFooterRow && (_footerRow.forEach(function(footer) {
+ _bindingEventService.bind(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.bind(footer, "click", handleFooterClick);
+ }), _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.bind(scroller, "scroll", handleFooterRowScroll);
+ })), options.createPreHeaderPanel && _bindingEventService.bind(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.bind(_focusSink, "keydown", handleKeyDown), _bindingEventService.bind(_focusSink2, "keydown", handleKeyDown), _canvas.forEach(function(element) {
+ _bindingEventService.bind(element, "keydown", handleKeyDown), _bindingEventService.bind(element, "click", handleClick), _bindingEventService.bind(element, "dblclick", handleDblClick), _bindingEventService.bind(element, "contextmenu", handleContextMenu), _bindingEventService.bind(element, "mouseover", handleCellMouseOver), _bindingEventService.bind(element, "mouseout", handleCellMouseOut);
+ }), Draggable2 && (slickDraggableInstance = Draggable2({
+ containerElement: _container,
+ allowDragFrom: "div.slick-cell",
+ onDragInit: handleDragInit,
+ onDragStart: handleDragStart,
+ onDrag: handleDrag,
+ onDragEnd: handleDragEnd
+ })), options.suppressCssChangesOnHiddenInit || restoreCssFromHiddenInit());
+ }
+ function cacheCssForHiddenInit() {
+ _hiddenParents = Utils5.parents(_container, ":hidden");
+ for (let el of _hiddenParents) {
+ var old = {};
+ for (let name in cssShow)
+ old[name] = el.style[name], el.style[name] = cssShow[name];
+ oldProps.push(old);
+ }
+ }
+ function restoreCssFromHiddenInit() {
+ let i2 = 0;
+ for (let el of _hiddenParents) {
+ var old = oldProps[i2++];
+ for (let name in cssShow)
+ el.style[name] = old[name];
+ }
+ }
+ function hasFrozenColumns() {
+ return options.frozenColumn > -1;
+ }
+ function registerPlugin(plugin) {
+ plugins.unshift(plugin), plugin.init(self);
+ }
+ function unregisterPlugin(plugin) {
+ for (var i2 = plugins.length; i2 >= 0; i2--)
+ if (plugins[i2] === plugin) {
+ plugins[i2].destroy && plugins[i2].destroy(), plugins.splice(i2, 1);
+ break;
+ }
+ }
+ function getPluginByName(name) {
+ for (var i2 = plugins.length - 1; i2 >= 0; i2--)
+ if (plugins[i2].pluginName === name)
+ return plugins[i2];
+ }
+ function setSelectionModel(model) {
+ selectionModel && (selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged), selectionModel.destroy && selectionModel.destroy()), selectionModel = model, selectionModel && (selectionModel.init(self), selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged));
+ }
+ function getSelectionModel() {
+ return selectionModel;
+ }
+ function getCanvasNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getCanvases(), columnIdOrIdx, rowIndex);
+ }
+ function getActiveCanvasNode(e) {
+ return e === void 0 || (e instanceof EventData3 && (e = e.getNativeEvent()), _activeCanvasNode = e.target.closest(".grid-canvas")), _activeCanvasNode;
+ }
+ function getCanvases() {
+ return _canvas;
+ }
+ function getViewportNode(columnIdOrIdx, rowIndex) {
+ return _getContainerElement(getViewports(), columnIdOrIdx, rowIndex);
+ }
+ function getViewports() {
+ return _viewport;
+ }
+ function getActiveViewportNode(e) {
+ return setActiveViewportNode(e), _activeViewportNode;
+ }
+ function setActiveViewportNode(e) {
+ return e instanceof EventData3 && (e = e.getNativeEvent()), _activeViewportNode = e.target.closest(".slick-viewport"), _activeViewportNode;
+ }
+ function _getContainerElement(targetContainers, columnIdOrIdx, rowIndex) {
+ if (targetContainers) {
+ columnIdOrIdx || (columnIdOrIdx = 0), rowIndex || (rowIndex = 0);
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), isBottomSide = hasFrozenRows && rowIndex >= actualFrozenRow + (options.frozenBottom ? 0 : 1), isRightSide = hasFrozenColumns() && idx > options.frozenColumn;
+ return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];
+ }
+ }
+ function measureScrollbar() {
+ var outerdiv = Utils5.createDomElement("div", { className: _viewport.className, style: { position: "absolute", top: "-10000px", left: "-10000px", overflow: "auto", width: "100px", height: "100px" } }, document.body), innerdiv = Utils5.createDomElement("div", { style: { width: "200px", height: "200px", overflow: "auto" } }, outerdiv), dim = {
+ width: outerdiv.offsetWidth - outerdiv.clientWidth,
+ height: outerdiv.offsetHeight - outerdiv.clientHeight
+ };
+ return innerdiv.remove(), outerdiv.remove(), dim;
+ }
+ function getHeadersWidth() {
+ headersWidth = headersWidthL = headersWidthR = 0;
+ for (var includeScrollbar = !options.autoHeight, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ var width2 = columns[i2].width;
+ options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += width2 : headersWidthL += width2;
+ }
+ return includeScrollbar && (options.frozenColumn > -1 && i2 > options.frozenColumn ? headersWidthR += scrollbarDimensions.width : headersWidthL += scrollbarDimensions.width), hasFrozenColumns() ? (headersWidthL = headersWidthL + 1e3, headersWidthR = Math.max(headersWidthR, viewportW) + headersWidthL, headersWidthR += scrollbarDimensions.width) : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidth = headersWidthL + headersWidthR, Math.max(headersWidth, viewportW) + 1e3;
+ }
+ function getHeadersWidthL() {
+ return headersWidthL = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn || (headersWidthL += column.width);
+ }), hasFrozenColumns() ? headersWidthL += 1e3 : (headersWidthL += scrollbarDimensions.width, headersWidthL = Math.max(headersWidthL, viewportW) + 1e3), headersWidthL;
+ }
+ function getHeadersWidthR() {
+ return headersWidthR = 0, columns.forEach(function(column, i2) {
+ column.hidden || options.frozenColumn > -1 && i2 > options.frozenColumn && (headersWidthR += column.width);
+ }), hasFrozenColumns() && (headersWidthR = Math.max(headersWidthR, viewportW) + getHeadersWidthL(), headersWidthR += scrollbarDimensions.width), headersWidthR;
+ }
+ function getCanvasWidth() {
+ var availableWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2 = columns.length;
+ for (canvasWidthL = canvasWidthR = 0; i2--; )
+ !columns[i2] || columns[i2].hidden || (hasFrozenColumns() && i2 > options.frozenColumn ? canvasWidthR += columns[i2].width : canvasWidthL += columns[i2].width);
+ var totalRowWidth = canvasWidthL + canvasWidthR;
+ if (options.fullWidthRows) {
+ var extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;
+ extraWidth > 0 && (totalRowWidth += extraWidth, hasFrozenColumns() ? canvasWidthR += extraWidth : canvasWidthL += extraWidth);
+ }
+ return totalRowWidth;
+ }
+ function updateCanvasWidth(forceColumnWidthsUpdate) {
+ var oldCanvasWidth = canvasWidth, oldCanvasWidthL = canvasWidthL, oldCanvasWidthR = canvasWidthR, widthChanged;
+ if (canvasWidth = getCanvasWidth(), widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR, widthChanged || hasFrozenColumns() || hasFrozenRows)
+ if (Utils5.width(_canvasTopL, canvasWidthL), getHeadersWidth(), Utils5.width(_headerL, headersWidthL), Utils5.width(_headerR, headersWidthR), hasFrozenColumns()) {
+ let cWidth = Utils5.width(_container) || 0;
+ if (cWidth > 0 && canvasWidthL > cWidth)
+ throw new Error("[SlickGrid] Frozen columns cannot be wider than the actual grid container width. Make sure to have less columns freezed or make your grid container wider");
+ Utils5.width(_canvasTopR, canvasWidthR), Utils5.width(_paneHeaderL, canvasWidthL), Utils5.setStyleSize(_paneHeaderR, "left", canvasWidthL), Utils5.setStyleSize(_paneHeaderR, "width", viewportW - canvasWidthL), Utils5.width(_paneTopL, canvasWidthL), Utils5.setStyleSize(_paneTopR, "left", canvasWidthL), Utils5.width(_paneTopR, viewportW - canvasWidthL), Utils5.width(_headerRowScrollerL, canvasWidthL), Utils5.width(_headerRowScrollerR, viewportW - canvasWidthL), Utils5.width(_headerRowL, canvasWidthL), Utils5.width(_headerRowR, canvasWidthR), options.createFooterRow && (Utils5.width(_footerRowScrollerL, canvasWidthL), Utils5.width(_footerRowScrollerR, viewportW - canvasWidthL), Utils5.width(_footerRowL, canvasWidthL), Utils5.width(_footerRowR, canvasWidthR)), options.createPreHeaderPanel && Utils5.width(_preHeaderPanel, canvasWidth), Utils5.width(_viewportTopL, canvasWidthL), Utils5.width(_viewportTopR, viewportW - canvasWidthL), hasFrozenRows && (Utils5.width(_paneBottomL, canvasWidthL), Utils5.setStyleSize(_paneBottomR, "left", canvasWidthL), Utils5.width(_viewportBottomL, canvasWidthL), Utils5.width(_viewportBottomR, viewportW - canvasWidthL), Utils5.width(_canvasBottomL, canvasWidthL), Utils5.width(_canvasBottomR, canvasWidthR));
+ } else
+ Utils5.width(_paneHeaderL, "100%"), Utils5.width(_paneTopL, "100%"), Utils5.width(_headerRowScrollerL, "100%"), Utils5.width(_headerRowL, canvasWidth), options.createFooterRow && (Utils5.width(_footerRowScrollerL, "100%"), Utils5.width(_footerRowL, canvasWidth)), options.createPreHeaderPanel && Utils5.width(_preHeaderPanel, canvasWidth), Utils5.width(_viewportTopL, "100%"), hasFrozenRows && (Utils5.width(_viewportBottomL, "100%"), Utils5.width(_canvasBottomL, canvasWidthL));
+ viewportHasHScroll = canvasWidth >= viewportW - scrollbarDimensions.width, Utils5.width(_headerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils5.width(_headerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), options.createFooterRow && (Utils5.width(_footerRowSpacerL, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0)), Utils5.width(_footerRowSpacerR, canvasWidth + (viewportHasVScroll ? scrollbarDimensions.width : 0))), (widthChanged || forceColumnWidthsUpdate) && applyColumnWidths();
+ }
+ function disableSelection(target) {
+ target.forEach(function(el) {
+ el.setAttribute("unselectable", "on"), el.style.MozUserSelect = "none", _bindingEventService.bind(el, "selectstart.ui", function() {
+ return !1;
+ });
+ });
+ }
+ function getMaxSupportedCssHeight() {
+ let supportedHeight = 1e6, testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? options.ffMaxSupportedCssHeight : options.maxSupportedCssHeight, div = Utils5.createDomElement("div", { style: { display: "hidden" } }, document.body);
+ for (; ; ) {
+ let test = supportedHeight * 2;
+ Utils5.height(div, test);
+ let height2 = Utils5.height(div);
+ if (test > testUpTo || height2 !== test)
+ break;
+ supportedHeight = test;
+ }
+ return div.remove(), supportedHeight;
+ }
+ function getUID() {
+ return uid;
+ }
+ function getHeaderColumnWidthDiff() {
+ return headerColumnWidthDiff;
+ }
+ function getScrollbarDimensions() {
+ return scrollbarDimensions;
+ }
+ function getDisplayedScrollbarDimensions() {
+ return {
+ width: viewportHasVScroll ? scrollbarDimensions.width : 0,
+ height: viewportHasHScroll ? scrollbarDimensions.height : 0
+ };
+ }
+ function getAbsoluteColumnMinWidth() {
+ return absoluteColumnMinWidth;
+ }
+ function bindAncestorScrollEvents() {
+ for (var elem = hasFrozenRows && !options.frozenBottom ? _canvasBottomL : _canvasTopL; (elem = elem.parentNode) != document.body && elem != null; )
+ (elem == _viewportTopL || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) && (_boundAncestors.push(elem), _bindingEventService.bind(elem, "scroll." + uid, handleActiveCellPositionChange));
+ }
+ function unbindAncestorScrollEvents() {
+ _boundAncestors.forEach(function(ancestor) {
+ _bindingEventService.unbindByEventName(ancestor, "scroll." + uid);
+ }), _boundAncestors = [];
+ }
+ function updateColumnHeader(columnId, title, toolTip) {
+ if (initialized) {
+ var idx = getColumnIndex(columnId);
+ if (idx != null) {
+ var columnDef = columns[idx], header = getColumnByIndex(idx);
+ header && (title !== void 0 && (columns[idx].name = title), toolTip !== void 0 && (columns[idx].toolTip = toolTip), trigger(self.onBeforeHeaderCellDestroy, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }), header.setAttribute("title", toolTip || ""), title !== void 0 && (header.children[0].innerHTML = sanitizeHtmlString(title)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: columnDef,
+ grid: self
+ }));
+ }
+ }
+ }
+ function getHeader(columnDef) {
+ if (!columnDef)
+ return hasFrozenColumns() ? _headers : _headerL;
+ var idx = getColumnIndex(columnDef.id);
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL;
+ }
+ function getHeaderColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), targetHeader = hasFrozenColumns() ? idx <= options.frozenColumn ? _headerL : _headerR : _headerL, targetIndex = hasFrozenColumns() ? idx <= options.frozenColumn ? idx : idx - options.frozenColumn - 1 : idx;
+ return targetHeader.children[targetIndex];
+ }
+ function getHeaderRow() {
+ return hasFrozenColumns() ? _headerRows : _headerRows[0];
+ }
+ function getFooterRow() {
+ return hasFrozenColumns() ? _footerRow : _footerRow[0];
+ }
+ function getPreHeaderPanel() {
+ return _preHeaderPanel;
+ }
+ function getPreHeaderPanelRight() {
+ return _preHeaderPanelR;
+ }
+ function getHeaderRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), headerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? headerRowTarget = _headerRowL : (headerRowTarget = _headerRowR, idx -= options.frozenColumn + 1) : headerRowTarget = _headerRowL, headerRowTarget.children[idx];
+ }
+ function getFooterRowColumn(columnIdOrIdx) {
+ var idx = typeof columnIdOrIdx == "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx), footerRowTarget;
+ return hasFrozenColumns() ? idx <= options.frozenColumn ? footerRowTarget = _footerRowL : (footerRowTarget = _footerRowR, idx -= options.frozenColumn + 1) : footerRowTarget = _footerRowL, footerRowTarget.children[idx];
+ }
+ function createColumnFooter() {
+ if (options.createFooterRow) {
+ _footerRow.forEach(function(footer) {
+ footer.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ let columnDef = Utils5.storage.get(column, "column");
+ trigger(self.onBeforeFooterRowCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _footerRowL.replaceChildren(), _footerRowR.replaceChildren();
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ var m = columns[i2];
+ if (!m || m.hidden)
+ continue;
+ let footerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, hasFrozenColumns() && i2 > options.frozenColumn ? _footerRowR : _footerRowL), className = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ className && footerRowCell.classList.add(className), Utils5.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ }
+ function handleHeaderMouseHoverOn(e) {
+ e.target.classList.add("ui-state-hover", "slick-state-hover");
+ }
+ function handleHeaderMouseHoverOff(e) {
+ e.target.classList.remove("ui-state-hover", "slick-state-hover");
+ }
+ function createColumnHeaders() {
+ _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderCellDestroy, {
+ node: column,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerL.replaceChildren(), _headerR.replaceChildren(), getHeadersWidth(), Utils5.width(_headerL, headersWidthL), Utils5.width(_headerR, headersWidthR), _headerRows.forEach(function(row) {
+ row.querySelectorAll(".slick-headerrow-column").forEach(function(column) {
+ let columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeHeaderRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ });
+ }), _headerRowL.replaceChildren(), _headerRowR.replaceChildren(), options.createFooterRow && (_footerRowL.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowL.replaceChildren(), hasFrozenColumns() && (_footerRowR.querySelectorAll(".slick-footerrow-column").forEach(function(column) {
+ var columnDef = Utils5.storage.get(column, "column");
+ columnDef && trigger(self.onBeforeFooterRowCellDestroy, {
+ node: this,
+ column: columnDef,
+ grid: self
+ });
+ }), _footerRowR.replaceChildren()));
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ let m = columns[i2], headerTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerL : _headerR : _headerL, headerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _headerRowL : _headerRowR : _headerRowL, header = Utils5.createDomElement("div", { id: `${uid + m.id}`, dataset: { id: m.id }, className: "ui-state-default slick-state-default slick-header-column", title: m.toolTip || "" }, headerTarget);
+ Utils5.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(m.name) }, header), Utils5.width(header, m.width - headerColumnWidthDiff);
+ let classname = m.headerCssClass || null;
+ if (classname && header.classList.add(classname), classname = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null, classname && header.classList.add(classname), _bindingEventService.bind(header, "mouseenter", handleHeaderMouseEnter), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseLeave), Utils5.storage.put(header, "column", m), (options.enableColumnReorder || m.sortable) && (_bindingEventService.bind(header, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.bind(header, "mouseleave", handleHeaderMouseHoverOff)), m.hasOwnProperty("headerCellAttrs") && m.headerCellAttrs instanceof Object)
+ for (var key in m.headerCellAttrs)
+ m.headerCellAttrs.hasOwnProperty(key) && header.setAttribute(key, m.headerCellAttrs[key]);
+ if (m.sortable && (header.classList.add("slick-header-sortable"), Utils5.createDomElement("div", { className: `slick-sort-indicator ${options.numberedMultiColumnSort && !options.sortColNumberInSeparateSpan ? " slick-sort-indicator-numbered" : ""}` }, header), options.numberedMultiColumnSort && options.sortColNumberInSeparateSpan && Utils5.createDomElement("div", { className: "slick-sort-indicator-numbered" }, header)), trigger(self.onHeaderCellRendered, {
+ node: header,
+ column: m,
+ grid: self
+ }), options.showHeaderRow) {
+ let headerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-headerrow-column l${i2} r${i2}` }, headerRowTarget), classname2 = hasFrozenColumns() && i2 <= options.frozenColumn ? "frozen" : null;
+ classname2 && headerRowCell.classList.add(classname2), _bindingEventService.bind(headerRowCell, "mouseenter", handleHeaderRowMouseEnter), _bindingEventService.bind(headerRowCell, "mouseleave", handleHeaderRowMouseLeave), Utils5.storage.put(headerRowCell, "column", m), trigger(self.onHeaderRowCellRendered, {
+ node: headerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ if (options.createFooterRow && options.showFooterRow) {
+ let footerRowTarget = hasFrozenColumns() ? i2 <= options.frozenColumn ? _footerRow[0] : _footerRow[1] : _footerRow[0], footerRowCell = Utils5.createDomElement("div", { className: `ui-state-default slick-state-default slick-footerrow-column l${i2} r${i2}` }, footerRowTarget);
+ Utils5.storage.put(footerRowCell, "column", m), trigger(self.onFooterRowCellRendered, {
+ node: footerRowCell,
+ column: m,
+ grid: self
+ });
+ }
+ }
+ setSortColumns(sortColumns), setupColumnResize(), options.enableColumnReorder && (typeof options.enableColumnReorder == "function" ? options.enableColumnReorder(self, _headers, headerColumnWidthDiff, setColumns, setupColumnResize, columns, getColumnIndex, uid, trigger) : setupColumnReorder());
+ }
+ function setupColumnSort() {
+ _headers.forEach(function(header) {
+ _bindingEventService.bind(header, "click", function(e) {
+ if (!columnResizeDragging && !e.target.classList.contains("slick-resizable-handle")) {
+ var coll = e.target.closest(".slick-header-column");
+ if (coll) {
+ var column = Utils5.storage.get(coll, "column");
+ if (column.sortable) {
+ if (!getEditorLock().commitCurrentEdit())
+ return;
+ for (var previousSortColumns = sortColumns.slice(), sortColumn = null, i2 = 0; i2 < sortColumns.length; i2++)
+ if (sortColumns[i2].columnId == column.id) {
+ sortColumn = sortColumns[i2], sortColumn.sortAsc = !sortColumn.sortAsc;
+ break;
+ }
+ var hadSortCol = !!sortColumn;
+ options.tristateMultiColumnSort ? (sortColumn || (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }), hadSortCol && sortColumn.sortAsc && (sortColumns.splice(i2, 1), sortColumn = null), options.multiColumnSort || (sortColumns = []), sortColumn && (!hadSortCol || !options.multiColumnSort) && sortColumns.push(sortColumn)) : e.metaKey && options.multiColumnSort ? sortColumn && sortColumns.splice(i2, 1) : ((!e.shiftKey && !e.metaKey || !options.multiColumnSort) && (sortColumns = []), sortColumn ? sortColumns.length === 0 && sortColumns.push(sortColumn) : (sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc }, sortColumns.push(sortColumn)));
+ var onSortArgs;
+ options.multiColumnSort ? onSortArgs = {
+ multiColumnSort: !0,
+ previousSortColumns,
+ sortCols: sortColumns.map(function(col) {
+ return { columnId: columns[getColumnIndex(col.columnId)].id, sortCol: columns[getColumnIndex(col.columnId)], sortAsc: col.sortAsc };
+ })
+ } : onSortArgs = {
+ multiColumnSort: !1,
+ previousSortColumns,
+ columnId: sortColumns.length > 0 ? column.id : null,
+ sortCol: sortColumns.length > 0 ? column : null,
+ sortAsc: sortColumns.length > 0 ? sortColumns[0].sortAsc : !0
+ }, trigger(self.onBeforeSort, onSortArgs, e).getReturnValue() !== !1 && (setSortColumns(sortColumns), trigger(self.onSort, onSortArgs, e));
+ }
+ }
+ }
+ });
+ });
+ }
+ function currentPositionInHeader(id) {
+ let currentPosition = 0;
+ return _headers.forEach(function(header) {
+ header.querySelectorAll(".slick-header-column").forEach(function(column) {
+ column.id == id && (currentPosition = i);
+ });
+ }), currentPosition;
+ }
+ function remove(arr, elem) {
+ var index = arr.lastIndexOf(elem);
+ index > -1 && (arr.splice(index, 1), remove(arr, elem));
+ }
+ function setupColumnReorder() {
+ sortableSideLeftInstance && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy());
+ var columnScrollTimer = null;
+ function scrollColumnsRight() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft + 10;
+ }
+ function scrollColumnsLeft() {
+ _viewportScrollContainerX.scrollLeft = _viewportScrollContainerX.scrollLeft - 10;
+ }
+ var canDragScroll, sortableOptions = {
+ animation: 50,
+ direction: "horizontal",
+ chosenClass: "slick-header-column-active",
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dragoverBubble: !1,
+ revertClone: !0,
+ scroll: !hasFrozenColumns(),
+ // enable auto-scroll
+ onStart: function(e) {
+ canDragScroll = !hasFrozenColumns() || Utils5.offset(e.item).left > Utils5.offset(_viewportScrollContainerX).left, canDragScroll && e.originalEvent.pageX > _container.clientWidth ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsRight, 100)) : canDragScroll && e.originalEvent.pageX < Utils5.offset(_viewportScrollContainerX).left ? columnScrollTimer || (columnScrollTimer = setInterval(scrollColumnsLeft, 100)) : (clearInterval(columnScrollTimer), columnScrollTimer = null);
+ },
+ onEnd: function(e) {
+ var cancel = !1;
+ clearInterval(columnScrollTimer), columnScrollTimer = null;
+ var limit = null;
+ if (!(cancel || !getEditorLock().commitCurrentEdit())) {
+ var reorderedIds = sortableSideLeftInstance.toArray();
+ reorderedIds = reorderedIds.concat(sortableSideRightInstance.toArray());
+ for (var reorderedColumns = [], i2 = 0; i2 < reorderedIds.length; i2++)
+ reorderedColumns.push(columns[getColumnIndex(reorderedIds[i2])]);
+ setColumns(reorderedColumns), trigger(self.onColumnsReordered, { impactedColumns: getImpactedColumns(limit) }), e.stopPropagation(), setupColumnResize();
+ }
+ }
+ };
+ sortableSideLeftInstance = Sortable.create(_headerL, sortableOptions), sortableSideRightInstance = Sortable.create(_headerR, sortableOptions);
+ }
+ function getHeaderChildren() {
+ let a = Array.from(_headers[0].children), b = Array.from(_headers[1].children);
+ return a.concat(b);
+ }
+ function getImpactedColumns(limit) {
+ var impactedColumns = [];
+ if (limit)
+ for (var i2 = limit.start; i2 <= limit.end; i2++)
+ impactedColumns.push(columns[i2]);
+ else
+ impactedColumns = columns;
+ return impactedColumns;
+ }
+ function handleResizeableHandleDoubleClick(evt) {
+ let triggeredByColumn = evt.target.parentElement.id.replace(uid, "");
+ trigger(self.onColumnsResizeDblClick, { triggeredByColumn });
+ }
+ function setupColumnResize() {
+ if (typeof Resizable2 > "u")
+ throw new Error('Slick.Resizable is undefined, make sure to import "slick.interactions.js"');
+ var j, k, c, pageX, minPageX, maxPageX, firstResizable, lastResizable, frozenLeftColMaxWidth = 0;
+ let children = getHeaderChildren();
+ for (let i2 = 0; i2 < children.length; i2++)
+ children[i2].querySelectorAll(".slick-resizable-handle").forEach(function(handle) {
+ handle.remove();
+ }), !(i2 >= columns.length || !columns[i2] || columns[i2].hidden) && columns[i2].resizable && (firstResizable === void 0 && (firstResizable = i2), lastResizable = i2);
+ if (firstResizable !== void 0)
+ for (let i2 = 0; i2 < children.length; i2++) {
+ let colElm = children[i2];
+ if (i2 >= columns.length || !columns[i2] || columns[i2].hidden || i2 < firstResizable || options.forceFitColumns && i2 >= lastResizable)
+ continue;
+ let resizeableHandle = Utils5.createDomElement("div", { className: "slick-resizable-handle", role: "separator", ariaOrientation: "horizontal" }, colElm);
+ _bindingEventService.bind(resizeableHandle, "dblclick", handleResizeableHandleDoubleClick), slickResizableInstances.push(
+ Resizable2({
+ resizeableElement: colElm,
+ resizeableHandleElement: resizeableHandle,
+ onResizeStart: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ if (!getEditorLock().commitCurrentEdit())
+ return !1;
+ pageX = targetEvent.pageX, frozenLeftColMaxWidth = 0, resizeElms.resizeableElement.classList.add("slick-header-column-active");
+ var shrinkLeewayOnRight = null, stretchLeewayOnRight = null;
+ for (let pw = 0; pw < children.length; pw++)
+ pw >= columns.length || !columns[pw] || columns[pw].hidden || (columns[pw].previousWidth = children[pw].offsetWidth);
+ if (options.forceFitColumns)
+ for (shrinkLeewayOnRight = 0, stretchLeewayOnRight = 0, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnRight !== null && (c.maxWidth ? stretchLeewayOnRight += c.maxWidth - c.previousWidth : stretchLeewayOnRight = null), shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;
+ for (j = 0; j <= i2; j++)
+ c = columns[j], c && c.resizable && !c.hidden && (stretchLeewayOnLeft !== null && (c.maxWidth ? stretchLeewayOnLeft += c.maxWidth - c.previousWidth : stretchLeewayOnLeft = null), shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColumnMinWidth));
+ shrinkLeewayOnRight === null && (shrinkLeewayOnRight = 1e5), shrinkLeewayOnLeft === null && (shrinkLeewayOnLeft = 1e5), stretchLeewayOnRight === null && (stretchLeewayOnRight = 1e5), stretchLeewayOnLeft === null && (stretchLeewayOnLeft = 1e5), maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft), minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);
+ },
+ onResize: function(e, resizeElms) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ columnResizeDragging = !0;
+ var actualMinWidth, d = Math.min(maxPageX, Math.max(minPageX, targetEvent.pageX)) - pageX, x, newCanvasWidthL = 0, newCanvasWidthR = 0, viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ if (d < 0) {
+ for (x = d, j = i2; j >= 0; j--)
+ c = columns[j], c && c.resizable && !c.hidden && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0));
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (x && c.maxWidth && c.maxWidth - c.previousWidth < x ? (x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth) : (c.width = c.previousWidth + x, x = 0));
+ } else {
+ for (x = d, newCanvasWidthL = 0, newCanvasWidthR = 0, j = i2; j >= 0; j--)
+ if (c = columns[j], !(!c || c.hidden) && c.resizable)
+ if (x && c.maxWidth && c.maxWidth - c.previousWidth < x)
+ x -= c.maxWidth - c.previousWidth, c.width = c.maxWidth;
+ else {
+ var newWidth = c.previousWidth + x, resizedCanvasWidthL = canvasWidthL + x;
+ hasFrozenColumns() && j <= options.frozenColumn ? (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < viewportWidth - options.frozenRightViewportMinWidth && (frozenLeftColMaxWidth = newWidth), c.width = resizedCanvasWidthL + options.frozenRightViewportMinWidth > viewportWidth ? frozenLeftColMaxWidth : newWidth) : c.width = newWidth, x = 0;
+ }
+ for (k = 0; k <= i2; k++)
+ c = columns[k], !(!c || c.hidden) && (hasFrozenColumns() && k > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ if (options.forceFitColumns)
+ for (x = -d, j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && c.resizable && (actualMinWidth = Math.max(c.minWidth || 0, absoluteColumnMinWidth), x && c.previousWidth + x < actualMinWidth ? (x += c.previousWidth - actualMinWidth, c.width = actualMinWidth) : (c.width = c.previousWidth + x, x = 0), hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ else
+ for (j = i2 + 1; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (hasFrozenColumns() && j > options.frozenColumn ? newCanvasWidthR += c.width : newCanvasWidthL += c.width);
+ }
+ hasFrozenColumns() && newCanvasWidthL != canvasWidthL && (Utils5.width(_headerL, newCanvasWidthL + 1e3), Utils5.setStyleSize(_paneHeaderR, "left", newCanvasWidthL)), applyColumnHeaderWidths(), options.syncColumnCellResize && applyColumnWidths(), trigger(self.onColumnsDrag, {
+ triggeredByColumn: resizeElms.resizeableElement,
+ resizeHandle: resizeElms.resizeableHandleElement
+ });
+ },
+ onResizeEnd: function(e, resizeElms) {
+ resizeElms.resizeableElement.classList.remove("slick-header-column-active");
+ var triggeredByColumn = resizeElms.resizeableElement.id.replace(uid, "");
+ trigger(self.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === !0 && applyColumnHeaderWidths();
+ var newWidth;
+ for (j = 0; j < columns.length; j++)
+ c = columns[j], !(!c || c.hidden) && (newWidth = children[j].offsetWidth, c.previousWidth !== newWidth && c.rerenderOnResize && invalidateAllRows());
+ updateCanvasWidth(!0), render(), trigger(self.onColumnsResized, { triggeredByColumn }), setTimeout(function() {
+ columnResizeDragging = !1;
+ }, 300);
+ }
+ })
+ );
+ }
+ }
+ function getVBoxDelta(el) {
+ var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], styles = getComputedStyle(el), delta = 0;
+ return p.forEach(function(val) {
+ delta += Utils5.toFloat(styles[val]);
+ }), delta;
+ }
+ function setFrozenOptions() {
+ if (options.frozenColumn = options.frozenColumn >= 0 && options.frozenColumn < columns.length ? parseInt(options.frozenColumn) : -1, options.frozenRow > -1) {
+ hasFrozenRows = !0, frozenRowsHeight = options.frozenRow * options.rowHeight;
+ var dataLength = getDataLength();
+ actualFrozenRow = options.frozenBottom ? dataLength - options.frozenRow : options.frozenRow;
+ } else
+ hasFrozenRows = !1;
+ }
+ function setPaneVisibility() {
+ hasFrozenColumns() ? (show2(_paneHeaderR), show2(_paneTopR), hasFrozenRows ? (show2(_paneBottomL), show2(_paneBottomR)) : (hide2(_paneBottomR), hide2(_paneBottomL))) : (hide2(_paneHeaderR), hide2(_paneTopR), hide2(_paneBottomR), hasFrozenRows ? show2(_paneBottomL) : (hide2(_paneBottomR), hide2(_paneBottomL)));
+ }
+ function setOverflow() {
+ _viewportTopL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportTopR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "scroll" : hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "hidden" : "auto", _viewportTopR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), hasFrozenRows ? "scroll" : "auto"), _viewportBottomL.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomL.style["overflow-y"] = !hasFrozenColumns() && options.alwaysShowVerticalScroll ? "scroll" : hasFrozenColumns() ? "hidden" : hasFrozenRows ? "scroll" : "auto", _viewportBottomR.style["overflow-x"] = hasFrozenColumns() ? hasFrozenRows && !options.alwaysAllowHorizontalScroll ? "scroll" : "auto" : (hasFrozenRows && !options.alwaysAllowHorizontalScroll, "auto"), _viewportBottomR.style["overflow-y"] = options.alwaysShowVerticalScroll ? "scroll" : (hasFrozenColumns(), "auto"), options.viewportClass && (_viewportTopL.classList.add(options.viewportClass), _viewportTopR.classList.add(options.viewportClass), _viewportBottomL.classList.add(options.viewportClass), _viewportBottomR.classList.add(options.viewportClass));
+ }
+ function setScroller() {
+ hasFrozenColumns() ? (_headerScrollContainer = _headerScrollerR, _headerRowScrollContainer = _headerRowScrollerR, _footerRowScrollContainer = _footerRowScrollerR, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomR, _viewportScrollContainerY = _viewportTopR) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomR : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopR) : (_headerScrollContainer = _headerScrollerL, _headerRowScrollContainer = _headerRowScrollerL, _footerRowScrollContainer = _footerRowScrollerL, hasFrozenRows ? options.frozenBottom ? (_viewportScrollContainerX = _viewportBottomL, _viewportScrollContainerY = _viewportTopL) : _viewportScrollContainerX = _viewportScrollContainerY = _viewportBottomL : _viewportScrollContainerX = _viewportScrollContainerY = _viewportTopL);
+ }
+ function measureCellPaddingAndBorder() {
+ let h2 = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], header = _headers[0];
+ headerColumnWidthDiff = headerColumnHeightDiff = 0, cellWidthDiff = cellHeightDiff = 0;
+ let el = Utils5.createDomElement("div", { className: "ui-state-default slick-state-default slick-header-column", style: { visibility: "hidden" }, textContent: "-" }, header), style = getComputedStyle(el);
+ style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ headerColumnWidthDiff += Utils5.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ headerColumnHeightDiff += Utils5.toFloat(style[val]);
+ })), el.remove();
+ let r = Utils5.createDomElement("div", { className: "slick-row" }, _canvas[0]);
+ el = Utils5.createDomElement("div", { className: "slick-cell", id: "", style: { visibility: "hidden", textContent: "-" } }, r), style = getComputedStyle(el), style["box-sizing"] != "border-box" && style["-moz-box-sizing"] != "border-box" && style["-webkit-box-sizing"] != "border-box" && (h2.forEach(function(val) {
+ cellWidthDiff += Utils5.toFloat(style[val]);
+ }), v.forEach(function(val) {
+ cellHeightDiff += Utils5.toFloat(style[val]);
+ })), r.remove(), absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
+ }
+ function createCssRules() {
+ _style = Utils5.createDomElement("template", { innerHTML: '' }).content.firstChild, document.head.appendChild(_style);
+ for (var rowHeight = options.rowHeight - cellHeightDiff, rules = [
+ "." + uid + " .slick-group-header-column { left: 1000px; }",
+ "." + uid + " .slick-header-column { left: 1000px; }",
+ "." + uid + " .slick-top-panel { height:" + options.topPanelHeight + "px; }",
+ "." + uid + " .slick-preheader-panel { height:" + options.preHeaderPanelHeight + "px; }",
+ "." + uid + " .slick-headerrow-columns { height:" + options.headerRowHeight + "px; }",
+ "." + uid + " .slick-footerrow-columns { height:" + options.footerRowHeight + "px; }",
+ "." + uid + " .slick-cell { height:" + rowHeight + "px; }",
+ "." + uid + " .slick-row { height:" + options.rowHeight + "px; }"
+ ], i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (rules.push("." + uid + " .l" + i2 + " { }"), rules.push("." + uid + " .r" + i2 + " { }"));
+ _style.styleSheet ? _style.styleSheet.cssText = rules.join(" ") : _style.appendChild(document.createTextNode(rules.join(" ")));
+ }
+ function getColumnCssRules(idx) {
+ var i2;
+ if (!stylesheet) {
+ var sheets = document.styleSheets;
+ for (i2 = 0; i2 < sheets.length; i2++)
+ if ((sheets[i2].ownerNode || sheets[i2].owningElement) == _style) {
+ stylesheet = sheets[i2];
+ break;
+ }
+ if (!stylesheet)
+ throw new Error("SlickGrid Cannot find stylesheet.");
+ columnCssRulesL = [], columnCssRulesR = [];
+ var cssRules = stylesheet.cssRules || stylesheet.rules, matches, columnIdx;
+ for (i2 = 0; i2 < cssRules.length; i2++) {
+ var selector = cssRules[i2].selectorText;
+ (matches = /\.l\d+/.exec(selector)) ? (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesL[columnIdx] = cssRules[i2]) : (matches = /\.r\d+/.exec(selector)) && (columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10), columnCssRulesR[columnIdx] = cssRules[i2]);
+ }
+ }
+ return {
+ left: columnCssRulesL[idx],
+ right: columnCssRulesR[idx]
+ };
+ }
+ function removeCssRules() {
+ _style.remove(), stylesheet = null;
+ }
+ function destroy(shouldDestroyAllElements) {
+ _bindingEventService.unbindAll(), slickDraggableInstance = destroyAllInstances(slickDraggableInstance), slickMouseWheelInstances = destroyAllInstances(slickMouseWheelInstances), slickResizableInstances = destroyAllInstances(slickResizableInstances), getEditorLock().cancelCurrentEdit(), trigger(self.onBeforeDestroy, {});
+ for (var i2 = plugins.length; i2--; )
+ unregisterPlugin(plugins[i2]);
+ options.enableColumnReorder && sortableSideLeftInstance && typeof sortableSideLeftInstance.destroy == "function" && (sortableSideLeftInstance.destroy(), sortableSideRightInstance.destroy()), unbindAncestorScrollEvents(), _bindingEventService.unbindByEventName(_container, "resize.slickgrid", resizeCanvas), removeCssRules(), _canvas.forEach(function(element) {
+ _bindingEventService.unbindByEventName(element, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(element, "click", handleClick), _bindingEventService.unbindByEventName(element, "dblclick", handleDblClick), _bindingEventService.unbindByEventName(element, "contextmenu", handleContextMenu), _bindingEventService.unbindByEventName(element, "mouseover", handleCellMouseOver), _bindingEventService.unbindByEventName(element, "mouseout", handleCellMouseOut);
+ }), _viewport.forEach(function(view) {
+ _bindingEventService.unbindByEventName(view, "scroll", handleScroll);
+ }), _headerScroller.forEach(function(el) {
+ _bindingEventService.unbindByEventName(el, "contextmenu", handleHeaderContextMenu), _bindingEventService.unbindByEventName(el, "click", handleHeaderClick);
+ }), _headerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleHeaderRowScroll);
+ }), _footerRow && _footerRow.forEach(function(footer) {
+ _bindingEventService.unbindByEventName(footer, "contextmenu", handleFooterContextMenu), _bindingEventService.unbindByEventName(footer, "click", handleFooterClick);
+ }), _footerRowScroller && _footerRowScroller.forEach(function(scroller) {
+ _bindingEventService.unbindByEventName(scroller, "scroll", handleFooterRowScroll);
+ }), _preHeaderPanelScroller && _bindingEventService.unbindByEventName(_preHeaderPanelScroller, "scroll", handlePreHeaderPanelScroll), _bindingEventService.unbindByEventName(_focusSink, "keydown", handleKeyDown), _bindingEventService.unbindByEventName(_focusSink2, "keydown", handleKeyDown);
+ let resizeHandles = _container.querySelectorAll(".slick-resizable-handle");
+ [].forEach.call(resizeHandles, function(handle) {
+ _bindingEventService.unbindByEventName(handle, "dblclick", handleResizeableHandleDoubleClick);
+ });
+ let headerColumns = _container.querySelectorAll(".slick-header-column");
+ [].forEach.call(headerColumns, function(column) {
+ _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseEnter), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseLeave), _bindingEventService.unbindByEventName(column, "mouseenter", handleHeaderMouseHoverOn), _bindingEventService.unbindByEventName(column, "mouseleave", handleHeaderMouseHoverOff);
+ }), _container.replaceChildren(), _container.classList.remove(uid), shouldDestroyAllElements && destroyAllElements();
+ }
+ function destroyAllInstances(inputInstances) {
+ if (inputInstances) {
+ let instances = Array.isArray(inputInstances) ? inputInstances : [inputInstances], instance;
+ for (; (instance = instances.pop()) != null; )
+ instance && typeof instance.destroy == "function" && instance.destroy();
+ }
+ return inputInstances = Array.isArray(inputInstances) ? [] : null, inputInstances;
+ }
+ function destroyAllElements() {
+ _activeCanvasNode = null, _activeViewportNode = null, _boundAncestors = null, _canvas = null, _canvasTopL = null, _canvasTopR = null, _canvasBottomL = null, _canvasBottomR = null, _container = null, _focusSink = null, _focusSink2 = null, _groupHeaders = null, _groupHeadersL = null, _groupHeadersR = null, _headerL = null, _headerR = null, _headers = null, _headerRows = null, _headerRowL = null, _headerRowR = null, _headerRowSpacerL = null, _headerRowSpacerR = null, _headerRowScrollContainer = null, _headerRowScroller = null, _headerRowScrollerL = null, _headerRowScrollerR = null, _headerScrollContainer = null, _headerScroller = null, _headerScrollerL = null, _headerScrollerR = null, _hiddenParents = null, _footerRow = null, _footerRowL = null, _footerRowR = null, _footerRowSpacerL = null, _footerRowSpacerR = null, _footerRowScroller = null, _footerRowScrollerL = null, _footerRowScrollerR = null, _footerRowScrollContainer = null, _preHeaderPanel = null, _preHeaderPanelR = null, _preHeaderPanelScroller = null, _preHeaderPanelScrollerR = null, _preHeaderPanelSpacer = null, _preHeaderPanelSpacerR = null, _topPanels = null, _topPanelScrollers = null, _style = null, _topPanelScrollerL = null, _topPanelScrollerR = null, _topPanelL = null, _topPanelR = null, _paneHeaderL = null, _paneHeaderR = null, _paneTopL = null, _paneTopR = null, _paneBottomL = null, _paneBottomR = null, _viewport = null, _viewportTopL = null, _viewportTopR = null, _viewportBottomL = null, _viewportBottomR = null, _viewportScrollContainerX = null, _viewportScrollContainerY = null;
+ }
+ var canvas = null, canvas_context = null;
+ function autosizeColumn(columnOrIndexOrId, isInit) {
+ var colDef = null, colIndex = -1;
+ if (typeof columnOrIndexOrId == "number")
+ colDef = columns[columnOrIndexOrId], colIndex = columnOrIndexOrId;
+ else if (typeof columnOrIndexOrId == "string")
+ for (i = 0; i < columns.length; i++)
+ columns[i].Id === columnOrIndexOrId && (colDef = columns[i], colIndex = i);
+ if (!colDef)
+ return;
+ let gridCanvas = getCanvasNode(0, 0);
+ getColAutosizeWidth(colDef, colIndex, gridCanvas, isInit, colIndex);
+ }
+ function treatAsLocked(autoSize) {
+ return !autoSize.ignoreHeaderText && !autoSize.sizeToRemaining && autoSize.contentSizePx === autoSize.headerWidthPx && autoSize.widthPx < 100;
+ }
+ function autosizeColumns(autosizeMode, isInit) {
+ var cssCache = { hiddenParents: null, oldPropArr: [] };
+ cacheCssForHiddenInit(cssCache), internalAutosizeColumns(autosizeMode, isInit), restoreCssFromHiddenInit(cssCache);
+ }
+ function internalAutosizeColumns(autosizeMode, isInit) {
+ if (autosizeMode = autosizeMode || options.autosizeColsMode, autosizeMode === GridAutosizeColsMode2.LegacyForceFit || autosizeMode === GridAutosizeColsMode2.LegacyOff) {
+ legacyAutosizeColumns();
+ return;
+ }
+ if (autosizeMode !== GridAutosizeColsMode2.None) {
+ canvas = document.createElement("canvas"), canvas && canvas.getContext && (canvas_context = canvas.getContext("2d"));
+ var gridCanvas = getCanvasNode(0, 0), viewportWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW, i2, c, colWidth, reRender, totalWidth = 0, totalWidthLessSTR = 0, strColsMinWidth = 0, totalMinWidth = 0, totalLockedColWidth = 0;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], getColAutosizeWidth(c, i2, gridCanvas, isInit, i2), totalLockedColWidth += c.autoSize.autosizeMode === ColAutosizeMode2.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : 0, totalMinWidth += c.autoSize.autosizeMode === ColAutosizeMode2.Locked ? c.width : treatAsLocked(c.autoSize) ? c.autoSize.widthPx : c.minWidth, totalWidth += c.autoSize.widthPx, totalWidthLessSTR += c.autoSize.sizeToRemaining ? 0 : c.autoSize.widthPx, strColsMinWidth += c.autoSize.sizeToRemaining && c.minWidth || 0;
+ var strColTotalGuideWidth = totalWidth - totalWidthLessSTR;
+ if (autosizeMode === GridAutosizeColsMode2.FitViewportToCols) {
+ var setWidth = totalWidth + scrollbarDimensions.width;
+ autosizeMode = GridAutosizeColsMode2.IgnoreViewport, options.viewportMaxWidthPx && setWidth > options.viewportMaxWidthPx ? (setWidth = options.viewportMaxWidthPx, autosizeMode = GridAutosizeColsMode2.FitColsToViewport) : options.viewportMinWidthPx && setWidth < options.viewportMinWidthPx && (setWidth = options.viewportMinWidthPx, autosizeMode = GridAutosizeColsMode2.FitColsToViewport), Utils5.width(_container, setWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode2.FitColsToViewport)
+ if (strColTotalGuideWidth > 0 && totalWidthLessSTR < viewportWidth - strColsMinWidth) {
+ for (i2 = 0; i2 < columns.length; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var totalSTRViewportWidth = viewportWidth - totalWidthLessSTR;
+ c.autoSize.sizeToRemaining ? colWidth = totalSTRViewportWidth * c.autoSize.widthPx / strColTotalGuideWidth : colWidth = c.autoSize.widthPx, c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth;
+ }
+ } else if (options.viewportSwitchToScrollModeWidthPercent && totalWidthLessSTR + strColsMinWidth > viewportWidth * options.viewportSwitchToScrollModeWidthPercent / 100 || totalMinWidth > viewportWidth)
+ autosizeMode = GridAutosizeColsMode2.IgnoreViewport;
+ else {
+ var unallocatedColWidth = totalWidthLessSTR - totalLockedColWidth, unallocatedViewportWidth = viewportWidth - totalLockedColWidth - strColsMinWidth;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (colWidth = c.width, c.autoSize.autosizeMode !== ColAutosizeMode2.Locked && !treatAsLocked(c.autoSize) && (c.autoSize.sizeToRemaining ? colWidth = c.minWidth : (colWidth = unallocatedViewportWidth / unallocatedColWidth * c.autoSize.widthPx - 1, colWidth < c.minWidth && (colWidth = c.minWidth), unallocatedColWidth -= c.autoSize.widthPx, unallocatedViewportWidth -= colWidth)), treatAsLocked(c.autoSize) && (colWidth = c.autoSize.widthPx, colWidth < c.minWidth && (colWidth = c.minWidth)), c.rerenderOnResize && c.width != colWidth && (reRender = !0), c.width = colWidth);
+ }
+ if (autosizeMode === GridAutosizeColsMode2.IgnoreViewport)
+ for (i2 = 0; i2 < columns.length; i2++)
+ !columns[i2] || columns[i2].hidden || (colWidth = columns[i2].autoSize.widthPx, columns[i2].rerenderOnResize && columns[i2].width != colWidth && (reRender = !0), columns[i2].width = colWidth);
+ reRenderColumns(reRender);
+ }
+ }
+ function LogColWidths() {
+ for (var s = "Col Widths:", i2 = 0; i2 < columns.length; i2++)
+ s += " " + (columns[i2].hidden ? "H" : columns[i2].width);
+ console.log(s);
+ }
+ function getColAutosizeWidth(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize;
+ if (autoSize.widthPx = columnDef.width, autoSize.autosizeMode === ColAutosizeMode2.Locked || autoSize.autosizeMode === ColAutosizeMode2.Guide)
+ return;
+ var dl = getDataLength();
+ let isoDateRegExp = new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z/);
+ if (autoSize.autosizeMode === ColAutosizeMode2.ContentIntelligent) {
+ var colDataTypeOf = autoSize.colDataTypeOf, colDataItem;
+ if (dl > 0) {
+ var tempRow = getDataItem(0);
+ tempRow && (colDataItem = tempRow[columnDef.field], isoDateRegExp.test(colDataItem) && (colDataItem = Date.parse(colDataItem)), colDataTypeOf = typeof colDataItem, colDataTypeOf === "object" && (colDataItem instanceof Date && (colDataTypeOf = "date"), typeof moment < "u" && colDataItem instanceof moment && (colDataTypeOf = "moment")));
+ }
+ colDataTypeOf === "boolean" && (autoSize.colValueArray = [!0, !1]), colDataTypeOf === "number" && (autoSize.valueFilterMode = ValueFilterMode2.GetGreatestAndSub, autoSize.rowSelectionMode = RowSelectionMode2.AllRows), colDataTypeOf === "string" && (autoSize.valueFilterMode = ValueFilterMode2.GetLongestText, autoSize.rowSelectionMode = RowSelectionMode2.AllRows, autoSize.allowAddlPercent = 5), colDataTypeOf === "date" && (autoSize.colValueArray = [new Date(2009, 8, 30, 12, 20, 20)]), colDataTypeOf === "moment" && typeof moment < "u" && (autoSize.colValueArray = [moment([2009, 8, 30, 12, 20, 20])]);
+ }
+ var colWidth = autoSize.contentSizePx = getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex);
+ colWidth === 0 && (colWidth = autoSize.widthPx);
+ var addlPercentMultiplier = autoSize.allowAddlPercent ? 1 + autoSize.allowAddlPercent / 100 : 1;
+ colWidth = colWidth * addlPercentMultiplier + options.autosizeColPaddingPx, columnDef.minWidth && colWidth < columnDef.minWidth && (colWidth = columnDef.minWidth), columnDef.maxWidth && colWidth > columnDef.maxWidth && (colWidth = columnDef.maxWidth), (autoSize.autosizeMode === ColAutosizeMode2.ContentExpandOnly || columnDef.editor && columnDef.editor.ControlFillsColumn) && colWidth < columnDef.width && (colWidth = columnDef.width), autoSize.widthPx = colWidth;
+ }
+ function getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex) {
+ var autoSize = columnDef.autoSize, widthAdjustRatio = 1, i2, ii, tempVal, maxLen = 0, maxColWidth = 0;
+ if (autoSize.headerWidthPx = 0, autoSize.ignoreHeaderText || (autoSize.headerWidthPx = getColHeaderWidth(columnDef)), autoSize.headerWidthPx === 0 && (autoSize.headerWidthPx = columnDef.width ? columnDef.width : columnDef.maxWidth ? columnDef.maxWidth : columnDef.minWidth ? columnDef.minWidth : 20), autoSize.colValueArray)
+ return maxColWidth = getColWidth(columnDef, gridCanvas, autoSize.colValueArray), Math.max(autoSize.headerWidthPx, maxColWidth);
+ var rowInfo = {};
+ rowInfo.colIndex = colIndex, rowInfo.rowCount = getDataLength(), rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.rowCount - 1, rowInfo.valueArr = null, rowInfo.getRowVal = function(i3) {
+ return getDataItem(i3)[columnDef.field];
+ };
+ var rowSelectionMode = (isInit ? autoSize.rowSelectionModeOnInit : void 0) || autoSize.rowSelectionMode;
+ if (rowSelectionMode === RowSelectionMode2.FirstRow && (rowInfo.endIndex = 0), rowSelectionMode === RowSelectionMode2.LastRow && (rowInfo.endIndex = rowInfo.startIndex = rowInfo.rowCount - 1), rowSelectionMode === RowSelectionMode2.FirstNRows && (rowInfo.endIndex = Math.min(autoSize.rowSelectionCount, rowInfo.rowCount) - 1), autoSize.valueFilterMode === ValueFilterMode2.DeDuplicate) {
+ var rowsDict = {};
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ rowsDict[rowInfo.getRowVal(i2)] = !0;
+ if (Object.keys)
+ rowInfo.valueArr = Object.keys(rowsDict);
+ else {
+ rowInfo.valueArr = [];
+ for (var v in rowsDict)
+ rowInfo.valueArr.push(v);
+ }
+ rowInfo.startIndex = 0, rowInfo.endIndex = rowInfo.length - 1;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetGreatestAndSub) {
+ var maxVal, maxAbsVal = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), Math.abs(tempVal) > maxAbsVal && (maxVal = tempVal, maxAbsVal = Math.abs(tempVal));
+ maxVal = "" + maxVal, maxVal = Array(maxVal.length + 1).join("9"), maxVal = +maxVal, rowInfo.valueArr = [maxVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetLongestTextAndSub) {
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length);
+ tempVal = Array(maxLen + 1).join("m"), widthAdjustRatio = options.autosizeTextAvgToMWidthRatio, rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ if (autoSize.valueFilterMode === ValueFilterMode2.GetLongestText) {
+ maxLen = 0;
+ var maxIndex = 0;
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ tempVal = rowInfo.getRowVal(i2), (tempVal || "").length > maxLen && (maxLen = tempVal.length, maxIndex = i2);
+ tempVal = rowInfo.getRowVal(maxIndex), rowInfo.maxLen = maxLen, rowInfo.valueArr = [tempVal], rowInfo.startIndex = rowInfo.endIndex = 0;
+ }
+ return rowInfo.maxLen && rowInfo.maxLen > 30 && colArrayIndex > 1 && (autoSize.sizeToRemaining = !0), maxColWidth = getColWidth(columnDef, gridCanvas, rowInfo) * widthAdjustRatio, Math.max(autoSize.headerWidthPx, maxColWidth);
+ }
+ function getColWidth(columnDef, gridCanvas, rowInfo) {
+ let rowEl = Utils5.createDomElement("div", { className: "slick-row ui-widget-content" }, gridCanvas), cellEl = Utils5.createDomElement("div", { className: "slick-cell" }, rowEl);
+ cellEl.style.position = "absolute", cellEl.style.visibility = "hidden", cellEl.style["text-overflow"] = "initial", cellEl.style["white-space"] = "nowrap";
+ var i2, len, max = 0, text, maxText, formatterResult, maxWidth = 0, val, useCanvas = columnDef.autoSize.widthEvalMode === WidthEvalMode2.TextOnly;
+ if (columnDef.autoSize.widthEvalMode === WidthEvalMode2.Auto) {
+ var noFormatter = !columnDef.formatterOverride && !columnDef.formatter, formatterIsText = columnDef.formatterOverride && columnDef.formatterOverride.ReturnsTextOnly || !columnDef.formatterOverride && columnDef.formatter && columnDef.formatter.ReturnsTextOnly;
+ useCanvas = noFormatter || formatterIsText;
+ }
+ if (canvas_context && useCanvas) {
+ let style = getComputedStyle(cellEl);
+ for (canvas_context.font = style["font-size"] + " " + style["font-family"], i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, len = formatterResult ? canvas_context.measureText(formatterResult).width : 0, len > max && (max = len, maxText = formatterResult);
+ return cellEl.innerHTML = maxText, len = cellEl.offsetWidth, rowEl.remove(), len;
+ }
+ for (i2 = rowInfo.startIndex; i2 <= rowInfo.endIndex; i2++)
+ val = rowInfo.valueArr ? rowInfo.valueArr[i2] : rowInfo.getRowVal(i2), columnDef.formatterOverride ? formatterResult = columnDef.formatterOverride(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : columnDef.formatter ? formatterResult = columnDef.formatter(i2, rowInfo.colIndex, val, columnDef, getDataItem(i2), self) : formatterResult = "" + val, applyFormatResultToCellNode(formatterResult, cellEl), len = cellEl.offsetWidth, len > max && (max = len);
+ return rowEl.remove(), max;
+ }
+ function getColHeaderWidth(columnDef) {
+ var width2 = 0, headerColElId = getUID() + columnDef.id, headerColEl = document.getElementById(headerColElId), dummyHeaderColElId = headerColElId + "_";
+ if (headerColEl) {
+ var clone = headerColEl.cloneNode(!0);
+ clone.id = dummyHeaderColElId, clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.parentNode.insertBefore(clone, headerColEl), width2 = clone.offsetWidth, clone.parentNode.removeChild(clone);
+ } else {
+ let header = getHeader(columnDef);
+ headerColEl = Utils5.createDomElement("div", { id: dummyHeaderColElId, className: "ui-state-default slick-state-default slick-header-column" }, header), Utils5.createDomElement("span", { className: "slick-column-name", innerHTML: sanitizeHtmlString(columnDef.name) }, headerColEl), clone.style.cssText = "position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;", headerColEl.classList.add(columnDef.headerCssClass || ""), width2 = headerColEl.offsetWidth, header.removeChild(headerColEl);
+ }
+ return width2;
+ }
+ function legacyAutosizeColumns() {
+ var i2, c, widths = [], shrinkLeeway = 0, total = 0, prevTotal, availWidth = viewportHasVScroll ? viewportW - scrollbarDimensions.width : viewportW;
+ for (i2 = 0; i2 < columns.length; i2++)
+ c = columns[i2], !(!c || c.hidden) && (widths.push(c.width), total += c.width, c.resizable && (shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColumnMinWidth)));
+ for (prevTotal = total; total > availWidth && shrinkLeeway; ) {
+ var shrinkProportion = (total - availWidth) / shrinkLeeway;
+ for (i2 = 0; i2 < columns.length && total > availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var width2 = widths[i2];
+ if (!(!c.resizable || width2 <= c.minWidth || width2 <= absoluteColumnMinWidth)) {
+ var absMinWidth = Math.max(c.minWidth, absoluteColumnMinWidth), shrinkSize = Math.floor(shrinkProportion * (width2 - absMinWidth)) || 1;
+ shrinkSize = Math.min(shrinkSize, width2 - absMinWidth), total -= shrinkSize, shrinkLeeway -= shrinkSize, widths[i2] -= shrinkSize;
+ }
+ }
+ if (prevTotal <= total)
+ break;
+ prevTotal = total;
+ }
+ for (prevTotal = total; total < availWidth; ) {
+ var growProportion = availWidth / total;
+ for (i2 = 0; i2 < columns.length && total < availWidth; i2++)
+ if (c = columns[i2], !(!c || c.hidden)) {
+ var currentWidth = widths[i2], growSize;
+ !c.resizable || c.maxWidth <= currentWidth ? growSize = 0 : growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, c.maxWidth - currentWidth || 1e6) || 1, total += growSize, widths[i2] += total <= availWidth ? growSize : 0;
+ }
+ if (prevTotal >= total)
+ break;
+ prevTotal = total;
+ }
+ var reRender = !1;
+ for (i2 = 0; i2 < columns.length; i2++)
+ !c || c.hidden || (columns[i2].rerenderOnResize && columns[i2].width != widths[i2] && (reRender = !0), columns[i2].width = widths[i2]);
+ reRenderColumns(reRender);
+ }
+ function reRenderColumns(reRender) {
+ applyColumnHeaderWidths(), updateCanvasWidth(!0), trigger(self.onAutosizeColumns, { columns }), reRender && (invalidateAllRows(), render());
+ }
+ function getVisibleColumns() {
+ return columns.filter((c) => !c.hidden);
+ }
+ function trigger(evt, args, e) {
+ return e = e || new EventData3(e, args), args = args || {}, args.grid = self, evt.notify(args, e, self);
+ }
+ function getEditorLock() {
+ return options.editorLock;
+ }
+ function getEditController() {
+ return editController;
+ }
+ function getColumnIndex(id) {
+ return columnsById[id];
+ }
+ function applyColumnHeaderWidths() {
+ if (!initialized)
+ return;
+ let columnIndex = 0, vc = getVisibleColumns();
+ _headers.forEach(function(header) {
+ for (let i2 = 0; i2 < header.children.length; i2++, columnIndex++) {
+ let h2 = header.children[i2], width2 = ((vc[columnIndex] || {}).width || 0) - headerColumnWidthDiff;
+ Utils5.width(h2) !== width2 && Utils5.width(h2, width2);
+ }
+ }), updateColumnCaches();
+ }
+ function applyColumnWidths() {
+ for (var x = 0, w, rule, i2 = 0; i2 < columns.length; i2++)
+ columns[i2] && columns[i2].hidden || (w = columns[i2].width, rule = getColumnCssRules(i2), rule.left.style.left = x + "px", rule.right.style.right = (options.frozenColumn != -1 && i2 > options.frozenColumn ? canvasWidthR : canvasWidthL) - x - w + "px", options.frozenColumn != i2 && (x += columns[i2].width)), options.frozenColumn == i2 && (x = 0);
+ }
+ function setSortColumn(columnId, ascending) {
+ setSortColumns([{ columnId, sortAsc: ascending }]);
+ }
+ function getColumnByIndex(id) {
+ let result = null;
+ return _headers.every(function(header) {
+ let length = header.children.length;
+ return id < length ? (result = header.children[id], !1) : (id -= length, !0);
+ }), result;
+ }
+ function setSortColumns(cols) {
+ sortColumns = cols;
+ let numberCols = options.numberedMultiColumnSort && sortColumns.length > 1;
+ _headers.forEach(function(header) {
+ let indicators = header.querySelectorAll(".slick-header-column-sorted");
+ indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-header-column-sorted");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator"), indicators.forEach(function(indicator) {
+ indicator.classList.remove("slick-sort-indicator-asc"), indicator.classList.remove("slick-sort-indicator-desc");
+ }), indicators = header.querySelectorAll(".slick-sort-indicator-numbered"), indicators.forEach(function(el) {
+ el.textContent = "";
+ });
+ });
+ let i2 = 1;
+ sortColumns.forEach(function(col) {
+ col.sortAsc == null && (col.sortAsc = !0);
+ let columnIndex = getColumnIndex(col.columnId);
+ if (columnIndex != null) {
+ let column = getColumnByIndex(columnIndex);
+ if (column) {
+ column.classList.add("slick-header-column-sorted");
+ let indicator = column.querySelector(".slick-sort-indicator");
+ indicator.classList.add(col.sortAsc ? "slick-sort-indicator-asc" : "slick-sort-indicator-desc"), numberCols && (indicator = column.querySelector(".slick-sort-indicator-numbered"), indicator.textContent = i2);
+ }
+ }
+ i2++;
+ });
+ }
+ function getSortColumns() {
+ return sortColumns;
+ }
+ function handleSelectedRangesChanged(e, ranges) {
+ let ne = e.getNativeEvent();
+ var previousSelectedRows = selectedRows.slice(0);
+ selectedRows = [];
+ for (var hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] || (selectedRows.push(j), hash[j] = {});
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell; k++)
+ canCellBeSelected(j, k) && (hash[j][columns[k].id] = options.selectedCellCssClass);
+ }
+ if (setCellCssStyles(options.selectedCellCssClass, hash), simpleArrayEquals(previousSelectedRows, selectedRows)) {
+ var caller = ne && ne.detail && ne.detail.caller || "click", newSelectedAdditions = getSelectedRows().filter(function(i3) {
+ return previousSelectedRows.indexOf(i3) < 0;
+ }), newSelectedDeletions = previousSelectedRows.filter(function(i3) {
+ return getSelectedRows().indexOf(i3) < 0;
+ });
+ trigger(self.onSelectedRowsChanged, {
+ rows: getSelectedRows(),
+ previousSelectedRows,
+ caller,
+ changedSelectedRows: newSelectedAdditions,
+ changedUnselectedRows: newSelectedDeletions
+ }, e);
+ }
+ }
+ function simpleArrayEquals(arr1, arr2) {
+ return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();
+ }
+ function getColumns() {
+ return columns;
+ }
+ function updateColumnCaches() {
+ columnPosLeft = [], columnPosRight = [];
+ for (var x = 0, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ !columns[i2] || columns[i2].hidden || (columnPosLeft[i2] = x, columnPosRight[i2] = x + columns[i2].width, options.frozenColumn == i2 ? x = 0 : x += columns[i2].width);
+ }
+ function updateColumnProps() {
+ columnsById = {};
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ columns[i2].width && (columns[i2].widthRequest = columns[i2].width);
+ var m = columns[i2] = Utils5.extend({}, columnDefaults, columns[i2]);
+ m.autoSize = Utils5.extend({}, columnAutosizeDefaults, m.autoSize), columnsById[m.id] = i2, m.minWidth && m.width < m.minWidth && (m.width = m.minWidth), m.maxWidth && m.width > m.maxWidth && (m.width = m.maxWidth);
+ }
+ }
+ function setColumns(columnDefinitions) {
+ trigger(self.onBeforeSetColumns, { previousColumns: columns, newColumns: columnDefinitions, grid: self }), columns = columnDefinitions, columns = columnDefinitions, updateColumnsInternal();
+ }
+ function updateColumns() {
+ trigger(self.onBeforeUpdateColumns, { columns, grid: self }), updateColumnsInternal();
+ }
+ function updateColumnsInternal() {
+ updateColumnProps(), updateColumnCaches(), initialized && (setPaneVisibility(), setOverflow(), invalidateAllRows(), createColumnHeaders(), createColumnFooter(), removeCssRules(), createCssRules(), resizeCanvas(), updateCanvasWidth(), applyColumnHeaderWidths(), applyColumnWidths(), handleScroll(), getSelectionModel() && getSelectionModel().refreshSelections && getSelectionModel().refreshSelections());
+ }
+ function getOptions() {
+ return options;
+ }
+ function setOptions(args, suppressRender, suppressColumnSet, suppressSetOverflow) {
+ if (getEditorLock().commitCurrentEdit()) {
+ makeActiveCellNormal(), args.showColumnHeader !== void 0 && setColumnHeaderVisibility(args.showColumnHeader), options.enableAddRow !== args.enableAddRow && invalidateRow(getDataLength());
+ var originalOptions = Utils5.extend(!0, {}, options);
+ options = Utils5.extend(options, args), trigger(self.onSetOptions, { optionsBefore: originalOptions, optionsAfter: options }), validateAndEnforceOptions(), setFrozenOptions(), args.frozenBottom !== void 0 && (enforceFrozenRowHeightRecalc = !0), _viewport.forEach(function(view) {
+ view.style["overflow-y"] = options.autoHeight ? "hidden" : "auto";
+ }), suppressRender || render(), setScroller(), suppressSetOverflow || setOverflow(), suppressColumnSet || setColumns(columns), options.enableMouseWheelScrollHandler && _viewport && (!slickMouseWheelInstances || slickMouseWheelInstances.length === 0) ? _viewport.forEach(function(view) {
+ slickMouseWheelInstances.push(MouseWheel2({
+ element: view,
+ onMouseWheel: handleMouseWheel
+ }));
+ }) : options.enableMouseWheelScrollHandler === !1 && destroyAllInstances(slickMouseWheelInstances);
+ }
+ }
+ function validateAndEnforceOptions() {
+ options.autoHeight && (options.leaveSpaceForNewRows = !1), options.forceFitColumns && (options.autosizeColsMode = GridAutosizeColsMode2.LegacyForceFit, console.log("forceFitColumns option is deprecated - use autosizeColsMode"));
+ }
+ function setData(newData, scrollToTop) {
+ data = newData, invalidateAllRows(), updateRowCount(), scrollToTop && scrollTo(0);
+ }
+ function getData() {
+ return data;
+ }
+ function getDataLength() {
+ return data.getLength ? data.getLength() : data && data.length || 0;
+ }
+ function getDataLengthIncludingAddNew() {
+ return getDataLength() + (options.enableAddRow && (!pagingActive || pagingIsLastPage) ? 1 : 0);
+ }
+ function getDataItem(i2) {
+ return data.getItem ? data.getItem(i2) : data[i2];
+ }
+ function getTopPanel() {
+ return _topPanels[0];
+ }
+ function getTopPanels() {
+ return _topPanels;
+ }
+ function togglePanelVisibility(option, container2, visible, animate) {
+ var animated = animate !== !1;
+ if (options[option] != visible)
+ if (options[option] = visible, visible) {
+ if (animated) {
+ Utils5.slideDown(container2, resizeCanvas);
+ return;
+ }
+ show2(container2), resizeCanvas();
+ } else {
+ if (animated) {
+ Utils5.slideUp(container2, resizeCanvas);
+ return;
+ }
+ hide2(container2), resizeCanvas();
+ }
+ }
+ function setTopPanelVisibility(visible, animate) {
+ togglePanelVisibility("showTopPanel", _topPanelScrollers, visible, animate);
+ }
+ function setHeaderRowVisibility(visible, animate) {
+ togglePanelVisibility("showHeaderRow", _headerRowScroller, visible, animate);
+ }
+ function setColumnHeaderVisibility(visible, animate) {
+ togglePanelVisibility("showColumnHeader", _headerScroller, visible, animate);
+ }
+ function setFooterRowVisibility(visible, animate) {
+ togglePanelVisibility("showFooterRow", _footerRowScroller, visible, animate);
+ }
+ function setPreHeaderPanelVisibility(visible, animate) {
+ togglePanelVisibility("showPreHeaderPanel", [_preHeaderPanelScroller, _preHeaderPanelScrollerR], visible, animate);
+ }
+ function getContainerNode() {
+ return _container;
+ }
+ function getRowTop(row) {
+ return options.rowHeight * row - offset2;
+ }
+ function getRowFromPosition(y) {
+ return Math.floor((y + offset2) / options.rowHeight);
+ }
+ function scrollTo(y) {
+ y = Math.max(y, 0), y = Math.min(y, th - Utils5.height(_viewportScrollContainerY) + (viewportHasHScroll || hasFrozenColumns() ? scrollbarDimensions.height : 0));
+ var oldOffset = offset2;
+ page = Math.min(n - 1, Math.floor(y / ph)), offset2 = Math.round(page * cj);
+ var newScrollTop = y - offset2;
+ if (offset2 != oldOffset) {
+ var range = getVisibleRange(newScrollTop);
+ cleanupRows(range), updateRowPositions();
+ }
+ prevScrollTop != newScrollTop && (vScrollDir = prevScrollTop + oldOffset < newScrollTop + offset2 ? 1 : -1, lastRenderedScrollTop = scrollTop = prevScrollTop = newScrollTop, hasFrozenColumns() && (_viewportTopL.scrollTop = newScrollTop), hasFrozenRows && (_viewportBottomL.scrollTop = _viewportBottomR.scrollTop = newScrollTop), _viewportScrollContainerY.scrollTop = newScrollTop, trigger(self.onViewportChanged, {}));
+ }
+ function defaultFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return value == null ? "" : (value + "").replace(/&/g, "&").replace(//g, ">");
+ }
+ function getFormatter(row, column) {
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnOverrides = rowMetadata && rowMetadata.columns && (rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
+ return columnOverrides && columnOverrides.formatter || rowMetadata && rowMetadata.formatter || column.formatter || options.formatterFactory && options.formatterFactory.getFormatter(column) || options.defaultFormatter;
+ }
+ function getEditor(row, cell) {
+ var column = columns[cell], rowMetadata = data.getItemMetadata && data.getItemMetadata(row), columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[column.id] && columnMetadata[column.id].editor !== void 0 ? columnMetadata[column.id].editor : columnMetadata && columnMetadata[cell] && columnMetadata[cell].editor !== void 0 ? columnMetadata[cell].editor : column.editor || options.editorFactory && options.editorFactory.getEditor(column);
+ }
+ function getDataItemValueForColumn(item, columnDef) {
+ return options.dataItemColumnValueExtractor ? options.dataItemColumnValueExtractor(item, columnDef) : item[columnDef.field];
+ }
+ function appendRowHtml(stringArrayL, stringArrayR, row, range, dataLength) {
+ var d = getDataItem(row), dataLoading = row < dataLength && !d, rowCss = "slick-row" + (hasFrozenRows && row <= options.frozenRow ? " frozen" : "") + (dataLoading ? " loading" : "") + (row === activeRow && options.showCellSelection ? " active" : "") + (row % 2 == 1 ? " odd" : " even");
+ d || (rowCss += " " + options.addNewRowCssClass);
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata && metadata.cssClasses && (rowCss += " " + metadata.cssClasses);
+ var frozenRowOffset = getFrozenRowOffset(row), rowHtml = ``;
+ stringArrayL.push(rowHtml), hasFrozenColumns() && stringArrayR.push(rowHtml);
+ for (var colspan, m, i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (m = columns[i2], !(!m || m.hidden)) {
+ if (colspan = 1, metadata && metadata.columns) {
+ var columnData = metadata.columns[m.id] || metadata.columns[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ if (columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx) {
+ if (!m.alwaysRenderColumn && columnPosLeft[i2] > range.rightPx)
+ break;
+ hasFrozenColumns() && i2 > options.frozenColumn ? appendCellHtml(stringArrayR, row, i2, colspan, d) : appendCellHtml(stringArrayL, row, i2, colspan, d);
+ } else
+ (m.alwaysRenderColumn || hasFrozenColumns() && i2 <= options.frozenColumn) && appendCellHtml(stringArrayL, row, i2, colspan, d);
+ colspan > 1 && (i2 += colspan - 1);
+ }
+ stringArrayL.push("
"), hasFrozenColumns() && stringArrayR.push(" ");
+ }
+ function appendCellHtml(stringArray, row, cell, colspan, item) {
+ var m = columns[cell], cellCss = "slick-cell l" + cell + " r" + Math.min(columns.length - 1, cell + colspan - 1) + (m.cssClass ? " " + m.cssClass : "");
+ hasFrozenColumns() && cell <= options.frozenColumn && (cellCss += " frozen"), row === activeRow && cell === activeCell && options.showCellSelection && (cellCss += " active");
+ for (var key in cellCssClasses)
+ cellCssClasses[key][row] && cellCssClasses[key][row][m.id] && (cellCss += " " + cellCssClasses[key][row][m.id]);
+ var value = null, formatterResult = "";
+ item && (value = getDataItemValueForColumn(item, m), formatterResult = getFormatter(row, m)(row, cell, value, m, item, self), formatterResult == null && (formatterResult = ""));
+ var addlCssClasses = trigger(self.onBeforeAppendCell, { row, cell, value, dataContext: item }).getReturnValue() || "";
+ addlCssClasses += formatterResult && formatterResult.addClasses ? (addlCssClasses ? " " : "") + formatterResult.addClasses : "";
+ var toolTip = formatterResult && formatterResult.toolTip ? "title='" + formatterResult.toolTip + "'" : "", customAttrStr = "";
+ if (m.hasOwnProperty("cellAttrs") && m.cellAttrs instanceof Object)
+ for (var key in m.cellAttrs)
+ m.cellAttrs.hasOwnProperty(key) && (customAttrStr += " " + key + '="' + m.cellAttrs[key] + '" ');
+ stringArray.push(``), item && stringArray.push(Object.prototype.toString.call(formatterResult) !== "[object Object]" ? formatterResult : formatterResult.text), stringArray.push("
"), rowsCache[row].cellRenderQueue.push(cell), rowsCache[row].cellColSpans[cell] = colspan;
+ }
+ function cleanupRows(rangeToKeep) {
+ for (var i2 in rowsCache) {
+ var removeFrozenRow = !0;
+ hasFrozenRows && (options.frozenBottom && i2 >= actualFrozenRow || !options.frozenBottom && i2 <= actualFrozenRow) && (removeFrozenRow = !1), (i2 = parseInt(i2, 10)) !== activeRow && (i2 < rangeToKeep.top || i2 > rangeToKeep.bottom) && removeFrozenRow && removeRowFromCache(i2);
+ }
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function invalidate() {
+ updateRowCount(), invalidateAllRows(), render();
+ }
+ function invalidateAllRows() {
+ currentEditor && makeActiveCellNormal();
+ for (var row in rowsCache)
+ removeRowFromCache(row);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ function queuePostProcessedRowForCleanup(cacheEntry, postProcessedRow, rowIdx) {
+ postProcessgroupId++;
+ for (var columnIdx in postProcessedRow)
+ postProcessedRow.hasOwnProperty(columnIdx) && postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cacheEntry.cellNodesByColumnIdx[columnIdx | 0],
+ columnIdx: columnIdx | 0,
+ rowIdx
+ });
+ postProcessedCleanupQueue.push({
+ actionType: "R",
+ groupId: postProcessgroupId,
+ node: cacheEntry.rowNode
+ }), cacheEntry.rowNode.forEach(function(node) {
+ node.remove();
+ });
+ }
+ function queuePostProcessedCellForCleanup(cellnode, columnIdx, rowIdx) {
+ postProcessedCleanupQueue.push({
+ actionType: "C",
+ groupId: postProcessgroupId,
+ node: cellnode,
+ columnIdx,
+ rowIdx
+ }), cellnode.remove();
+ }
+ function removeRowFromCache(row) {
+ var cacheEntry = rowsCache[row];
+ cacheEntry && (options.enableAsyncPostRenderCleanup && postProcessedRows[row] ? queuePostProcessedRowForCleanup(cacheEntry, postProcessedRows[row], row) : cacheEntry.rowNode.forEach(function(node) {
+ node.parentElement && node.parentElement.removeChild(node);
+ }), delete rowsCache[row], delete postProcessedRows[row], renderedRows--, counter_rows_removed++);
+ }
+ function invalidateRows(rows) {
+ var i2, rl;
+ if (!(!rows || !rows.length)) {
+ for (vScrollDir = 0, rl = rows.length, i2 = 0; i2 < rl; i2++)
+ currentEditor && activeRow === rows[i2] && makeActiveCellNormal(), rowsCache[rows[i2]] && removeRowFromCache(rows[i2]);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup();
+ }
+ }
+ function invalidateRow(row) {
+ !row && row !== 0 || invalidateRows([row]);
+ }
+ function applyFormatResultToCellNode(formatterResult, cellNode, suppressRemove) {
+ if (formatterResult == null && (formatterResult = ""), Object.prototype.toString.call(formatterResult) !== "[object Object]") {
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult);
+ return;
+ }
+ cellNode.innerHTML = sanitizeHtmlString(formatterResult.text), formatterResult.removeClasses && !suppressRemove && formatterResult.removeClasses.split(" ").forEach(function(c) {
+ cellNode.classList.remove(c);
+ }), formatterResult.addClasses && formatterResult.addClasses.split(" ").forEach(function(c) {
+ cellNode.classList.add(c);
+ }), formatterResult.toolTip && cellNode.setAttribute("title", formatterResult.toolTip);
+ }
+ function updateCell(row, cell) {
+ var cellNode = getCellNode(row, cell);
+ if (cellNode) {
+ var m = columns[cell], d = getDataItem(row);
+ if (currentEditor && activeRow === row && activeCell === cell)
+ currentEditor.loadValue(d);
+ else {
+ var formatterResult = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d, self) : "";
+ applyFormatResultToCellNode(formatterResult, cellNode), invalidatePostProcessingResults(row);
+ }
+ }
+ }
+ function updateRow(row) {
+ var cacheEntry = rowsCache[row];
+ if (cacheEntry) {
+ ensureCellNodesInRowsCache(row);
+ var formatterResult, d = getDataItem(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ row === activeRow && columnIdx === activeCell && currentEditor ? currentEditor.loadValue(d) : d ? (formatterResult = getFormatter(row, m)(row, columnIdx, getDataItemValueForColumn(d, m), m, d, self), applyFormatResultToCellNode(formatterResult, node)) : node.innerHTML = "";
+ }
+ invalidatePostProcessingResults(row);
+ }
+ }
+ function getViewportHeight() {
+ if ((!options.autoHeight || options.frozenColumn != -1) && (topPanelH = options.showTopPanel ? options.topPanelHeight + getVBoxDelta(_topPanelScrollers[0]) : 0, headerRowH = options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, footerRowH = options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0), options.autoHeight) {
+ let fullHeight = _paneHeaderL.offsetHeight;
+ fullHeight += options.showHeaderRow ? options.headerRowHeight + getVBoxDelta(_headerRowScroller[0]) : 0, fullHeight += options.showFooterRow ? options.footerRowHeight + getVBoxDelta(_footerRowScroller[0]) : 0, fullHeight += getCanvasWidth() > viewportW ? scrollbarDimensions.height : 0, viewportH = options.rowHeight * getDataLengthIncludingAddNew() + (options.frozenColumn == -1 ? fullHeight : 0);
+ } else {
+ let columnNamesH = options.showColumnHeader ? Utils5.toFloat(Utils5.height(_headerScroller[0])) + getVBoxDelta(_headerScroller[0]) : 0, preHeaderH = options.createPreHeaderPanel && options.showPreHeaderPanel ? options.preHeaderPanelHeight + getVBoxDelta(_preHeaderPanelScroller) : 0, style = getComputedStyle(_container);
+ viewportH = Utils5.toFloat(style.height) - Utils5.toFloat(style.paddingTop) - Utils5.toFloat(style.paddingBottom) - columnNamesH - topPanelH - headerRowH - footerRowH - preHeaderH;
+ }
+ return numVisibleRows = Math.ceil(viewportH / options.rowHeight), viewportH;
+ }
+ function getViewportWidth() {
+ viewportW = parseFloat(Utils5.innerSize(_container, "width"));
+ }
+ function resizeCanvas() {
+ if (initialized) {
+ if (paneTopH = 0, paneBottomH = 0, viewportTopH = 0, viewportBottomH = 0, getViewportWidth(), getViewportHeight(), hasFrozenRows ? options.frozenBottom ? (paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions.height, paneBottomH = frozenRowsHeight + scrollbarDimensions.height) : (paneTopH = frozenRowsHeight, paneBottomH = viewportH - frozenRowsHeight) : paneTopH = viewportH, paneTopH += topPanelH + headerRowH + footerRowH, hasFrozenColumns() && options.autoHeight && (paneTopH += scrollbarDimensions.height), viewportTopH = paneTopH - topPanelH - headerRowH - footerRowH, options.autoHeight) {
+ if (hasFrozenColumns()) {
+ let style = getComputedStyle(_headerScrollerL);
+ Utils5.height(_container, paneTopH + Utils5.toFloat(style.height));
+ }
+ _paneTopL.style.position = "relative";
+ }
+ Utils5.setStyleSize(_paneTopL, "top", Utils5.height(_paneHeaderL) || (options.showHeaderRow ? options.headerRowHeight : 0) + (options.showPreHeaderPanel ? options.preHeaderPanelHeight : 0)), Utils5.height(_paneTopL, paneTopH);
+ var paneBottomTop = _paneTopL.offsetTop + paneTopH;
+ options.autoHeight || Utils5.height(_viewportTopL, viewportTopH), hasFrozenColumns() ? (Utils5.setStyleSize(_paneTopR, "top", Utils5.height(_paneHeaderL)), Utils5.height(_paneTopR, paneTopH), Utils5.height(_viewportTopR, viewportTopH), hasFrozenRows && (Utils5.setStyleSize(_paneBottomL, "top", paneBottomTop), Utils5.height(_paneBottomL, paneBottomH), Utils5.setStyleSize(_paneBottomR, "top", paneBottomTop), Utils5.height(_paneBottomR, paneBottomH), Utils5.height(_viewportBottomR, paneBottomH))) : hasFrozenRows && (Utils5.width(_paneBottomL, "100%"), Utils5.height(_paneBottomL, paneBottomH), Utils5.setStyleSize(_paneBottomL, "top", paneBottomTop)), hasFrozenRows ? (Utils5.height(_viewportBottomL, paneBottomH), options.frozenBottom ? (Utils5.height(_canvasBottomL, frozenRowsHeight), hasFrozenColumns() && Utils5.height(_canvasBottomR, frozenRowsHeight)) : (Utils5.height(_canvasTopL, frozenRowsHeight), hasFrozenColumns() && Utils5.height(_canvasTopR, frozenRowsHeight))) : Utils5.height(_viewportTopR, viewportTopH), (!scrollbarDimensions || !scrollbarDimensions.width) && (scrollbarDimensions = measureScrollbar()), options.autosizeColsMode === GridAutosizeColsMode2.LegacyForceFit && autosizeColumns(), updateRowCount(), handleScroll(), lastRenderedScrollLeft = -1, render();
+ }
+ }
+ function updatePagingStatusFromView(pagingInfo) {
+ pagingActive = pagingInfo.pageSize !== 0, pagingIsLastPage = pagingInfo.pageNum == pagingInfo.totalPages - 1;
+ }
+ function updateRowCount() {
+ if (initialized) {
+ var dataLength = getDataLength(), dataLengthIncludingAddNew = getDataLengthIncludingAddNew(), numberOfRows = 0, oldH = hasFrozenRows && !options.frozenBottom ? Utils5.height(_canvasBottomL) : Utils5.height(_canvasTopL);
+ if (hasFrozenRows)
+ var numberOfRows = getDataLength() - options.frozenRow;
+ else
+ var numberOfRows = dataLengthIncludingAddNew + (options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);
+ var tempViewportH = Utils5.height(_viewportScrollContainerY), oldViewportHasVScroll = viewportHasVScroll;
+ viewportHasVScroll = options.alwaysShowVerticalScroll || !options.autoHeight && numberOfRows * options.rowHeight > tempViewportH, makeActiveCellNormal();
+ var r1 = dataLength - 1;
+ for (var i2 in rowsCache)
+ i2 > r1 && removeRowFromCache(i2);
+ options.enableAsyncPostRenderCleanup && startPostProcessingCleanup(), activeCellNode && activeRow > r1 && resetActiveCell();
+ var oldH = h;
+ options.autoHeight ? h = options.rowHeight * numberOfRows : (th = Math.max(options.rowHeight * numberOfRows, tempViewportH - scrollbarDimensions.height), th < maxSupportedCssHeight ? (h = ph = th, n = 1, cj = 0) : (h = maxSupportedCssHeight, ph = h / 100, n = Math.floor(th / ph), cj = (th - h) / (n - 1))), (h !== oldH || enforceFrozenRowHeightRecalc) && (hasFrozenRows && !options.frozenBottom ? (Utils5.height(_canvasBottomL, h), hasFrozenColumns() && Utils5.height(_canvasBottomR, h)) : (Utils5.height(_canvasTopL, h), Utils5.height(_canvasTopR, h)), scrollTop = _viewportScrollContainerY.scrollTop, enforceFrozenRowHeightRecalc = !1);
+ var oldScrollTopInRange = scrollTop + offset2 <= th - tempViewportH;
+ th == 0 || scrollTop == 0 ? page = offset2 = 0 : scrollTo(oldScrollTopInRange ? scrollTop + offset2 : th - tempViewportH + scrollbarDimensions.height), h != oldH && options.autoHeight && resizeCanvas(), options.autosizeColsMode === GridAutosizeColsMode2.LegacyForceFit && oldViewportHasVScroll != viewportHasVScroll && autosizeColumns(), updateCanvasWidth(!1);
+ }
+ }
+ function getVisibleRange(viewportTop, viewportLeft) {
+ return viewportTop == null && (viewportTop = scrollTop), viewportLeft == null && (viewportLeft = scrollLeft), {
+ top: getRowFromPosition(viewportTop),
+ bottom: getRowFromPosition(viewportTop + viewportH) + 1,
+ leftPx: viewportLeft,
+ rightPx: viewportLeft + viewportW
+ };
+ }
+ function getRenderedRange(viewportTop, viewportLeft) {
+ var range = getVisibleRange(viewportTop, viewportLeft), buffer = Math.round(viewportH / options.rowHeight), minBuffer = options.minRowBuffer;
+ return vScrollDir == -1 ? (range.top -= buffer, range.bottom += minBuffer) : vScrollDir == 1 ? (range.top -= minBuffer, range.bottom += buffer) : (range.top -= minBuffer, range.bottom += minBuffer), range.top = Math.max(0, range.top), range.bottom = Math.min(getDataLengthIncludingAddNew() - 1, range.bottom), range.leftPx -= viewportW, range.rightPx += viewportW, range.leftPx = Math.max(0, range.leftPx), range.rightPx = Math.min(canvasWidth, range.rightPx), range;
+ }
+ function ensureCellNodesInRowsCache(row) {
+ let cacheEntry = rowsCache[row];
+ if (cacheEntry && cacheEntry.cellRenderQueue.length) {
+ let rowNode = cacheEntry.rowNode, children = Array.from(rowNode[0].children);
+ rowNode.length > 1 && (children = children.concat(Array.from(rowNode[1].children)));
+ let i2 = children.length - 1;
+ for (; cacheEntry.cellRenderQueue.length; ) {
+ let columnIdx = cacheEntry.cellRenderQueue.pop();
+ cacheEntry.cellNodesByColumnIdx[columnIdx] = children[i2--];
+ }
+ }
+ }
+ function cleanUpCells(range, row) {
+ if (!(hasFrozenRows && (options.frozenBottom && row > actualFrozenRow || row <= actualFrozenRow))) {
+ var totalCellsRemoved = 0, cacheEntry = rowsCache[row], cellsToRemove = [];
+ for (var i2 in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(i2) && (i2 = i2 | 0, !(i2 <= options.frozenColumn) && !(Array.isArray(columns) && columns[i2] && columns[i2].alwaysRenderColumn))) {
+ var colspan = cacheEntry.cellColSpans[i2];
+ (columnPosLeft[i2] > range.rightPx || columnPosRight[Math.min(columns.length - 1, i2 + colspan - 1)] < range.leftPx) && (row == activeRow && i2 == activeCell || cellsToRemove.push(i2));
+ }
+ for (var cellToRemove, cellNode; (cellToRemove = cellsToRemove.pop()) != null; )
+ cellNode = cacheEntry.cellNodesByColumnIdx[cellToRemove], options.enableAsyncPostRenderCleanup && postProcessedRows[row] && postProcessedRows[row][cellToRemove] ? queuePostProcessedCellForCleanup(cellNode, cellToRemove, row) : cellNode.parentElement.removeChild(cellNode), delete cacheEntry.cellColSpans[cellToRemove], delete cacheEntry.cellNodesByColumnIdx[cellToRemove], postProcessedRows[row] && delete postProcessedRows[row][cellToRemove], totalCellsRemoved++;
+ }
+ }
+ function cleanUpAndRenderCells(range) {
+ for (var cacheEntry, stringArray = [], processedRows = [], cellsAdded, totalCellsAdded = 0, colspan, row = range.top, btm = range.bottom; row <= btm; row++)
+ if (cacheEntry = rowsCache[row], !!cacheEntry) {
+ ensureCellNodesInRowsCache(row), cleanUpCells(range, row), cellsAdded = 0;
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ metadata = metadata && metadata.columns;
+ for (var d = getDataItem(row), i2 = 0, ii = columns.length; i2 < ii; i2++)
+ if (!(!columns[i2] || columns[i2].hidden)) {
+ if (columnPosLeft[i2] > range.rightPx)
+ break;
+ if ((colspan = cacheEntry.cellColSpans[i2]) != null) {
+ i2 += colspan > 1 ? colspan - 1 : 0;
+ continue;
+ }
+ if (colspan = 1, metadata) {
+ var columnData = metadata[columns[i2].id] || metadata[i2];
+ colspan = columnData && columnData.colspan || 1, colspan === "*" && (colspan = ii - i2);
+ }
+ columnPosRight[Math.min(ii - 1, i2 + colspan - 1)] > range.leftPx && (appendCellHtml(stringArray, row, i2, colspan, d), cellsAdded++), i2 += colspan > 1 ? colspan - 1 : 0;
+ }
+ cellsAdded && (totalCellsAdded += cellsAdded, processedRows.push(row));
+ }
+ if (stringArray.length)
+ for (var x = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArray.join("")) }), processedRow, node; (processedRow = processedRows.pop()) != null; ) {
+ cacheEntry = rowsCache[processedRow];
+ for (var columnIdx; (columnIdx = cacheEntry.cellRenderQueue.pop()) != null; )
+ node = x.lastChild, hasFrozenColumns() && columnIdx > options.frozenColumn ? cacheEntry.rowNode[1].appendChild(node) : cacheEntry.rowNode[0].appendChild(node), cacheEntry.cellNodesByColumnIdx[columnIdx] = node;
+ }
+ }
+ function renderRows(range) {
+ for (var stringArrayL = [], stringArrayR = [], rows = [], needToReselectCell = !1, dataLength = getDataLength(), i2 = range.top, ii = range.bottom; i2 <= ii; i2++)
+ rowsCache[i2] || hasFrozenRows && options.frozenBottom && i2 == getDataLength() || (renderedRows++, rows.push(i2), rowsCache[i2] = {
+ rowNode: null,
+ // ColSpans of rendered cells (by column idx).
+ // Can also be used for checking whether a cell has been rendered.
+ cellColSpans: [],
+ // Cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().
+ cellNodesByColumnIdx: [],
+ // Column indices of cell nodes that have been rendered, but not yet indexed in
+ // cellNodesByColumnIdx. These are in the same order as cell nodes added at the
+ // end of the row.
+ cellRenderQueue: []
+ }, appendRowHtml(stringArrayL, stringArrayR, i2, range, dataLength), activeCellNode && activeRow === i2 && (needToReselectCell = !0), counter_rows_rendered++);
+ if (!rows.length)
+ return;
+ let x = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayL.join("")) }), xRight = Utils5.createDomElement("div", { innerHTML: sanitizeHtmlString(stringArrayR.join("")) });
+ for (var i2 = 0, ii = rows.length; i2 < ii; i2++)
+ hasFrozenRows && rows[i2] >= actualFrozenRow ? hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasBottomL.appendChild(x.firstChild), _canvasBottomR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasBottomL.appendChild(x.firstChild)) : hasFrozenColumns() ? (rowsCache[rows[i2]].rowNode = [x.firstChild, xRight.firstChild], _canvasTopL.appendChild(x.firstChild), _canvasTopR.appendChild(xRight.firstChild)) : (rowsCache[rows[i2]].rowNode = [x.firstChild], _canvasTopL.appendChild(x.firstChild));
+ needToReselectCell && (activeCellNode = getCellNode(activeRow, activeCell));
+ }
+ function startPostProcessing() {
+ options.enableAsyncPostRender && (clearTimeout(h_postrender), h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay));
+ }
+ function startPostProcessingCleanup() {
+ options.enableAsyncPostRenderCleanup && (clearTimeout(h_postrenderCleanup), h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay));
+ }
+ function invalidatePostProcessingResults(row) {
+ for (var columnIdx in postProcessedRows[row])
+ postProcessedRows[row].hasOwnProperty(columnIdx) && (postProcessedRows[row][columnIdx] = "C");
+ postProcessFromRow = Math.min(postProcessFromRow, row), postProcessToRow = Math.max(postProcessToRow, row), startPostProcessing();
+ }
+ function updateRowPositions() {
+ for (var row in rowsCache) {
+ var rowNumber = row ? parseInt(row) : 0;
+ Utils5.setStyleSize("top", getRowTop(rowNumber));
+ }
+ }
+ function render() {
+ if (initialized) {
+ scrollThrottle.dequeue();
+ var visible = getVisibleRange(), rendered = getRenderedRange();
+ if (cleanupRows(rendered), lastRenderedScrollLeft != scrollLeft) {
+ if (hasFrozenRows) {
+ var renderedFrozenRows = Utils5.extend(!0, {}, rendered);
+ options.frozenBottom ? (renderedFrozenRows.top = actualFrozenRow, renderedFrozenRows.bottom = getDataLength()) : (renderedFrozenRows.top = 0, renderedFrozenRows.bottom = options.frozenRow), cleanUpAndRenderCells(renderedFrozenRows);
+ }
+ cleanUpAndRenderCells(rendered);
+ }
+ renderRows(rendered), hasFrozenRows && (options.frozenBottom ? renderRows({
+ top: actualFrozenRow,
+ bottom: getDataLength() - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ }) : renderRows({
+ top: 0,
+ bottom: options.frozenRow - 1,
+ leftPx: rendered.leftPx,
+ rightPx: rendered.rightPx
+ })), postProcessFromRow = visible.top, postProcessToRow = Math.min(getDataLengthIncludingAddNew() - 1, visible.bottom), startPostProcessing(), lastRenderedScrollTop = scrollTop, lastRenderedScrollLeft = scrollLeft, h_render = null, trigger(self.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: self });
+ }
+ }
+ function handleHeaderRowScroll() {
+ var scrollLeft2 = _headerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleFooterRowScroll() {
+ var scrollLeft2 = _footerRowScrollContainer.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handlePreHeaderPanelScroll() {
+ handleElementScroll(_preHeaderPanelScroller);
+ }
+ function handleElementScroll(element) {
+ var scrollLeft2 = element.scrollLeft;
+ scrollLeft2 != _viewportScrollContainerX.scrollLeft && (_viewportScrollContainerX.scrollLeft = scrollLeft2);
+ }
+ function handleScroll() {
+ return scrollTop = _viewportScrollContainerY.scrollTop, scrollLeft = _viewportScrollContainerX.scrollLeft, _handleScroll(!1);
+ }
+ function _handleScroll(isMouseWheel) {
+ var maxScrollDistanceY = _viewportScrollContainerY.scrollHeight - _viewportScrollContainerY.clientHeight, maxScrollDistanceX = _viewportScrollContainerY.scrollWidth - _viewportScrollContainerY.clientWidth;
+ maxScrollDistanceY = Math.max(0, maxScrollDistanceY), maxScrollDistanceX = Math.max(0, maxScrollDistanceX), scrollTop > maxScrollDistanceY && (scrollTop = maxScrollDistanceY), scrollLeft > maxScrollDistanceX && (scrollLeft = maxScrollDistanceX);
+ var vScrollDist = Math.abs(scrollTop - prevScrollTop), hScrollDist = Math.abs(scrollLeft - prevScrollLeft);
+ if (hScrollDist && (prevScrollLeft = scrollLeft, Utils5.debounce(() => {
+ _viewportScrollContainerX.scrollLeft = scrollLeft, _headerScrollContainer.scrollLeft = scrollLeft, _topPanelScrollers[0].scrollLeft = scrollLeft, options.createFooterRow && (_footerRowScrollContainer.scrollLeft = scrollLeft), options.createPreHeaderPanel && (hasFrozenColumns() ? _preHeaderPanelScrollerR.scrollLeft = scrollLeft : _preHeaderPanelScroller.scrollLeft = scrollLeft), hasFrozenColumns() ? (hasFrozenRows && (_viewportTopR.scrollLeft = scrollLeft), _headerRowScrollerR.scrollLeft = scrollLeft) : (hasFrozenRows && (_viewportTopL.scrollLeft = scrollLeft), _headerRowScrollerL.scrollLeft = scrollLeft);
+ }, options.scrollDebounceDelay)()), vScrollDist && !options.autoHeight)
+ if (vScrollDir = prevScrollTop < scrollTop ? 1 : -1, prevScrollTop = scrollTop, isMouseWheel && (_viewportScrollContainerY.scrollTop = scrollTop), hasFrozenColumns() && (hasFrozenRows && !options.frozenBottom ? _viewportBottomL.scrollTop = scrollTop : _viewportTopL.scrollTop = scrollTop), vScrollDist < viewportH)
+ scrollTo(scrollTop + offset2);
+ else {
+ var oldOffset = offset2;
+ h == viewportH ? page = 0 : page = Math.min(n - 1, Math.floor(scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph))), offset2 = Math.round(page * cj), oldOffset != offset2 && invalidateAllRows();
+ }
+ if (hScrollDist || vScrollDist) {
+ var dx = Math.abs(lastRenderedScrollLeft - scrollLeft), dy = Math.abs(lastRenderedScrollTop - scrollTop);
+ (dx > 20 || dy > 20) && (options.forceSyncScrolling || dy < viewportH && dx < viewportW ? render() : scrollThrottle.enqueue(), trigger(self.onViewportChanged, {}));
+ }
+ return trigger(self.onScroll, { scrollLeft, scrollTop }), !!(hScrollDist || vScrollDist);
+ }
+ function ActionThrottle(action, minPeriod_ms) {
+ var blocked = !1, queued = !1;
+ function enqueue() {
+ blocked ? queued = !0 : blockAndExecute();
+ }
+ function dequeue() {
+ queued = !1;
+ }
+ function blockAndExecute() {
+ blocked = !0, setTimeout(unblock, minPeriod_ms), action();
+ }
+ function unblock() {
+ queued ? (dequeue(), blockAndExecute()) : blocked = !1;
+ }
+ return {
+ enqueue,
+ dequeue
+ };
+ }
+ function asyncPostProcessRows() {
+ for (var dataLength = getDataLength(); postProcessFromRow <= postProcessToRow; ) {
+ var row = vScrollDir >= 0 ? postProcessFromRow++ : postProcessToRow--, cacheEntry = rowsCache[row];
+ if (!(!cacheEntry || row >= dataLength)) {
+ postProcessedRows[row] || (postProcessedRows[row] = {}), ensureCellNodesInRowsCache(row);
+ for (var columnIdx in cacheEntry.cellNodesByColumnIdx)
+ if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(columnIdx)) {
+ columnIdx = columnIdx | 0;
+ var m = columns[columnIdx], processedStatus = postProcessedRows[row][columnIdx];
+ if (m.asyncPostRender && processedStatus !== "R") {
+ var node = cacheEntry.cellNodesByColumnIdx[columnIdx];
+ node && m.asyncPostRender(node, row, getDataItem(row), m, processedStatus === "C"), postProcessedRows[row][columnIdx] = "R";
+ }
+ }
+ h_postrender = setTimeout(asyncPostProcessRows, options.asyncPostRenderDelay);
+ return;
+ }
+ }
+ }
+ function asyncPostProcessCleanupRows() {
+ if (postProcessedCleanupQueue.length > 0) {
+ for (var groupId = postProcessedCleanupQueue[0].groupId; postProcessedCleanupQueue.length > 0 && postProcessedCleanupQueue[0].groupId == groupId; ) {
+ var entry = postProcessedCleanupQueue.shift();
+ if (entry.actionType == "R" && entry.node.forEach(function(node) {
+ node.remove();
+ }), entry.actionType == "C") {
+ var column = columns[entry.columnIdx];
+ column.asyncPostRenderCleanup && entry.node && column.asyncPostRenderCleanup(entry.node, entry.rowIdx, column);
+ }
+ }
+ h_postrenderCleanup = setTimeout(asyncPostProcessCleanupRows, options.asyncPostRenderCleanupDelay);
+ }
+ }
+ function updateCellCssStylesOnRenderedRows(addedHash, removedHash) {
+ var node, columnId, addedRowHash, removedRowHash;
+ for (var row in rowsCache) {
+ if (removedRowHash = removedHash && removedHash[row], addedRowHash = addedHash && addedHash[row], removedRowHash)
+ for (columnId in removedRowHash)
+ (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.remove(removedRowHash[columnId]));
+ if (addedRowHash)
+ for (columnId in addedRowHash)
+ (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) && (node = getCellNode(row, getColumnIndex(columnId)), node && node.classList.add(addedRowHash[columnId]));
+ }
+ }
+ function addCellCssStyles(key, hash) {
+ if (cellCssClasses[key])
+ throw new Error("SlickGrid addCellCssStyles: cell CSS hash with key '" + key + "' already exists.");
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, null), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function removeCellCssStyles(key) {
+ cellCssClasses[key] && (updateCellCssStylesOnRenderedRows(null, cellCssClasses[key]), delete cellCssClasses[key], trigger(self.onCellCssStylesChanged, { key, hash: null, grid: self }));
+ }
+ function setCellCssStyles(key, hash) {
+ let prevHash = cellCssClasses[key];
+ cellCssClasses[key] = hash, updateCellCssStylesOnRenderedRows(hash, prevHash), trigger(self.onCellCssStylesChanged, { key, hash, grid: self });
+ }
+ function getCellCssStyles(key) {
+ return cellCssClasses[key];
+ }
+ function flashCell(row, cell, speed) {
+ speed = speed || 250;
+ function toggleCellClass(cellNode, times) {
+ times < 1 || setTimeout(function() {
+ times % 2 == 0 ? cellNode.classList.add(options.cellFlashingCssClass) : cellNode.classList.remove(options.cellFlashingCssClass), toggleCellClass(cellNode, times - 1);
+ }, speed);
+ }
+ if (rowsCache[row]) {
+ let cellNode = getCellNode(row, cell);
+ cellNode && toggleCellClass(cellNode, 5);
+ }
+ }
+ function handleMouseWheel(e, delta, deltaX, deltaY) {
+ scrollTop = Math.max(0, _viewportScrollContainerY.scrollTop - deltaY * options.rowHeight), scrollLeft = _viewportScrollContainerX.scrollLeft + deltaX * 10;
+ var handled = _handleScroll(!0);
+ handled && e.preventDefault();
+ }
+ function handleDragInit(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragInit, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDragStart(e, dd) {
+ var cell = getCellFromEvent(e);
+ if (!cell || !cellExists(cell.row, cell.cell))
+ return !1;
+ var retval = trigger(self.onDragStart, dd, e);
+ return retval.isImmediatePropagationStopped() ? retval.getReturnValue() : !1;
+ }
+ function handleDrag(e, dd) {
+ return trigger(self.onDrag, dd, e).getReturnValue();
+ }
+ function handleDragEnd(e, dd) {
+ trigger(self.onDragEnd, dd, e);
+ }
+ function handleKeyDown(e) {
+ var handled = trigger(self.onKeyDown, { row: activeRow, cell: activeCell }, e).isImmediatePropagationStopped();
+ if (!handled && !e.shiftKey && !e.altKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ e.which == keyCode4.HOME ? handled = e.ctrlKey ? navigateTop() : navigateRowStart() : e.which == keyCode4.END && (handled = e.ctrlKey ? navigateBottom() : navigateRowEnd());
+ }
+ if (!handled)
+ if (!e.shiftKey && !e.altKey && !e.ctrlKey) {
+ if (options.editable && currentEditor && currentEditor.keyCaptureList && currentEditor.keyCaptureList.indexOf(e.which) > -1)
+ return;
+ if (e.which == keyCode4.ESCAPE) {
+ if (!getEditorLock().isActive())
+ return;
+ cancelEditAndSetFocus();
+ } else
+ e.which == keyCode4.PAGE_DOWN ? (navigatePageDown(), handled = !0) : e.which == keyCode4.PAGE_UP ? (navigatePageUp(), handled = !0) : e.which == keyCode4.LEFT ? handled = navigateLeft() : e.which == keyCode4.RIGHT ? handled = navigateRight() : e.which == keyCode4.UP ? handled = navigateUp() : e.which == keyCode4.DOWN ? handled = navigateDown() : e.which == keyCode4.TAB ? handled = navigateNext() : e.which == keyCode4.ENTER && (options.editable && (currentEditor ? activeRow === getDataLength() ? navigateDown() : commitEditAndSetFocus() : getEditorLock().commitCurrentEdit() && makeActiveCellEditable(void 0, void 0, e)), handled = !0);
+ } else
+ e.which == keyCode4.TAB && e.shiftKey && !e.ctrlKey && !e.altKey && (handled = navigatePrev());
+ if (handled) {
+ e.stopPropagation(), e.preventDefault();
+ try {
+ e.originalEvent.keyCode = 0;
+ } catch {
+ }
+ }
+ }
+ function handleClick(evt) {
+ let e = evt;
+ if (e instanceof EventData3 ? e = evt.getNativeEvent() : evt = void 0, !currentEditor && (e.target != document.activeElement || e.target.classList.contains("slick-cell"))) {
+ var selection = getTextSelection();
+ setFocus(), setTextSelection(selection);
+ }
+ var cell = getCellFromEvent(e);
+ if (!(!cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell) && (evt = trigger(self.onClick, { row: cell.row, cell: cell.cell }, evt || e), !evt.isImmediatePropagationStopped() && canCellBeActive(cell.row, cell.cell) && (!getEditorLock().isActive() || getEditorLock().commitCurrentEdit()))) {
+ scrollRowIntoView(cell.row, !1);
+ var preClickModeOn = e.target && e.target.className === preClickClassName2, column = columns[cell.cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);
+ }
+ }
+ function handleContextMenu(e) {
+ var cell = e.target.closest(".slick-cell");
+ cell && (activeCellNode === cell && currentEditor !== null || trigger(self.onContextMenu, {}, e));
+ }
+ function handleDblClick(e) {
+ var cell = getCellFromEvent(e);
+ !cell || currentEditor !== null && activeRow == cell.row && activeCell == cell.cell || (trigger(self.onDblClick, { row: cell.row, cell: cell.cell }, e), !e.defaultPrevented && options.editable && gotoCell(cell.row, cell.cell, !0, e));
+ }
+ function handleHeaderMouseEnter(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderMouseLeave(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-header-column"), "column");
+ c && trigger(self.onHeaderMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseEnter(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseEnter, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderRowMouseLeave(e) {
+ let c = Utils5.storage.get(e.target.closest(".slick-headerrow-column"), "column");
+ c && trigger(self.onHeaderRowMouseLeave, {
+ column: c,
+ grid: self
+ }, e);
+ }
+ function handleHeaderContextMenu(e) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils5.storage.get(header, "column");
+ trigger(self.onHeaderContextMenu, { column }, e);
+ }
+ function handleHeaderClick(e) {
+ if (!columnResizeDragging) {
+ var header = e.target.closest(".slick-header-column"), column = header && Utils5.storage.get(header, "column");
+ column && trigger(self.onHeaderClick, { column }, e);
+ }
+ }
+ function handleFooterContextMenu(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils5.storage.get(footer, "column");
+ trigger(self.onFooterContextMenu, { column }, e);
+ }
+ function handleFooterClick(e) {
+ var footer = e.target.closest(".slick-footerrow-column"), column = footer && Utils5.storage.get(footer, "column");
+ trigger(self.onFooterClick, { column }, e);
+ }
+ function handleCellMouseOver(e) {
+ trigger(self.onMouseEnter, {}, e);
+ }
+ function handleCellMouseOut(e) {
+ trigger(self.onMouseLeave, {}, e);
+ }
+ function cellExists(row, cell) {
+ return !(row < 0 || row >= getDataLength() || cell < 0 || cell >= columns.length);
+ }
+ function getCellFromPoint(x, y) {
+ for (var row = getRowFromPosition(y), cell = 0, w = 0, i2 = 0; i2 < columns.length && w < x; i2++)
+ !columns[i2] || columns[i2].hidden || (w += columns[i2].width, cell++);
+ return cell < 0 && (cell = 0), { row, cell: cell - 1 };
+ }
+ function getCellFromNode(cellNode) {
+ var cls = /l\d+/.exec(cellNode.className);
+ if (!cls)
+ throw new Error("SlickGrid getCellFromNode: cannot get cell - " + cellNode.className);
+ return parseInt(cls[0].substr(1, cls[0].length - 1), 10);
+ }
+ function getRowFromNode(rowNode) {
+ for (var row in rowsCache)
+ for (var i2 in rowsCache[row].rowNode)
+ if (rowsCache[row].rowNode[i2] === rowNode)
+ return row ? parseInt(row) : 0;
+ return null;
+ }
+ function getFrozenRowOffset(row) {
+ let offset3 = 0;
+ return hasFrozenRows ? options.frozenBottom ? row >= actualFrozenRow ? h < viewportTopH ? offset3 = actualFrozenRow * options.rowHeight : offset3 = h : offset3 = 0 : row >= actualFrozenRow ? offset3 = frozenRowsHeight : offset3 = 0 : offset3 = 0, offset3;
+ }
+ function getCellFromEvent(e) {
+ e instanceof EventData3 && (e = e.getNativeEvent());
+ var targetEvent = e.touches ? e.touches[0] : e, row, cell, cellNode = e.target.closest(".slick-cell");
+ if (!cellNode)
+ return null;
+ if (row = getRowFromNode(cellNode.parentNode), hasFrozenRows) {
+ var c = Utils5.offset(Utils5.parents(cellNode, ".grid-canvas")[0]), rowOffset = 0, isBottom = Utils5.parents(cellNode, ".grid-canvas-bottom").length;
+ isBottom && (rowOffset = options.frozenBottom ? Utils5.height(_canvasTopL) : frozenRowsHeight), row = getCellFromPoint(targetEvent.clientX - c.left, targetEvent.clientY - c.top + rowOffset + document.documentElement.scrollTop).row;
+ }
+ return cell = getCellFromNode(cellNode), row == null || cell == null ? null : {
+ row,
+ cell
+ };
+ }
+ function getCellNodeBox(row, cell) {
+ if (!cellExists(row, cell))
+ return null;
+ for (var frozenRowOffset = getFrozenRowOffset(row), y1 = getRowTop(row) - frozenRowOffset, y2 = y1 + options.rowHeight - 1, x1 = 0, i2 = 0; i2 < cell; i2++)
+ !columns[i2] || columns[i2].hidden || (x1 += columns[i2].width, options.frozenColumn == i2 && (x1 = 0));
+ var x2 = x1 + columns[cell].width;
+ return {
+ top: y1,
+ left: x1,
+ bottom: y2,
+ right: x2
+ };
+ }
+ function resetActiveCell() {
+ setActiveCellInternal(null, !1);
+ }
+ function setFocus() {
+ tabbingDirection == -1 ? _focusSink.focus() : _focusSink2.focus();
+ }
+ function scrollCellIntoView(row, cell, doPaging) {
+ if (scrollRowIntoView(row, doPaging), !(cell <= options.frozenColumn)) {
+ var colspan = getColspan(row, cell);
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);
+ }
+ }
+ function internalScrollColumnIntoView(left, right) {
+ var scrollRight = scrollLeft + Utils5.width(_viewportScrollContainerX) - (viewportHasVScroll ? scrollbarDimensions.width : 0);
+ left < scrollLeft ? (_viewportScrollContainerX.scrollLeft = left, handleScroll(), render()) : right > scrollRight && (_viewportScrollContainerX.scrollLeft = Math.min(left, right - _viewportScrollContainerX.clientWidth), handleScroll(), render());
+ }
+ function scrollColumnIntoView(cell) {
+ internalScrollColumnIntoView(columnPosLeft[cell], columnPosRight[cell]);
+ }
+ function setActiveCellInternal(newCell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent, e) {
+ activeCellNode !== null && (makeActiveCellNormal(), activeCellNode.classList.remove("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.remove("active");
+ }));
+ var activeCellChanged = activeCellNode !== newCell;
+ if (activeCellNode = newCell, activeCellNode != null) {
+ var activeCellOffset = Utils5.offset(activeCellNode), rowOffset = Math.floor(Utils5.offset(Utils5.parents(activeCellNode, ".grid-canvas")[0]).top), isBottom = Utils5.parents(activeCellNode, ".grid-canvas-bottom").length;
+ hasFrozenRows && isBottom && (rowOffset -= options.frozenBottom ? Utils5.height(_canvasTopL) : frozenRowsHeight);
+ var cell = getCellFromPoint(activeCellOffset.left, Math.ceil(activeCellOffset.top) - rowOffset);
+ activeRow = cell.row, activeCell = activePosX = activeCell = activePosX = getCellFromNode(activeCellNode), opt_editMode == null && (opt_editMode = activeRow == getDataLength() || options.autoEdit), options.showCellSelection && (activeCellNode.classList.add("active"), rowsCache[activeRow] && rowsCache[activeRow].rowNode.forEach(function(node) {
+ node.classList.add("active");
+ })), options.editable && opt_editMode && isCellPotentiallyEditable(activeRow, activeCell) && (clearTimeout(h_editorLoader), options.asyncEditorLoading ? h_editorLoader = setTimeout(function() {
+ makeActiveCellEditable(void 0, preClickModeOn, e);
+ }, options.asyncEditorLoadDelay) : makeActiveCellEditable(void 0, preClickModeOn, e));
+ } else
+ activeRow = activeCell = null;
+ suppressActiveCellChangedEvent || trigger(self.onActiveCellChanged, getActiveCell());
+ }
+ function clearTextSelection() {
+ if (document.selection && document.selection.empty)
+ try {
+ document.selection.empty();
+ } catch {
+ }
+ else if (window.getSelection) {
+ var sel = window.getSelection();
+ sel && sel.removeAllRanges && sel.removeAllRanges();
+ }
+ }
+ function isCellPotentiallyEditable(row, cell) {
+ var dataLength = getDataLength();
+ return !(row < dataLength && !getDataItem(row) || columns[cell].cannotTriggerInsert && row >= dataLength || !columns[cell] || columns[cell].hidden || !getEditor(row, cell));
+ }
+ function makeActiveCellNormal() {
+ if (currentEditor) {
+ if (trigger(self.onBeforeCellEditorDestroy, { editor: currentEditor }), currentEditor.destroy(), currentEditor = null, activeCellNode) {
+ var d = getDataItem(activeRow);
+ if (activeCellNode.classList.remove("editable"), activeCellNode.classList.remove("invalid"), d) {
+ var column = columns[activeCell], formatter = getFormatter(activeRow, column), formatterResult = formatter(activeRow, activeCell, getDataItemValueForColumn(d, column), column, d, self);
+ applyFormatResultToCellNode(formatterResult, activeCellNode), invalidatePostProcessingResults(activeRow);
+ }
+ }
+ navigator.userAgent.toLowerCase().match(/msie/) && clearTextSelection(), getEditorLock().deactivate(editController);
+ }
+ }
+ function makeActiveCellEditable(editor, preClickModeOn, e) {
+ if (activeCellNode) {
+ if (!options.editable)
+ throw new Error("SlickGrid makeActiveCellEditable : should never get called when options.editable is false");
+ if (clearTimeout(h_editorLoader), !!isCellPotentiallyEditable(activeRow, activeCell)) {
+ var columnDef = columns[activeCell], item = getDataItem(activeRow);
+ if (trigger(self.onBeforeEditCell, { row: activeRow, cell: activeCell, item, column: columnDef, target: "grid" }).getReturnValue() === !1) {
+ setFocus();
+ return;
+ }
+ getEditorLock().activate(editController), activeCellNode.classList.add("editable");
+ var useEditor = editor || getEditor(activeRow, activeCell);
+ !editor && !useEditor.suppressClearOnEdit && (activeCellNode.innerHTML = "");
+ var metadata = data.getItemMetadata && data.getItemMetadata(activeRow);
+ metadata = metadata && metadata.columns;
+ var columnMetaData = metadata && (metadata[columnDef.id] || metadata[activeCell]);
+ currentEditor = new useEditor({
+ grid: self,
+ gridPosition: absBox(_container),
+ position: absBox(activeCellNode),
+ container: activeCellNode,
+ column: columnDef,
+ columnMetaData,
+ item: item || {},
+ event: e,
+ commitChanges: commitEditAndSetFocus,
+ cancelChanges: cancelEditAndSetFocus
+ }), item && (currentEditor.loadValue(item), preClickModeOn && currentEditor.preClick && currentEditor.preClick()), serializedEditorValue = currentEditor.serializeValue(), currentEditor.position && handleActiveCellPositionChange();
+ }
+ }
+ }
+ function commitEditAndSetFocus() {
+ getEditorLock().commitCurrentEdit() && (setFocus(), options.autoEdit && !options.autoCommitEdit && navigateDown());
+ }
+ function cancelEditAndSetFocus() {
+ getEditorLock().cancelCurrentEdit() && setFocus();
+ }
+ function absBox(elem) {
+ var box = {
+ top: elem.offsetTop,
+ left: elem.offsetLeft,
+ bottom: 0,
+ right: 0,
+ width: elem.offsetWidth,
+ height: elem.offsetWidth,
+ visible: !0
+ };
+ box.bottom = box.top + box.height, box.right = box.left + box.width;
+ for (var offsetParent = elem.offsetParent; (elem = elem.parentNode) != document.body && elem != null; ) {
+ let styles = getComputedStyle(elem);
+ box.visible && elem.scrollHeight != elem.offsetHeight && styles.overflowY != "visible" && (box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight), box.visible && elem.scrollWidth != elem.offsetWidth && styles.overflowX != "visible" && (box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth), box.left -= elem.scrollLeft, box.top -= elem.scrollTop, elem === offsetParent && (box.left += elem.offsetLeft, box.top += elem.offsetTop, offsetParent = elem.offsetParent), box.bottom = box.top + box.height, box.right = box.left + box.width;
+ }
+ return box;
+ }
+ function getActiveCellPosition() {
+ return absBox(activeCellNode);
+ }
+ function getGridPosition() {
+ return absBox(_container);
+ }
+ function handleActiveCellPositionChange() {
+ if (activeCellNode && (trigger(self.onActiveCellPositionChanged, {}), currentEditor)) {
+ var cellBox = getActiveCellPosition();
+ currentEditor.show && currentEditor.hide && (cellBox.visible ? currentEditor.show() : currentEditor.hide()), currentEditor.position && currentEditor.position(cellBox);
+ }
+ }
+ function getCellEditor() {
+ return currentEditor;
+ }
+ function getActiveCell() {
+ return activeCellNode ? { row: activeRow, cell: activeCell } : null;
+ }
+ function getActiveCellNode() {
+ return activeCellNode;
+ }
+ function getTextSelection() {
+ var textSelection = null;
+ if (window.getSelection) {
+ var selection = window.getSelection();
+ selection.rangeCount > 0 && (textSelection = selection.getRangeAt(0));
+ }
+ return textSelection;
+ }
+ function setTextSelection(selection) {
+ if (window.getSelection && selection) {
+ var target = window.getSelection();
+ target.removeAllRanges(), target.addRange(selection);
+ }
+ }
+ function scrollRowIntoView(row, doPaging) {
+ if (!hasFrozenRows || !options.frozenBottom && row > actualFrozenRow - 1 || options.frozenBottom && row < actualFrozenRow - 1) {
+ var viewportScrollH = Utils5.height(_viewportScrollContainerY), rowNumber = hasFrozenRows && !options.frozenBottom ? row - options.frozenRow : row, rowAtTop = rowNumber * options.rowHeight, rowAtBottom = (rowNumber + 1) * options.rowHeight - viewportScrollH + (viewportHasHScroll ? scrollbarDimensions.height : 0);
+ (rowNumber + 1) * options.rowHeight > scrollTop + viewportScrollH + offset2 ? (scrollTo(doPaging ? rowAtTop : rowAtBottom), render()) : rowNumber * options.rowHeight < scrollTop + offset2 && (scrollTo(doPaging ? rowAtBottom : rowAtTop), render());
+ }
+ }
+ function scrollRowToTop(row) {
+ scrollTo(row * options.rowHeight), render();
+ }
+ function scrollPage(dir) {
+ var deltaRows = dir * numVisibleRows, bottomOfTopmostFullyVisibleRow = scrollTop + options.rowHeight - 1;
+ if (scrollTo((getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * options.rowHeight), render(), options.enableCellNavigation && activeRow != null) {
+ var row = activeRow + deltaRows, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ row >= dataLengthIncludingAddNew && (row = dataLengthIncludingAddNew - 1), row < 0 && (row = 0);
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ }
+ function navigatePageDown() {
+ scrollPage(1);
+ }
+ function navigatePageUp() {
+ scrollPage(-1);
+ }
+ function navigateTop() {
+ navigateToRow(0);
+ }
+ function navigateBottom() {
+ navigateToRow(getDataLength() - 1);
+ }
+ function navigateToRow(row) {
+ var num_rows = getDataLength();
+ if (!num_rows)
+ return !0;
+ if (row < 0 ? row = 0 : row >= num_rows && (row = num_rows - 1), scrollCellIntoView(row, 0, !0), options.enableCellNavigation && activeRow != null) {
+ for (var cell = 0, prevCell = null, prevActivePosX = activePosX; cell <= activePosX; )
+ canCellBeActive(row, cell) && (prevCell = cell), cell += getColspan(row, cell);
+ prevCell !== null ? (setActiveCellInternal(getCellNode(row, prevCell)), activePosX = prevActivePosX) : resetActiveCell();
+ }
+ return !0;
+ }
+ function getColspan(row, cell) {
+ var metadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (!metadata || !metadata.columns)
+ return 1;
+ var columnData = metadata.columns[columns[cell].id] || metadata.columns[cell], colspan = columnData && columnData.colspan;
+ return colspan === "*" ? colspan = columns.length - cell : colspan = colspan || 1, colspan;
+ }
+ function findFirstFocusableCell(row) {
+ for (var cell = 0; cell < columns.length; ) {
+ if (canCellBeActive(row, cell))
+ return cell;
+ cell += getColspan(row, cell);
+ }
+ return null;
+ }
+ function findLastFocusableCell(row) {
+ for (var cell = 0, lastFocusableCell = null; cell < columns.length; )
+ canCellBeActive(row, cell) && (lastFocusableCell = cell), cell += getColspan(row, cell);
+ return lastFocusableCell;
+ }
+ function gotoRight(row, cell, posX) {
+ if (cell >= columns.length)
+ return null;
+ do
+ cell += getColspan(row, cell);
+ while (cell < columns.length && !canCellBeActive(row, cell));
+ return cell < columns.length ? {
+ row,
+ cell,
+ posX: cell
+ } : null;
+ }
+ function gotoLeft(row, cell, posX) {
+ if (cell <= 0)
+ return null;
+ var firstFocusableCell = findFirstFocusableCell(row);
+ if (firstFocusableCell === null || firstFocusableCell >= cell)
+ return null;
+ for (var prev = {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ }, pos; ; ) {
+ if (pos = gotoRight(prev.row, prev.cell, prev.posX), !pos)
+ return null;
+ if (pos.cell >= cell)
+ return prev;
+ prev = pos;
+ }
+ }
+ function gotoDown(row, cell, posX) {
+ for (var prevCell, dataLengthIncludingAddNew = getDataLengthIncludingAddNew(); ; ) {
+ if (++row >= dataLengthIncludingAddNew)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoUp(row, cell, posX) {
+ for (var prevCell; ; ) {
+ if (--row < 0)
+ return null;
+ for (prevCell = cell = 0; cell <= posX; )
+ prevCell = cell, cell += getColspan(row, cell);
+ if (canCellBeActive(row, prevCell))
+ return {
+ row,
+ cell: prevCell,
+ posX
+ };
+ }
+ }
+ function gotoNext(row, cell, posX) {
+ if (row == null && cell == null && (row = cell = posX = 0, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ var pos = gotoRight(row, cell, posX);
+ if (pos)
+ return pos;
+ var firstFocusableCell = null, dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ for (row === dataLengthIncludingAddNew - 1 && row--; ++row < dataLengthIncludingAddNew; )
+ if (firstFocusableCell = findFirstFocusableCell(row), firstFocusableCell !== null)
+ return {
+ row,
+ cell: firstFocusableCell,
+ posX: firstFocusableCell
+ };
+ return null;
+ }
+ function gotoPrev(row, cell, posX) {
+ if (row == null && cell == null && (row = getDataLengthIncludingAddNew() - 1, cell = posX = columns.length - 1, canCellBeActive(row, cell)))
+ return {
+ row,
+ cell,
+ posX: cell
+ };
+ for (var pos, lastSelectableCell; !pos && (pos = gotoLeft(row, cell, posX), !pos); ) {
+ if (--row < 0)
+ return null;
+ cell = 0, lastSelectableCell = findLastFocusableCell(row), lastSelectableCell !== null && (pos = {
+ row,
+ cell: lastSelectableCell,
+ posX: lastSelectableCell
+ });
+ }
+ return pos;
+ }
+ function gotoRowStart(row, cell, posX) {
+ var newCell = findFirstFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function gotoRowEnd(row, cell, posX) {
+ var newCell = findLastFocusableCell(row);
+ return newCell === null ? null : {
+ row,
+ cell: newCell,
+ posX: newCell
+ };
+ }
+ function navigateRight() {
+ return navigate("right");
+ }
+ function navigateLeft() {
+ return navigate("left");
+ }
+ function navigateDown() {
+ return navigate("down");
+ }
+ function navigateUp() {
+ return navigate("up");
+ }
+ function navigateNext() {
+ return navigate("next");
+ }
+ function navigatePrev() {
+ return navigate("prev");
+ }
+ function navigateRowStart() {
+ return navigate("home");
+ }
+ function navigateRowEnd() {
+ return navigate("end");
+ }
+ function navigate(dir) {
+ if (!options.enableCellNavigation || !activeCellNode && dir != "prev" && dir != "next")
+ return !1;
+ if (!getEditorLock().commitCurrentEdit())
+ return !0;
+ setFocus();
+ var tabbingDirections = {
+ up: -1,
+ down: 1,
+ left: -1,
+ right: 1,
+ prev: -1,
+ next: 1,
+ home: -1,
+ end: 1
+ };
+ tabbingDirection = tabbingDirections[dir];
+ var stepFunctions = {
+ up: gotoUp,
+ down: gotoDown,
+ left: gotoLeft,
+ right: gotoRight,
+ prev: gotoPrev,
+ next: gotoNext,
+ home: gotoRowStart,
+ end: gotoRowEnd
+ }, stepFn = stepFunctions[dir], pos = stepFn(activeRow, activeCell, activePosX);
+ if (pos) {
+ if (hasFrozenRows && options.frozenBottom & pos.row == getDataLength())
+ return;
+ var isAddNewRow = pos.row == getDataLength();
+ return (!options.frozenBottom && pos.row >= actualFrozenRow || options.frozenBottom && pos.row < actualFrozenRow) && scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && options.emulatePagingWhenScrolling), setActiveCellInternal(getCellNode(pos.row, pos.cell)), activePosX = pos.posX, !0;
+ } else
+ return setActiveCellInternal(getCellNode(activeRow, activeCell)), !1;
+ }
+ function getCellNode(row, cell) {
+ if (rowsCache[row]) {
+ ensureCellNodesInRowsCache(row);
+ try {
+ return rowsCache[row].cellNodesByColumnIdx.length > cell ? rowsCache[row].cellNodesByColumnIdx[cell] : null;
+ } catch {
+ return rowsCache[row].cellNodesByColumnIdx[cell];
+ }
+ }
+ return null;
+ }
+ function setActiveCell(row, cell, opt_editMode, preClickModeOn, suppressActiveCellChangedEvent) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || options.enableCellNavigation && (scrollCellIntoView(row, cell, !1), setActiveCellInternal(getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent)));
+ }
+ function setActiveRow(row, cell, suppressScrollIntoView) {
+ initialized && (row > getDataLength() || row < 0 || cell >= columns.length || cell < 0 || (activeRow = row, suppressScrollIntoView || scrollCellIntoView(row, cell || 0, !1)));
+ }
+ function canCellBeActive(row, cell) {
+ if (!options.enableCellNavigation || row >= getDataLengthIncludingAddNew() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.focusable < "u")
+ return !!rowMetadata.focusable;
+ var columnMetadata = rowMetadata && rowMetadata.columns;
+ return columnMetadata && columnMetadata[columns[cell].id] && typeof columnMetadata[columns[cell].id].focusable < "u" ? !!columnMetadata[columns[cell].id].focusable : columnMetadata && columnMetadata[cell] && typeof columnMetadata[cell].focusable < "u" ? !!columnMetadata[cell].focusable : !!columns[cell].focusable;
+ }
+ function canCellBeSelected(row, cell) {
+ if (row >= getDataLength() || row < 0 || cell >= columns.length || cell < 0 || !columns[cell] || columns[cell].hidden)
+ return !1;
+ var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
+ if (rowMetadata && typeof rowMetadata.selectable < "u")
+ return !!rowMetadata.selectable;
+ var columnMetadata = rowMetadata && rowMetadata.columns && (rowMetadata.columns[columns[cell].id] || rowMetadata.columns[cell]);
+ return columnMetadata && typeof columnMetadata.selectable < "u" ? !!columnMetadata.selectable : !!columns[cell].selectable;
+ }
+ function gotoCell(row, cell, forceEdit, e) {
+ if (initialized && canCellBeActive(row, cell) && getEditorLock().commitCurrentEdit()) {
+ scrollCellIntoView(row, cell, !1);
+ var newCell = getCellNode(row, cell), column = columns[cell], suppressActiveCellChangedEvent = !!(options.editable && column && column.editor && options.suppressActiveCellChangeOnEdit);
+ setActiveCellInternal(newCell, forceEdit || row === getDataLength() || options.autoEdit, null, suppressActiveCellChangedEvent, e), currentEditor || setFocus();
+ }
+ }
+ function commitCurrentEdit() {
+ var item = getDataItem(activeRow), column = columns[activeCell];
+ if (currentEditor) {
+ if (currentEditor.isValueChanged()) {
+ var validationResults = currentEditor.validate();
+ if (validationResults.valid) {
+ if (activeRow < getDataLength()) {
+ var editCommand = {
+ row: activeRow,
+ cell: activeCell,
+ editor: currentEditor,
+ serializedValue: currentEditor.serializeValue(),
+ prevSerializedValue: serializedEditorValue,
+ execute: function() {
+ this.editor.applyValue(item, this.serializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "execute",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ },
+ undo: function() {
+ this.editor.applyValue(item, this.prevSerializedValue), updateRow(this.row), trigger(self.onCellChange, {
+ command: "undo",
+ row: this.row,
+ cell: this.cell,
+ item,
+ column
+ });
+ }
+ };
+ options.editCommandHandler ? (makeActiveCellNormal(), options.editCommandHandler(item, column, editCommand)) : (editCommand.execute(), makeActiveCellNormal());
+ } else {
+ var newItem = {};
+ currentEditor.applyValue(newItem, currentEditor.serializeValue()), makeActiveCellNormal(), trigger(self.onAddNewRow, { item: newItem, column });
+ }
+ return !getEditorLock().isActive();
+ } else
+ return activeCellNode.classList.remove("invalid"), Utils5.width(activeCellNode), activeCellNode.classList.add("invalid"), trigger(self.onValidationError, {
+ editor: currentEditor,
+ cellNode: activeCellNode,
+ validationResults,
+ row: activeRow,
+ cell: activeCell,
+ column
+ }), currentEditor.focus(), !1;
+ }
+ makeActiveCellNormal();
+ }
+ return !0;
+ }
+ function cancelCurrentEdit() {
+ return makeActiveCellNormal(), !0;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = columns.length - 1, i2 = 0; i2 < rows.length; i2++)
+ ranges.push(new SlickRange(rows[i2], 0, rows[i2], lastCell));
+ return ranges;
+ }
+ function getSelectedRows() {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ return selectedRows.slice(0);
+ }
+ function setSelectedRows(rows, caller) {
+ if (!selectionModel)
+ throw new Error("SlickGrid Selection model is not set");
+ self && self.getEditorLock && !self.getEditorLock().isActive() && selectionModel.setSelectedRanges(rowsToRanges(rows), caller || "SlickGrid.setSelectedRows");
+ }
+ var logMessageCount = 0, logMessageMaxCount = 30;
+ function sanitizeHtmlString(dirtyHtml, suppressLogging) {
+ if (!options.sanitizer || typeof dirtyHtml != "string")
+ return dirtyHtml;
+ var cleanHtml = options.sanitizer(dirtyHtml);
+ return !suppressLogging && options.logSanitizedHtml && logMessageCount <= logMessageMaxCount && cleanHtml !== dirtyHtml && (console.log("sanitizer altered html: " + dirtyHtml + " --> " + cleanHtml), logMessageCount === logMessageMaxCount && console.log("sanitizer: silencing messages after first " + logMessageMaxCount), logMessageCount++), cleanHtml;
+ }
+ this.debug = function() {
+ var s = "";
+ s += `
+counter_rows_rendered: ` + counter_rows_rendered, s += `
+counter_rows_removed: ` + counter_rows_removed, s += `
+renderedRows: ` + renderedRows, s += `
+numVisibleRows: ` + numVisibleRows, s += `
+maxSupportedCssHeight: ` + maxSupportedCssHeight, s += `
+n(umber of pages): ` + n, s += `
+(current) page: ` + page, s += `
+page height (ph): ` + ph, s += `
+vScrollDir: ` + vScrollDir, alert(s);
+ }, Utils5.extend(this, {
+ slickGridVersion: "4.0.0",
+ // Events
+ onScroll: new SlickEvent2(),
+ onBeforeSort: new SlickEvent2(),
+ onSort: new SlickEvent2(),
+ onHeaderMouseEnter: new SlickEvent2(),
+ onHeaderMouseLeave: new SlickEvent2(),
+ onHeaderRowMouseEnter: new SlickEvent2(),
+ onHeaderRowMouseLeave: new SlickEvent2(),
+ onHeaderContextMenu: new SlickEvent2(),
+ onHeaderClick: new SlickEvent2(),
+ onHeaderCellRendered: new SlickEvent2(),
+ onBeforeHeaderCellDestroy: new SlickEvent2(),
+ onHeaderRowCellRendered: new SlickEvent2(),
+ onFooterRowCellRendered: new SlickEvent2(),
+ onFooterContextMenu: new SlickEvent2(),
+ onFooterClick: new SlickEvent2(),
+ onBeforeHeaderRowCellDestroy: new SlickEvent2(),
+ onBeforeFooterRowCellDestroy: new SlickEvent2(),
+ onMouseEnter: new SlickEvent2(),
+ onMouseLeave: new SlickEvent2(),
+ onClick: new SlickEvent2(),
+ onDblClick: new SlickEvent2(),
+ onContextMenu: new SlickEvent2(),
+ onKeyDown: new SlickEvent2(),
+ onAddNewRow: new SlickEvent2(),
+ onBeforeAppendCell: new SlickEvent2(),
+ onValidationError: new SlickEvent2(),
+ onViewportChanged: new SlickEvent2(),
+ onColumnsReordered: new SlickEvent2(),
+ onColumnsDrag: new SlickEvent2(),
+ onColumnsResized: new SlickEvent2(),
+ onColumnsResizeDblClick: new SlickEvent2(),
+ onBeforeColumnsResize: new SlickEvent2(),
+ onCellChange: new SlickEvent2(),
+ onCompositeEditorChange: new SlickEvent2(),
+ onBeforeEditCell: new SlickEvent2(),
+ onBeforeCellEditorDestroy: new SlickEvent2(),
+ onBeforeDestroy: new SlickEvent2(),
+ onActiveCellChanged: new SlickEvent2(),
+ onActiveCellPositionChanged: new SlickEvent2(),
+ onDragInit: new SlickEvent2(),
+ onDragStart: new SlickEvent2(),
+ onDrag: new SlickEvent2(),
+ onDragEnd: new SlickEvent2(),
+ onSelectedRowsChanged: new SlickEvent2(),
+ onCellCssStylesChanged: new SlickEvent2(),
+ onAutosizeColumns: new SlickEvent2(),
+ onBeforeSetColumns: new SlickEvent2(),
+ onBeforeUpdateColumns: new SlickEvent2(),
+ onRendered: new SlickEvent2(),
+ onSetOptions: new SlickEvent2(),
+ // Methods
+ registerPlugin,
+ unregisterPlugin,
+ getPluginByName,
+ getColumns,
+ setColumns,
+ updateColumns,
+ getVisibleColumns,
+ getColumnIndex,
+ updateColumnHeader,
+ setSortColumn,
+ setSortColumns,
+ getSortColumns,
+ autosizeColumns,
+ autosizeColumn,
+ getOptions,
+ setOptions,
+ getData,
+ getDataLength,
+ getDataItem,
+ setData,
+ getSelectionModel,
+ setSelectionModel,
+ getSelectedRows,
+ setSelectedRows,
+ getContainerNode,
+ updatePagingStatusFromView,
+ applyFormatResultToCellNode,
+ render,
+ reRenderColumns,
+ invalidate,
+ invalidateRow,
+ invalidateRows,
+ invalidateAllRows,
+ updateCell,
+ updateRow,
+ getViewport: getVisibleRange,
+ getRenderedRange,
+ resizeCanvas,
+ updateRowCount,
+ scrollRowIntoView,
+ scrollRowToTop,
+ scrollCellIntoView,
+ scrollColumnIntoView,
+ getCanvasNode,
+ getUID,
+ getHeaderColumnWidthDiff,
+ getScrollbarDimensions,
+ getHeadersWidth,
+ getCanvasWidth,
+ getCanvases,
+ getActiveCanvasNode,
+ getViewportNode,
+ getViewports,
+ getActiveViewportNode,
+ setActiveViewportNode,
+ focus: setFocus,
+ scrollTo,
+ cacheCssForHiddenInit,
+ restoreCssFromHiddenInit,
+ getCellFromPoint,
+ getCellFromEvent,
+ getActiveCell,
+ setActiveCell,
+ setActiveRow,
+ getActiveCellNode,
+ getActiveCellPosition,
+ resetActiveCell,
+ editActiveCell: makeActiveCellEditable,
+ getCellEditor,
+ getCellNode,
+ getCellNodeBox,
+ canCellBeSelected,
+ canCellBeActive,
+ navigatePrev,
+ navigateNext,
+ navigateUp,
+ navigateDown,
+ navigateLeft,
+ navigateRight,
+ navigatePageUp,
+ navigatePageDown,
+ navigateTop,
+ navigateBottom,
+ navigateRowStart,
+ navigateRowEnd,
+ gotoCell,
+ getTopPanel,
+ getTopPanels,
+ setTopPanelVisibility,
+ getPreHeaderPanel,
+ getPreHeaderPanelLeft: getPreHeaderPanel,
+ getPreHeaderPanelRight,
+ setPreHeaderPanelVisibility,
+ getHeader,
+ getHeaderColumn,
+ setHeaderRowVisibility,
+ getHeaderRow,
+ getHeaderRowColumn,
+ setFooterRowVisibility,
+ getFooterRow,
+ getFooterRowColumn,
+ getGridPosition,
+ flashCell,
+ addCellCssStyles,
+ setCellCssStyles,
+ removeCellCssStyles,
+ getCellCssStyles,
+ getFrozenRowOffset,
+ setColumnHeaderVisibility,
+ sanitizeHtmlString,
+ getDisplayedScrollbarDimensions,
+ getAbsoluteColumnMinWidth,
+ init: finishInitialization,
+ destroy,
+ // IEditor implementation
+ getEditorLock,
+ getEditController
+ }), init();
+}
+
+// src/controls/slick.columnpicker.js
+var BindingEventService3 = BindingEventService, SlickEvent3 = Event, Utils6 = Utils;
+function SlickColumnPicker(columns, grid, options) {
+ var _grid = grid, _options = options, _gridUid = grid && grid.getUID ? grid.getUID() : "", _columnTitleElm, _listElm, _menuElm, columnCheckboxes, onColumnsChanged = new SlickEvent3(), _bindingEventService = new BindingEventService3(), defaults2 = {
+ fadeSpeed: 250,
+ // the last 2 checkboxes titles
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ syncResizeTitle: "Synchronous resize",
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ };
+ function init(grid2) {
+ grid2.onHeaderContextMenu.subscribe(handleHeaderContextMenu), grid2.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils6.extend({}, defaults2, options), _menuElm = document.createElement("div"), _menuElm.className = `slick-columnpicker ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-columnpicker", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _options.columnPickerTitle || _options.columnPicker && _options.columnPicker.columnTitle) {
+ var columnTitle = _options.columnPickerTitle || _options.columnPicker.columnTitle;
+ _columnTitleElm = document.createElement("div"), _columnTitleElm.className = "slick-gridmenu-custom", _columnTitleElm.textContent = columnTitle, _menuElm.appendChild(_columnTitleElm);
+ }
+ _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-columnpicker-list", _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _bindingEventService.unbindAll(), _listElm && _listElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && (_menuElm.setAttribute("aria-expanded", "false"), _menuElm.style.display = "none");
+ }
+ function handleHeaderContextMenu(e) {
+ e.preventDefault(), Utils6.emptyElement(_listElm), updateColumnOrder(), columnCheckboxes = [];
+ let columnId, columnLabel, excludeCssClass;
+ for (var i2 = 0; i2 < columns.length; i2++) {
+ columnId = columns[i2].id, excludeCssClass = columns[i2].excludeFromColumnPicker ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i2] && columns[i2].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i2].id, liElm.appendChild(checkboxElm), columnCheckboxes.push(checkboxElm), _grid.getColumnIndex(columnId) != null && !columns[i2].hidden && (checkboxElm.checked = !0), _options && _options.columnPicker && _options.columnPicker.headerColumnValueExtractor ? columnLabel = _options.columnPicker.headerColumnValueExtractor(columns[i2], _options) : columnLabel = defaults2.headerColumnValueExtractor(columns[i2], _options);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.columnPicker && (!_options.columnPicker.hideForceFitButton || !_options.columnPicker.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.columnPicker && _options.columnPicker.hideForceFitButton)) {
+ let forceFitTitle = _options.columnPicker && _options.columnPicker.forceFitTitle || _options.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.columnPicker && _options.columnPicker.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.columnPicker && _options.columnPicker.syncResizeTitle || _options.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ repositionMenu(e);
+ }
+ function repositionMenu(event) {
+ let targetEvent = event && event.touches && event.touches[0] || event;
+ _menuElm.style.top = `${targetEvent.pageY - 10}px`, _menuElm.style.left = `${targetEvent.pageX - 10}px`, _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`, _menuElm.style.display = "block", _menuElm.setAttribute("aria-expanded", "true"), _menuElm.appendChild(_listElm);
+ }
+ function updateColumnOrder() {
+ let current = _grid.getColumns().slice(0), ordered = new Array(columns.length);
+ for (let i2 = 0; i2 < ordered.length; i2++)
+ _grid.getColumnIndex(columns[i2].id) === void 0 ? ordered[i2] = columns[i2] : ordered[i2] = current.shift();
+ columns = ordered;
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ e.target.checked ? _grid.setOptions({ syncColumnCellResize: !0 }) : _grid.setOptions({ syncColumnCellResize: !1 });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columns[idx].hidden !== void 0 && (columns[idx].hidden = !columnCheckbox.checked), columnCheckbox.checked && visibleColumns.push(columns[idx]);
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId, showing: isChecked2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ }
+ function setColumnVisibiliy(idxOrId, show2) {
+ var idx = typeof idxOrId == "number" ? idxOrId : getColumnIndexbyId(idxOrId), sVisible = !!_grid.getColumnIndex(columns[idx].id), visibleColumns = getVisibleColumns(), col = columns[idx];
+ if (show2)
+ col.hidden = !1, visibleColumns.splice(idx, 0, col);
+ else {
+ let newVisibleColumns = [];
+ for (let i2 = 0; i2 < visibleColumns.length; i2++)
+ visibleColumns[i2].id !== col.id && newVisibleColumns.push(visibleColumns[i2]);
+ visibleColumns = newVisibleColumns;
+ }
+ _grid.setColumns(visibleColumns), onColumnsChanged.notify({ columnId: col.id, showing: show2, allColumns: columns, columns: visibleColumns, grid: _grid });
+ }
+ function getAllColumns() {
+ return columns;
+ }
+ function getColumnbyId(id) {
+ for (let i2 = 0; i2 < columns.length; i2++)
+ if (columns[i2].id === id)
+ return columns[i2];
+ return null;
+ }
+ function getColumnIndexbyId(id) {
+ for (let i2 = 0; i2 < columns.length; i2++)
+ if (columns[i2].id === id)
+ return i2;
+ return -1;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ return init(_grid), {
+ init,
+ getAllColumns,
+ getColumnbyId,
+ getColumnIndexbyId,
+ getVisibleColumns,
+ destroy,
+ updateAllTitles,
+ onColumnsChanged,
+ setColumnVisibiliy
+ };
+}
+
+// src/controls/slick.gridmenu.js
+var BindingEventService4 = BindingEventService, SlickEvent4 = Event, Utils7 = Utils;
+function SlickGridMenu(columns, grid, options) {
+ var _grid = grid, _gridOptions, _gridUid = grid && grid.getUID ? grid.getUID() : "", _isMenuOpen = !1, _options = options, _self = this, _columnTitleElm, _customTitleElm, _customMenuElm, _headerElm, _listElm, _buttonElm, _menuElm, columnCheckboxes, _defaults = {
+ showButton: !0,
+ hideForceFitButton: !1,
+ hideSyncResizeButton: !1,
+ forceFitTitle: "Force fit columns",
+ marginBottom: 15,
+ menuWidth: 18,
+ contentMinWidth: 0,
+ resizeOnShowHeaderRow: !1,
+ syncResizeTitle: "Synchronous resize",
+ useClickToRepositionMenu: !0,
+ headerColumnValueExtractor: function(columnDef) {
+ return columnDef.name;
+ }
+ }, _bindingEventService = new BindingEventService4();
+ grid.onSetOptions.subscribe(function(e, args) {
+ if (args && args.optionsBefore && args.optionsAfter) {
+ var switchedFromRegularToFrozen = args.optionsBefore.frozenColumn >= 0 && args.optionsAfter.frozenColumn === -1, switchedFromFrozenToRegular = args.optionsBefore.frozenColumn === -1 && args.optionsAfter.frozenColumn >= 0;
+ (switchedFromRegularToFrozen || switchedFromFrozenToRegular) && recreateGridMenu();
+ }
+ });
+ function init(grid2) {
+ _gridOptions = grid2.getOptions(), createGridMenu(), grid2.onBeforeDestroy.subscribe(destroy);
+ }
+ function setOptions(newOptions) {
+ options = Utils7.extend({}, options, newOptions);
+ }
+ function createGridMenu() {
+ var gridMenuWidth = _options.gridMenu && _options.gridMenu.menuWidth || _defaults.menuWidth;
+ _gridOptions && _gridOptions.hasOwnProperty("frozenColumn") && _gridOptions.frozenColumn >= 0 ? _headerElm = document.querySelector(`.${_gridUid} .slick-header-right`) : _headerElm = document.querySelector(`.${_gridUid} .slick-header-left`), _headerElm.style.width = `calc(100% - ${gridMenuWidth}px)`;
+ var enableResizeHeaderRow = _options.gridMenu && _options.gridMenu.resizeOnShowHeaderRow != null ? _options.gridMenu.resizeOnShowHeaderRow : _defaults.resizeOnShowHeaderRow;
+ if (enableResizeHeaderRow && _options.showHeaderRow) {
+ let headerRow = document.querySelector(`.${_gridUid}.slick-headerrow`);
+ headerRow && (headerRow.style.width = `calc(100% - ${gridMenuWidth}px)`);
+ }
+ var showButton = _options.gridMenu && _options.gridMenu.showButton !== void 0 ? _options.gridMenu.showButton : _defaults.showButton;
+ if (showButton) {
+ if (_buttonElm = document.createElement("button"), _buttonElm.className = "slick-gridmenu-button", _buttonElm.ariaLabel = "Grid Menu", _options.gridMenu && _options.gridMenu.iconImage) {
+ let iconImageElm = document.createElement("img");
+ iconImageElm.src = _options.gridMenu.iconImage, _buttonElm.appendChild(iconImageElm);
+ } else
+ _options.gridMenu && _options.gridMenu.iconCssClass ? _buttonElm.classList.add(..._options.gridMenu.iconCssClass.split(" ")) : _buttonElm.classList.add("sgi", "sgi-menu");
+ options.iconCssClass && _buttonElm.classList.add(...options.iconCssClass.split(" ")), _headerElm.parentElement.insertBefore(_buttonElm, _headerElm.parentElement.firstChild), _bindingEventService.bind(_buttonElm, "click", showGridMenu);
+ }
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-gridmenu ${_gridUid}`, _menuElm.style.display = "none", document.body.appendChild(_menuElm);
+ let buttonElm = document.createElement("button");
+ buttonElm.type = "button", buttonElm.className = "close", buttonElm.dataset.dismiss = "slick-gridmenu", buttonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", buttonElm.appendChild(spanCloseElm), _menuElm.appendChild(buttonElm), _customMenuElm = document.createElement("div"), _customMenuElm.className = "slick-gridmenu-custom", _customMenuElm.role = "menu", _menuElm.appendChild(_customMenuElm), populateCustomMenus(_options, _customMenuElm), populateColumnPicker(), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown), _bindingEventService.bind(document.body, "beforeunload", destroy);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onColumnsChanged.unsubscribe(), _grid.onColumnsReordered.unsubscribe(updateColumnOrder), _grid.onBeforeDestroy.unsubscribe(), _grid.onSetOptions.unsubscribe(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), deleteMenu();
+ }
+ function deleteMenu() {
+ _bindingEventService.unbindAll();
+ let gridMenuElm = document.querySelector(`div.slick-gridmenu.${_gridUid}`);
+ gridMenuElm && (gridMenuElm.style.display = "none"), _headerElm && (_headerElm.style.width = "100%"), _buttonElm && _buttonElm.remove(), _menuElm && _menuElm.remove();
+ }
+ function populateCustomMenus(options2, customMenuElm) {
+ if (!(!options2.gridMenu || !options2.gridMenu.customItems)) {
+ _options.gridMenu && _options.gridMenu.customTitle && (_customTitleElm = document.createElement("div"), _customTitleElm.className = "title", _customTitleElm.innerHTML = _options.gridMenu.customTitle, customMenuElm.appendChild(_customTitleElm));
+ for (let i2 = 0, ln = options2.gridMenu.customItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = options2.gridMenu.customItems[i2], callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ columns,
+ visibleColumns: getVisibleColumns()
+ }, isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-gridmenu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-gridmenu-item-divider"), addClickListener = !1), item.disabled && liElm.classList.add("slick-gridmenu-item-disabled"), item.hidden && liElm.classList.add("slick-gridmenu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-gridmenu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-gridmenu-content", textElm.innerHTML = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), customMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemClick.bind(this, item));
+ }
+ }
+ }
+ function populateColumnPicker() {
+ _grid.onColumnsReordered.subscribe(updateColumnOrder), _options = Utils7.extend({}, _defaults, _options), _options.gridMenu && _options.gridMenu.columnTitle && (_columnTitleElm = document.createElement("div"), _columnTitleElm.className = "title", _columnTitleElm.innerHTML = _options.gridMenu.columnTitle, _menuElm.appendChild(_columnTitleElm)), _bindingEventService.bind(_menuElm, "click", updateColumn), _listElm = document.createElement("span"), _listElm.className = "slick-gridmenu-list", _listElm.role = "menu";
+ }
+ function recreateGridMenu() {
+ deleteMenu(), init(_grid);
+ }
+ function showGridMenu(e) {
+ var targetEvent = e.touches ? e.touches[0] : e;
+ e.preventDefault(), Utils7.emptyElement(_listElm), Utils7.emptyElement(_customMenuElm), populateCustomMenus(_options, _customMenuElm), updateColumnOrder(), columnCheckboxes = [];
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_options && _options.gridMenu && !runOverrideFunctionWhenExists(_options.gridMenu.menuUsabilityOverride, callbackArgs) || typeof e.stopPropagation == "function" && _self.onBeforeMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ let columnId, columnLabel, excludeCssClass;
+ for (let i2 = 0; i2 < columns.length; i2++) {
+ columnId = columns[i2].id, excludeCssClass = columns[i2].excludeFromGridMenu ? "hidden" : "";
+ let liElm = document.createElement("li");
+ liElm.className = excludeCssClass, liElm.ariaLabel = columns[i2] && columns[i2].name;
+ let checkboxElm = document.createElement("input");
+ checkboxElm.type = "checkbox", checkboxElm.id = `${_gridUid}-gridmenu-colpicker-${columnId}`, checkboxElm.dataset.columnid = columns[i2].id, liElm.appendChild(checkboxElm), _grid.getColumnIndex(columns[i2].id) != null && !columns[i2].hidden && (checkboxElm.checked = !0), columnCheckboxes.push(checkboxElm), _options && _options.gridMenu && _options.gridMenu.headerColumnValueExtractor ? columnLabel = _options.gridMenu.headerColumnValueExtractor(columns[i2], _gridOptions) : columnLabel = _defaults.headerColumnValueExtractor(columns[i2], _gridOptions);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-${columnId}`, labelElm.innerHTML = columnLabel, liElm.appendChild(labelElm), _listElm.appendChild(liElm);
+ }
+ if (_options.gridMenu && (!_options.gridMenu.hideForceFitButton || !_options.gridMenu.hideSyncResizeButton) && _listElm.appendChild(document.createElement("hr")), !(_options.gridMenu && _options.gridMenu.hideForceFitButton)) {
+ let forceFitTitle = _options.gridMenu && _options.gridMenu.forceFitTitle || _defaults.forceFitTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = forceFitTitle, liElm.role = "menuitem", _listElm.appendChild(liElm);
+ let forceFitCheckboxElm = document.createElement("input");
+ forceFitCheckboxElm.type = "checkbox", forceFitCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-forcefit`, forceFitCheckboxElm.dataset.option = "autoresize", liElm.appendChild(forceFitCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-forcefit`, labelElm.textContent = forceFitTitle, liElm.appendChild(labelElm), _grid.getOptions().forceFitColumns && (forceFitCheckboxElm.checked = !0);
+ }
+ if (!(_options.gridMenu && _options.gridMenu.hideSyncResizeButton)) {
+ let syncResizeTitle = _options.gridMenu && _options.gridMenu.syncResizeTitle || _defaults.syncResizeTitle, liElm = document.createElement("li");
+ liElm.ariaLabel = syncResizeTitle, _listElm.appendChild(liElm);
+ let syncResizeCheckboxElm = document.createElement("input");
+ syncResizeCheckboxElm.type = "checkbox", syncResizeCheckboxElm.id = `${_gridUid}-gridmenu-colpicker-syncresize`, syncResizeCheckboxElm.dataset.option = "syncresize", liElm.appendChild(syncResizeCheckboxElm);
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `${_gridUid}-gridmenu-colpicker-syncresize`, labelElm.textContent = syncResizeTitle, liElm.appendChild(labelElm), _grid.getOptions().syncColumnCellResize && (syncResizeCheckboxElm.checked = !0);
+ }
+ let buttonElm = e.target.nodeName === "BUTTON" ? e.target : e.target.querySelector("button");
+ buttonElm || (buttonElm = e.target.parentElement), _menuElm.style.display = "block", _menuElm.style.opacity = "0";
+ let menuIconOffset = Utils7.offset(buttonElm), menuWidth = _menuElm.offsetWidth, useClickToRepositionMenu = _options.gridMenu && _options.gridMenu.useClickToRepositionMenu !== void 0 ? _options.gridMenu.useClickToRepositionMenu : _defaults.useClickToRepositionMenu, contentMinWidth = _options.gridMenu && _options.gridMenu.contentMinWidth ? _options.gridMenu.contentMinWidth : _defaults.contentMinWidth, currentMenuWidth = contentMinWidth > menuWidth ? contentMinWidth : menuWidth + 5, nextPositionTop = useClickToRepositionMenu && targetEvent.pageY > 0 ? targetEvent.pageY : menuIconOffset.top + 10, nextPositionLeft = useClickToRepositionMenu && targetEvent.pageX > 0 ? targetEvent.pageX : menuIconOffset.left + 10, menuMarginBottom = _options.gridMenu && _options.gridMenu.marginBottom !== void 0 ? _options.gridMenu.marginBottom : _defaults.marginBottom;
+ _menuElm.style.top = `${nextPositionTop + 10}px`, _menuElm.style.left = `${nextPositionLeft - currentMenuWidth + 10}px`, contentMinWidth > 0 && (_menuElm.style.minWidth = `${contentMinWidth}px`), _options.gridMenu && _options.gridMenu.height !== void 0 ? _menuElm.style.height = `${_options.gridMenu.height}px` : _menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY - menuMarginBottom}px`, _menuElm.style.display = "block", _menuElm.style.opacity = "1", _menuElm.appendChild(_listElm), _isMenuOpen = !0, typeof e.stopPropagation == "function" && _self.onAfterMenuShow.notify(callbackArgs, e, _self).getReturnValue() == !1;
+ }
+ function handleBodyMouseDown(event) {
+ (_menuElm !== event.target && !(_menuElm && _menuElm.contains(event.target)) && _isMenuOpen || event.target.className === "close") && hideMenu(event);
+ }
+ function handleMenuItemClick(item, e) {
+ let command = item.command || "";
+ if (!(item.disabled || item.divider || item === "divider")) {
+ if (command != null && command != "") {
+ var callbackArgs = {
+ grid: _grid,
+ command,
+ item,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ var leaveOpen = !!(_options.gridMenu && _options.gridMenu.leaveOpen);
+ !leaveOpen && !e.defaultPrevented && hideMenu(e), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function hideMenu(e) {
+ if (_menuElm) {
+ Utils7.hide(_menuElm), _isMenuOpen = !1;
+ var callbackArgs = {
+ grid: _grid,
+ menu: _menuElm,
+ allColumns: columns,
+ visibleColumns: getVisibleColumns()
+ };
+ if (_self.onMenuClose.notify(callbackArgs, e, _self).getReturnValue() == !1)
+ return;
+ }
+ }
+ function updateAllTitles(gridMenuOptions) {
+ _customTitleElm && _customTitleElm.innerHTML && (_customTitleElm.innerHTML = gridMenuOptions.customTitle), _columnTitleElm && _columnTitleElm.innerHTML && (_columnTitleElm.innerHTML = gridMenuOptions.columnTitle);
+ }
+ function updateColumnOrder() {
+ for (var current = _grid.getColumns().slice(0), ordered = new Array(columns.length), i2 = 0; i2 < ordered.length; i2++)
+ _grid.getColumnIndex(columns[i2].id) === void 0 ? ordered[i2] = columns[i2] : ordered[i2] = current.shift();
+ columns = ordered;
+ }
+ function updateColumn(e) {
+ if (e.target.dataset.option === "autoresize") {
+ var previousVisibleColumns = getVisibleColumns(), isChecked = e.target.checked;
+ _grid.setOptions({ forceFitColumns: isChecked }), _grid.setColumns(previousVisibleColumns);
+ return;
+ }
+ if (e.target.dataset.option === "syncresize") {
+ _grid.setOptions({ syncColumnCellResize: !!e.target.checked });
+ return;
+ }
+ if (e.target.type === "checkbox") {
+ let isChecked2 = e.target.checked, columnId = e.target.dataset.columnid || "", visibleColumns = [];
+ if (columnCheckboxes.forEach((columnCheckbox, idx) => {
+ columnCheckbox.checked && (columns[idx].hidden && (columns[idx].hidden = !1), visibleColumns.push(columns[idx]));
+ }), !visibleColumns.length) {
+ e.target.checked = !0;
+ return;
+ }
+ let callbackArgs = {
+ columnId,
+ showing: isChecked2,
+ grid: _grid,
+ allColumns: columns,
+ columns: visibleColumns
+ };
+ _grid.setColumns(visibleColumns), _self.onColumnsChanged.notify(callbackArgs, e, _self);
+ }
+ }
+ init(_grid);
+ function getAllColumns() {
+ return columns;
+ }
+ function getVisibleColumns() {
+ return _grid.getColumns();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils7.extend(this, {
+ init,
+ getAllColumns,
+ getVisibleColumns,
+ destroy,
+ deleteMenu,
+ recreateGridMenu,
+ showGridMenu,
+ setOptions,
+ updateAllTitles,
+ hideMenu,
+ onAfterMenuShow: new SlickEvent4(),
+ onBeforeMenuShow: new SlickEvent4(),
+ onMenuClose: new SlickEvent4(),
+ onCommand: new SlickEvent4(),
+ onColumnsChanged: new SlickEvent4()
+ });
+}
+
+// src/controls/slick.pager.js
+var BindingEventService5 = BindingEventService, GlobalEditorLock3 = GlobalEditorLock, Utils8 = Utils;
+function SlickGridPager(dataView, grid, selectorOrElm, options) {
+ let container = getContainerElement(selectorOrElm), statusElm, _options, _defaults = {
+ showAllText: "Showing all {rowCount} rows",
+ showPageText: "Showing page {pageNum} of {pageCount}",
+ showCountText: "From {countBegin} to {countEnd} of {rowCount} rows",
+ showCount: !1,
+ pagingOptions: [
+ { data: 0, name: "All", ariaLabel: "Show All Pages" },
+ { data: -1, name: "Auto", ariaLabel: "Auto Page Size" },
+ { data: 25, name: "25", ariaLabel: "Show 25 rows per page" },
+ { data: 50, name: "50", ariaLabel: "Show 50 rows per page" },
+ { data: 100, name: "100", ariaLabel: "Show 100 rows per page" }
+ ],
+ showPageSizes: !1
+ };
+ var _bindingEventService = new BindingEventService5();
+ function init() {
+ _options = Utils8.extend(!0, {}, _defaults, options), dataView.onPagingInfoChanged.subscribe(function(e, pagingInfo) {
+ updatePager(pagingInfo);
+ }), constructPagerUI(), updatePager(dataView.getPagingInfo());
+ }
+ function destroy() {
+ setPageSize(0), _bindingEventService.unbindAll(), container.innerHTML = "";
+ }
+ function getNavState() {
+ let cannotLeaveEditMode = !GlobalEditorLock3.commitCurrentEdit(), pagingInfo = dataView.getPagingInfo(), lastPage = pagingInfo.totalPages - 1;
+ return {
+ canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,
+ canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,
+ canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,
+ pagingInfo
+ };
+ }
+ function setPageSize(n) {
+ dataView.setRefreshHints({
+ isFilterUnchanged: !0
+ }), dataView.setPagingOptions({ pageSize: n });
+ }
+ function gotoFirst() {
+ getNavState().canGotoFirst && dataView.setPagingOptions({ pageNum: 0 });
+ }
+ function gotoLast() {
+ let state = getNavState();
+ state.canGotoLast && dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 });
+ }
+ function gotoPrev() {
+ let state = getNavState();
+ state.canGotoPrev && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 });
+ }
+ function gotoNext() {
+ let state = getNavState();
+ state.canGotoNext && dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 });
+ }
+ function getContainerElement(selectorOrElm2) {
+ return typeof selectorOrElm2 == "string" ? document.querySelector(selectorOrElm2) : typeof selectorOrElm2 == "object" && selectorOrElm2[0] ? selectorOrElm2[0] : selectorOrElm2;
+ }
+ function constructPagerUI() {
+ let container2 = getContainerElement(selectorOrElm);
+ if (!container2 || container2.jquery && !container2[0])
+ return;
+ let navElm = document.createElement("span");
+ navElm.className = "slick-pager-nav";
+ let settingsElm = document.createElement("span");
+ settingsElm.className = "slick-pager-settings", statusElm = document.createElement("span"), statusElm.className = "slick-pager-status";
+ let pagerSettingsElm = document.createElement("span");
+ pagerSettingsElm.className = "slick-pager-settings-expanded", pagerSettingsElm.textContent = "Show: ";
+ for (let o = 0; o < _options.pagingOptions.length; o++) {
+ let p = _options.pagingOptions[o], anchorElm = document.createElement("a");
+ anchorElm.textContent = p.name, anchorElm.ariaLabel = p.ariaLabel, anchorElm.dataset.val = p.data, pagerSettingsElm.appendChild(anchorElm), _bindingEventService.bind(anchorElm, "click", function(e) {
+ let pagesize = e.target.dataset.val;
+ if (pagesize !== void 0)
+ if (Number(pagesize) === -1) {
+ let vp = grid.getViewport();
+ setPageSize(vp.bottom - vp.top);
+ } else
+ setPageSize(parseInt(pagesize));
+ });
+ }
+ pagerSettingsElm.style.display = _options.showPageSizes ? "block" : "none", settingsElm.appendChild(pagerSettingsElm);
+ let displayPaginationContainer = document.createElement("span"), displayIconElm = document.createElement("span");
+ displayPaginationContainer.className = "sgi-container", displayIconElm.ariaLabel = "Show Pagination Options", displayIconElm.role = "button", displayIconElm.className = "sgi sgi-lightbulb", displayPaginationContainer.appendChild(displayIconElm), _bindingEventService.bind(displayIconElm, "click", () => {
+ let styleDisplay = pagerSettingsElm.style.display;
+ pagerSettingsElm.style.display = styleDisplay === "none" ? "inline-flex" : "none";
+ }), settingsElm.appendChild(displayPaginationContainer), [
+ { key: "start", ariaLabel: "First Page", callback: gotoFirst },
+ { key: "left", ariaLabel: "Previous Page", callback: gotoPrev },
+ { key: "right", ariaLabel: "Next Page", callback: gotoNext },
+ { key: "end", ariaLabel: "Last Page", callback: gotoLast }
+ ].forEach((pageBtn) => {
+ let iconElm = document.createElement("span");
+ iconElm.className = "sgi-container";
+ let innerIconElm = document.createElement("span");
+ innerIconElm.role = "button", innerIconElm.ariaLabel = pageBtn.ariaLabel, innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`, _bindingEventService.bind(innerIconElm, "click", pageBtn.callback), iconElm.appendChild(innerIconElm), navElm.appendChild(iconElm);
+ });
+ let slickPagerElm = document.createElement("div");
+ slickPagerElm.className = "slick-pager", slickPagerElm.appendChild(navElm), slickPagerElm.appendChild(statusElm), slickPagerElm.appendChild(settingsElm), container2.appendChild(slickPagerElm);
+ }
+ function updatePager(pagingInfo) {
+ if (!container || container.jquery && !container[0])
+ return;
+ let state = getNavState();
+ if (container.querySelectorAll(".slick-pager-nav span").forEach((pagerIcon) => pagerIcon.classList.remove("sgi-state-disabled")), state.canGotoFirst || container.querySelector(".sgi-chevron-start").classList.add("sgi-state-disabled"), state.canGotoLast || container.querySelector(".sgi-chevron-end").classList.add("sgi-state-disabled"), state.canGotoNext || container.querySelector(".sgi-chevron-right").classList.add("sgi-state-disabled"), state.canGotoPrev || container.querySelector(".sgi-chevron-left").classList.add("sgi-state-disabled"), pagingInfo.pageSize === 0 ? statusElm.textContent = _options.showAllText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{pageCount}", pagingInfo.totalPages + "") : statusElm.textContent = _options.showPageText.replace("{pageNum}", pagingInfo.pageNum + 1 + "").replace("{pageCount}", pagingInfo.totalPages + ""), _options.showCount && pagingInfo.pageSize !== 0) {
+ let pageBegin = pagingInfo.pageNum * pagingInfo.pageSize, currentText = statusElm.textContent;
+ currentText && (currentText += " - "), statusElm.textContent = currentText + _options.showCountText.replace("{rowCount}", pagingInfo.totalRows + "").replace("{countBegin}", pageBegin + 1).replace("{countEnd}", Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows));
+ }
+ }
+ init(), Utils8.extend(this, {
+ init,
+ destroy
+ });
+}
+
+// src/plugins/slick.autotooltips.ts
+var Utils9 = Utils;
+function SlickAutoTooltips(options) {
+ let _grid, _defaults = {
+ enableForCells: !0,
+ enableForHeaderCells: !1,
+ maxToolTipLength: void 0,
+ replaceExisting: !0
+ };
+ function init(grid) {
+ options = Utils9.extend(!0, {}, _defaults, options), _grid = grid, options.enableForCells && _grid.onMouseEnter.subscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.subscribe(handleHeaderMouseEnter);
+ }
+ function destroy() {
+ options.enableForCells && _grid.onMouseEnter.unsubscribe(handleMouseEnter), options.enableForHeaderCells && _grid.onHeaderMouseEnter.unsubscribe(handleHeaderMouseEnter);
+ }
+ function handleMouseEnter(event) {
+ let cell = _grid.getCellFromEvent(event);
+ if (cell) {
+ let node = _grid.getCellNode(cell.row, cell.cell), text;
+ options && node && (!node.title || options?.replaceExisting) && (node.clientWidth < node.scrollWidth ? (text = node.textContent?.trim() ?? "", options && options.maxToolTipLength && text.length > options.maxToolTipLength && (text = text.substring(0, options.maxToolTipLength - 3) + "...")) : text = "", node.title = text), node = null;
+ }
+ }
+ function handleHeaderMouseEnter(event, args) {
+ let column = args.column, node, targetElm = event.target;
+ targetElm && (node = targetElm.closest(".slick-header-column"), node && !(column && column.toolTip) && (node.title = targetElm.clientWidth < node.clientWidth ? column?.name ?? "" : "")), node = null;
+ }
+ return {
+ init,
+ destroy,
+ pluginName: "AutoTooltips"
+ };
+}
+
+// src/plugins/slick.cellcopymanager.js
+var keyCode5 = keyCode, SlickEvent5 = Event, Utils10 = Utils;
+function CellCopyManager() {
+ var _grid, _self = this, _copiedRanges;
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function handleKeyDown(e) {
+ var ranges;
+ _grid.getEditorLock().isActive() || (e.which == keyCode5.ESCAPE && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), e.which == 67 && (e.ctrlKey || e.metaKey) && (ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0 && (e.preventDefault(), _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges }))), e.which == 86 && (e.ctrlKey || e.metaKey) && _copiedRanges && (e.preventDefault(), ranges = _grid.getSelectionModel().getSelectedRanges(), _self.onPasteCells.notify({ from: _copiedRanges, to: ranges }), _grid.getOptions().preserveCopiedSelectionOnPaste || (clearCopySelection(), _copiedRanges = null)));
+ }
+ function markCopySelection(ranges) {
+ for (var columns = _grid.getColumns(), hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell; k++)
+ hash[j][columns[k].id] = "copied";
+ }
+ _grid.setCellCssStyles("copy-manager", hash);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles("copy-manager");
+ }
+ Utils10.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellCopyManager",
+ clearCopySelection,
+ onCopyCells: new SlickEvent5(),
+ onCopyCancelled: new SlickEvent5(),
+ onPasteCells: new SlickEvent5()
+ });
+}
+
+// src/plugins/slick.cellexternalcopymanager.js
+var SlickEvent6 = Event, Utils11 = Utils;
+function CellExternalCopyManager(options) {
+ var _grid, _self = this, _copiedRanges, _options = options || {}, _copiedCellStyleLayerKey = _options.copiedCellStyleLayerKey || "copy-manager", _copiedCellStyle = _options.copiedCellStyle || "copied", _clearCopyTI = 0, _bodyElement = _options.bodyElement || document.body, _onCopyInit = _options.onCopyInit || null, _onCopySuccess = _options.onCopySuccess || null, keyCodes = {
+ C: 67,
+ V: 86,
+ ESC: 27,
+ INSERT: 45
+ };
+ function init(grid) {
+ _grid = grid, _grid.onKeyDown.subscribe(handleKeyDown);
+ var cellSelectionModel = grid.getSelectionModel();
+ if (!cellSelectionModel)
+ throw new Error("Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())");
+ cellSelectionModel.onSelectedRangesChanged.subscribe(() => {
+ _grid.getEditorLock().isActive() || _grid.focus();
+ });
+ }
+ function destroy() {
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
+ }
+ function getHeaderValueForColumn(columnDef) {
+ if (_options.headerColumnValueExtractor) {
+ var val = _options.headerColumnValueExtractor(columnDef);
+ if (val)
+ return val;
+ }
+ return columnDef.name;
+ }
+ function getDataItemValueForColumn(item, columnDef, event) {
+ if (typeof _options.dataItemColumnValueExtractor == "function") {
+ let val = _options.dataItemColumnValueExtractor(item, columnDef);
+ if (val)
+ return val;
+ }
+ let retVal = "";
+ if (columnDef && columnDef.editor) {
+ let tmpP = document.createElement("p"), editor = new columnDef.editor({
+ container: tmpP,
+ // a dummy container
+ column: columnDef,
+ event,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), retVal = editor.serializeValue(), editor.destroy(), tmpP.remove();
+ } else
+ retVal = item[columnDef.field || ""];
+ return retVal;
+ }
+ function setDataItemValueForColumn(item, columnDef, value) {
+ if (columnDef.denyPaste)
+ return null;
+ if (_options.dataItemColumnValueSetter)
+ return _options.dataItemColumnValueSetter(item, columnDef, value);
+ if (columnDef.editor) {
+ let tmpDiv = document.createElement("div"), editor = new columnDef.editor({
+ container: tmpDiv,
+ // a dummy container
+ column: columnDef,
+ position: { top: 0, left: 0 },
+ // a dummy position required by some editors
+ grid: _grid
+ });
+ editor.loadValue(item), editor.applyValue(item, value), editor.destroy(), tmpDiv.remove();
+ } else
+ item[columnDef.field] = value;
+ }
+ function _createTextBox(innerText) {
+ var ta = document.createElement("textarea");
+ return ta.style.position = "absolute", ta.style.left = "-1000px", ta.style.top = document.body.scrollTop + "px", ta.value = innerText, _bodyElement.appendChild(ta), ta.select(), ta;
+ }
+ function _decodeTabularData(_grid2, ta) {
+ var columns = _grid2.getColumns(), clipText = ta.value, clipRows = clipText.split(/[\n\f\r]/);
+ clipRows[clipRows.length - 1] === "" && clipRows.pop();
+ var clippedRange = [], j = 0;
+ _bodyElement.removeChild(ta);
+ for (var i2 = 0; i2 < clipRows.length; i2++)
+ clipRows[i2] !== "" ? clippedRange[j++] = clipRows[i2].split(" ") : clippedRange[j++] = [""];
+ var selectedCell = _grid2.getActiveCell(), ranges = _grid2.getSelectionModel().getSelectedRanges(), selectedRange = ranges && ranges.length ? ranges[0] : null, activeRow = null, activeCell = null;
+ if (selectedRange)
+ activeRow = selectedRange.fromRow, activeCell = selectedRange.fromCell;
+ else if (selectedCell)
+ activeRow = selectedCell.row, activeCell = selectedCell.cell;
+ else
+ return;
+ var oneCellToMultiple = !1, destH = clippedRange.length, destW = clippedRange.length ? clippedRange[0].length : 0;
+ clippedRange.length == 1 && clippedRange[0].length == 1 && selectedRange && (oneCellToMultiple = !0, destH = selectedRange.toRow - selectedRange.fromRow + 1, destW = selectedRange.toCell - selectedRange.fromCell + 1);
+ var availableRows = _grid2.getData().length - activeRow, addRows = 0;
+ if (availableRows < destH && _options.newRowCreator) {
+ var d = _grid2.getData();
+ for (addRows = 1; addRows <= destH - availableRows; addRows++)
+ d.push({});
+ _grid2.setData(d), _grid2.render();
+ }
+ var overflowsBottomOfGrid = activeRow + destH > _grid2.getDataLength();
+ if (_options.newRowCreator && overflowsBottomOfGrid) {
+ var newRowsNeeded = activeRow + destH - _grid2.getDataLength();
+ _options.newRowCreator(newRowsNeeded);
+ }
+ var clipCommand = {
+ isClipboardCommand: !0,
+ clippedRange,
+ oldValues: [],
+ cellExternalCopyManager: _self,
+ _options,
+ setDataItemValueForColumn,
+ markCopySelection,
+ oneCellToMultiple,
+ activeRow,
+ activeCell,
+ destH,
+ destW,
+ maxDestY: _grid2.getDataLength(),
+ maxDestX: _grid2.getColumns().length,
+ h: 0,
+ w: 0,
+ execute: function() {
+ this.h = 0;
+ for (var y = 0; y < this.destH; y++) {
+ this.oldValues[y] = [], this.w = 0, this.h++;
+ for (var x = 0; x < this.destW; x++) {
+ this.w++;
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ this.oldValues[y][x] = dt[columns[destx].field], oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], clippedRange[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], clippedRange[y] ? clippedRange[y][x] : ""), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] });
+ },
+ undo: function() {
+ for (var y = 0; y < this.destH; y++)
+ for (var x = 0; x < this.destW; x++) {
+ var desty = activeRow + y, destx = activeCell + x;
+ if (desty < this.maxDestY && destx < this.maxDestX) {
+ var nd = _grid2.getCellNode(desty, destx), dt = _grid2.getDataItem(desty);
+ oneCellToMultiple ? this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[0][0]) : this.setDataItemValueForColumn(dt, columns[destx], this.oldValues[y][x]), _grid2.updateCell(desty, destx), _grid2.onCellChange.notify({
+ row: desty,
+ cell: destx,
+ item: dt,
+ grid: _grid2
+ });
+ }
+ }
+ var bRange = {
+ fromCell: activeCell,
+ fromRow: activeRow,
+ toCell: activeCell + this.w - 1,
+ toRow: activeRow + this.h - 1
+ };
+ if (this.markCopySelection([bRange]), _grid2.getSelectionModel().setSelectedRanges([bRange]), this.cellExternalCopyManager.onPasteCells.notify({ ranges: [bRange] }), addRows > 1) {
+ for (var d2 = _grid2.getData(); addRows > 1; addRows--)
+ d2.splice(d2.length - 1, 1);
+ _grid2.setData(d2), _grid2.render();
+ }
+ }
+ };
+ _options.clipboardCommandHandler ? _options.clipboardCommandHandler(clipCommand) : clipCommand.execute();
+ }
+ function handleKeyDown(e, args) {
+ var ranges;
+ if (!_grid.getEditorLock().isActive() || _grid.getOptions().autoEdit) {
+ if (e.which == keyCodes.ESC && _copiedRanges && (e.preventDefault(), clearCopySelection(), _self.onCopyCancelled.notify({ ranges: _copiedRanges }), _copiedRanges = null), (e.which === keyCodes.C || e.which === keyCodes.INSERT) && (e.ctrlKey || e.metaKey) && !e.shiftKey && (_onCopyInit && _onCopyInit.call(), ranges = _grid.getSelectionModel().getSelectedRanges(), ranges.length !== 0)) {
+ _copiedRanges = ranges, markCopySelection(ranges), _self.onCopyCells.notify({ ranges });
+ for (var columns = _grid.getColumns(), clipText = "", rg = 0; rg < ranges.length; rg++) {
+ for (var range = ranges[rg], clipTextRows = [], i2 = range.fromRow; i2 < range.toRow + 1; i2++) {
+ var clipTextCells = [], dt = _grid.getDataItem(i2);
+ if (clipTextRows.length === 0 && _options.includeHeaderWhenCopying) {
+ for (var clipTextHeaders = [], j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextHeaders.push(getHeaderValueForColumn(columns[j]));
+ clipTextRows.push(clipTextHeaders.join(" "));
+ }
+ for (var j = range.fromCell; j < range.toCell + 1; j++)
+ columns[j].name.length > 0 && !columns[j].hidden && clipTextCells.push(getDataItemValueForColumn(dt, columns[j], e));
+ clipTextRows.push(clipTextCells.join(" "));
+ }
+ clipText += clipTextRows.join(`\r
+`) + `\r
+`;
+ }
+ if (window.clipboardData)
+ return window.clipboardData.setData("Text", clipText), !0;
+ var focusEl = document.activeElement, ta = _createTextBox(clipText);
+ if (ta.focus(), setTimeout(function() {
+ _bodyElement.removeChild(ta), focusEl ? focusEl.focus() : console.log("Not element to restore focus to after copy?");
+ }, 100), _onCopySuccess) {
+ var rowCount = 0;
+ ranges.length === 1 ? rowCount = ranges[0].toRow + 1 - ranges[0].fromRow : rowCount = ranges.length, _onCopySuccess.call(this, rowCount);
+ }
+ return !1;
+ }
+ if (!_options.readOnlyMode && (e.which === keyCodes.V && (e.ctrlKey || e.metaKey) && !e.shiftKey || e.which === keyCodes.INSERT && e.shiftKey && !e.ctrlKey)) {
+ var ta = _createTextBox("");
+ return setTimeout(function() {
+ _decodeTabularData(_grid, ta);
+ }, 100), !1;
+ }
+ }
+ }
+ function markCopySelection(ranges) {
+ clearCopySelection();
+ for (var columns = _grid.getColumns(), hash = {}, i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++) {
+ hash[j] = {};
+ for (var k = ranges[i2].fromCell; k <= ranges[i2].toCell && k < columns.length; k++)
+ hash[j][columns[k].id] = _copiedCellStyle;
+ }
+ _grid.setCellCssStyles(_copiedCellStyleLayerKey, hash), clearTimeout(_clearCopyTI), _clearCopyTI = setTimeout(function() {
+ _self.clearCopySelection();
+ }, 2e3);
+ }
+ function clearCopySelection() {
+ _grid.removeCellCssStyles(_copiedCellStyleLayerKey);
+ }
+ function setIncludeHeaderWhenCopying(includeHeaderWhenCopying) {
+ _options.includeHeaderWhenCopying = includeHeaderWhenCopying;
+ }
+ Utils11.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellExternalCopyManager",
+ clearCopySelection,
+ handleKeyDown,
+ onCopyCells: new SlickEvent6(),
+ onCopyCancelled: new SlickEvent6(),
+ onPasteCells: new SlickEvent6(),
+ setIncludeHeaderWhenCopying
+ });
+}
+
+// src/plugins/slick.cellmenu.js
+var BindingEventService6 = BindingEventService, SlickEvent7 = Event, EventData4 = EventData, EventHandler2 = EventHandler, Utils12 = Utils;
+function CellMenu(optionProperties) {
+ let _cellMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler2(), _self = this, _commandTitleElm, _optionTitleElm, _menuElm, _bindingEventService = new BindingEventService6(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: 0,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !0,
+ maxHeight: "none",
+ width: "auto"
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _cellMenuProperties = Utils12.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onClick, handleCellClick), _cellMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _cellMenuProperties = Utils12.extend({}, _cellMenuProperties, newOptions);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ let cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), commandItems = _cellMenuProperties.commandItems || [], optionItems = _cellMenuProperties.optionItems || [];
+ if (!columnDef || !columnDef.cellMenu || !commandItems.length && !optionItems.length || (destroyMenu(), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_cellMenuProperties.maxHeight) ? _cellMenuProperties.maxHeight : _cellMenuProperties.maxHeight + "px", width2 = isNaN(_cellMenuProperties.width) ? _cellMenuProperties.width : _cellMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-cell-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width2, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${e.pageY + 5}px`, _menuElm.style.left = `${e.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-cell-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_cellMenuProperties.hideOptionSection && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-cell-menu-option-list", optionMenuElm.role = "menu", _cellMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _cellMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_cellMenuProperties.hideCommandSection && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-cell-menu-command-list", commandMenuElm.role = "menu", !_cellMenuProperties.hideCloseButton && (optionItems.length === 0 || _cellMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _cellMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-cell-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function repositionMenu(e) {
+ let parentElm = e.target.closest(".slick-cell"), parentOffset = parentElm && Utils12.offset(parentElm), menuOffsetLeft = parentElm ? parentOffset.left : e.pageX, menuOffsetTop = parentElm ? parentOffset.top : e.pageY, parentCellWidth = parentElm.offsetWidth || 0, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _cellMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _cellMenuProperties.autoAdjustDropOffset, sideOffset = _cellMenuProperties.autoAlignSideOffset;
+ if (_cellMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils12.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils12.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_cellMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - (menuWidth - parentCellWidth) - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function handleCellClick(e, args) {
+ e instanceof EventData4 && (e = e.getNativeEvent());
+ let cell = _grid.getCellFromEvent(e), dataContext = _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ columnDef && columnDef.cellMenu && e.preventDefault(), _cellMenuProperties = Utils12.extend({}, _cellMenuProperties, columnDef.cellMenu), args || (args = {}), args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_cellMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.setAttribute("aria-expanded", "true"), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this)));
+ }
+ function handleBodyMouseDown(e) {
+ _menuElm != e.target && !(_menuElm && _menuElm.contains(e.target)) && (e.defaultPrevented || closeMenu(e, { cell: _currentCell, row: _currentRow }));
+ }
+ function closeMenu(e, args) {
+ if (_menuElm) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm && _menuElm.remove && (_menuElm.remove(), _menuElm = null);
+ }
+ }
+ function populateOptionItems(cellMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !cellMenu)) {
+ cellMenu && cellMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = cellMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i2 = 0, ln = optionItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = optionItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(cellMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !cellMenu)) {
+ cellMenu && cellMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = cellMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i2 = 0, ln = commandItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = commandItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-cell-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-cell-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-cell-menu-item-disabled"), item.hidden && liElm.classList.add("slick-cell-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-cell-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-cell-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider")
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (command !== null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (!item || item.disabled || item.divider || item === "divider" || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs), e.defaultPrevented || closeMenu(e, { cell, row });
+ }
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils12.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "CellMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent7(),
+ onBeforeMenuShow: new SlickEvent7(),
+ onBeforeMenuClose: new SlickEvent7(),
+ onCommand: new SlickEvent7(),
+ onOptionSelected: new SlickEvent7()
+ });
+}
+
+// src/plugins/slick.cellrangedecorator.js
+var Utils13 = Utils;
+function CellRangeDecorator(grid, options) {
+ var _elem, _defaults = {
+ selectionCssClass: "slick-range-decorator",
+ selectionCss: {
+ zIndex: "9999",
+ border: "2px dashed red"
+ },
+ offset: { top: -1, left: -1, height: -2, width: -2 }
+ };
+ options = Utils13.extend(!0, {}, _defaults, options);
+ function show2(range) {
+ if (!_elem) {
+ _elem = document.createElement("div"), _elem.className = options.selectionCssClass, Object.keys(options.selectionCss).forEach((cssStyleKey) => {
+ _elem.style[cssStyleKey] = options.selectionCss[cssStyleKey];
+ }), _elem.style.position = "absolute";
+ let canvasNode = grid.getActiveCanvasNode();
+ canvasNode && canvasNode.appendChild(_elem);
+ }
+ var from = grid.getCellNodeBox(range.fromRow, range.fromCell), to = grid.getCellNodeBox(range.toRow, range.toCell);
+ return from && to && options && options.offset && (_elem.style.top = `${from.top + options.offset.top}px`, _elem.style.left = `${from.left + options.offset.left}px`, _elem.style.height = `${to.bottom - from.top + options.offset.height}px`, _elem.style.width = `${to.right - from.left + options.offset.width}px`), _elem;
+ }
+ function destroy() {
+ hide2();
+ }
+ function hide2() {
+ _elem && (_elem.remove(), _elem = null);
+ }
+ Utils13.extend(this, {
+ pluginName: "CellRangeDecorator",
+ show: show2,
+ hide: hide2,
+ destroy
+ });
+}
+
+// src/plugins/slick.cellrangeselector.js
+var SlickEvent8 = Event, EventHandler3 = EventHandler, SlickRange2 = Range, Draggable3 = Draggable, CellRangeDecorator2 = CellRangeDecorator, Utils14 = Utils;
+function CellRangeSelector(options) {
+ var _grid, _currentlySelectedRange, _canvas, _gridOptions, _activeCanvas, _dragging, _decorator, _self = this, _handler = new EventHandler3(), _defaults = {
+ autoScroll: !0,
+ minIntervalToShowNextCell: 30,
+ maxIntervalToShowNextCell: 600,
+ // better to a multiple of minIntervalToShowNextCell
+ accelerateInterval: 5,
+ // increase 5ms when cursor 1px outside the viewport.
+ selectionCss: {
+ border: "2px dashed blue"
+ }
+ }, _rowOffset, _columnOffset, _isRightCanvas, _isBottomCanvas, _activeViewport, _viewportWidth, _viewportHeight, _draggingMouseOffset, _moveDistanceForOneCell, _autoScrollTimerId, _xDelayForNextCell, _yDelayForNextCell, _isRowMoveRegistered = !1, _scrollTop = 0, _scrollLeft = 0;
+ function init(grid) {
+ if (typeof Draggable3 > "u")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ options = Utils14.extend(!0, {}, _defaults, options), _decorator = options.cellDecorator || new CellRangeDecorator2(grid, options), _grid = grid, _canvas = _grid.getCanvasNode(), _gridOptions = _grid.getOptions(), _handler.subscribe(_grid.onScroll, handleScroll).subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _activeCanvas = null, _activeViewport = null, _canvas = null, _decorator && _decorator.destroy && _decorator.destroy();
+ }
+ function getCellDecorator() {
+ return _decorator;
+ }
+ function handleScroll(e, args) {
+ _scrollTop = args.scrollTop, _scrollLeft = args.scrollLeft;
+ }
+ function handleDragInit(e) {
+ _activeCanvas = _grid.getActiveCanvasNode(e), _activeViewport = _grid.getActiveViewportNode(e);
+ var scrollbarDimensions2 = _grid.getDisplayedScrollbarDimensions();
+ if (_viewportWidth = _activeViewport.offsetWidth - scrollbarDimensions2.width, _viewportHeight = _activeViewport.offsetHeight - scrollbarDimensions2.height, _moveDistanceForOneCell = {
+ x: _grid.getAbsoluteColumnMinWidth() / 2,
+ y: _grid.getOptions().rowHeight / 2
+ }, _isRowMoveRegistered = hasRowMoveManager(), _rowOffset = 0, _columnOffset = 0, _isBottomCanvas = _activeCanvas.classList.contains("grid-canvas-bottom"), _gridOptions.frozenRow > -1 && _isBottomCanvas) {
+ let canvasSelector = `.${_grid.getUID()} .grid-canvas-${_gridOptions.frozenBottom ? "bottom" : "top"}`, canvasElm = document.querySelector(canvasSelector);
+ canvasElm && (_rowOffset = canvasElm.clientHeight || 0);
+ }
+ if (_isRightCanvas = _activeCanvas.classList.contains("grid-canvas-right"), _gridOptions.frozenColumn > -1 && _isRightCanvas) {
+ let canvasLeftElm = document.querySelector(`.${_grid.getUID()} .grid-canvas-left`);
+ canvasLeftElm && (_columnOffset = canvasLeftElm.clientWidth || 0);
+ }
+ e.stopImmediatePropagation(), e.preventDefault();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e);
+ if (_self.onBeforeCellRangeSelected.notify(cell) !== !1 && _grid.canCellBeSelected(cell.row, cell.cell) && (_dragging = !0, e.stopImmediatePropagation()), !_dragging)
+ return;
+ _grid.focus();
+ let canvasOffset = Utils14.offset(_canvas), startX = dd.startX - (canvasOffset.left || 0);
+ _gridOptions.frozenColumn >= 0 && _isRightCanvas && (startX += _scrollLeft);
+ let startY = dd.startY - (canvasOffset.top || 0);
+ _gridOptions.frozenRow >= 0 && _isBottomCanvas && (startY += _scrollTop);
+ var start = _grid.getCellFromPoint(startX, startY);
+ return dd.range = { start, end: {} }, _currentlySelectedRange = dd.range, _decorator.show(new SlickRange2(start.row, start.cell));
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging && !_isRowMoveRegistered)
+ return;
+ _isRowMoveRegistered || evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ if (options.autoScroll && (_draggingMouseOffset = getMouseOffsetViewport(e, dd), _draggingMouseOffset.isOutsideViewport))
+ return handleDragOutsideViewport();
+ stopIntervalTimer(), handleDragTo(e, dd);
+ }
+ function getMouseOffsetViewport(e, dd) {
+ var targetEvent = e.touches ? e.touches[0] : e, viewportLeft = _activeViewport.scrollLeft, viewportTop = _activeViewport.scrollTop, viewportRight = viewportLeft + _viewportWidth, viewportBottom = viewportTop + _viewportHeight, viewportOffset = Utils14.offset(_activeViewport), viewportOffsetLeft = viewportOffset.left || 0, viewportOffsetTop = viewportOffset.top || 0, viewportOffsetRight = viewportOffsetLeft + _viewportWidth, viewportOffsetBottom = viewportOffsetTop + _viewportHeight, result = {
+ e,
+ dd,
+ viewport: {
+ left: viewportLeft,
+ top: viewportTop,
+ right: viewportRight,
+ bottom: viewportBottom,
+ offset: {
+ left: viewportOffsetLeft,
+ top: viewportOffsetTop,
+ right: viewportOffsetRight,
+ bottom: viewportOffsetBottom
+ }
+ },
+ // Consider the viewport as the origin, the `offset` is based on the coordinate system:
+ // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.
+ offset: {
+ x: 0,
+ y: 0
+ },
+ isOutsideViewport: !1
+ };
+ return targetEvent.pageX < viewportOffsetLeft ? result.offset.x = targetEvent.pageX - viewportOffsetLeft : targetEvent.pageX > viewportOffsetRight && (result.offset.x = targetEvent.pageX - viewportOffsetRight), targetEvent.pageY < viewportOffsetTop ? result.offset.y = viewportOffsetTop - targetEvent.pageY : targetEvent.pageY > viewportOffsetBottom && (result.offset.y = viewportOffsetBottom - targetEvent.pageY), result.isOutsideViewport = !!result.offset.x || !!result.offset.y, result;
+ }
+ function handleDragOutsideViewport() {
+ if (_xDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.x) * options.accelerateInterval, _yDelayForNextCell = options.maxIntervalToShowNextCell - Math.abs(_draggingMouseOffset.offset.y) * options.accelerateInterval, !_autoScrollTimerId) {
+ var xTotalDelay = 0, yTotalDelay = 0;
+ _autoScrollTimerId = setInterval(function() {
+ var xNeedUpdate = !1, yNeedUpdate = !1;
+ _draggingMouseOffset.offset.x ? (xTotalDelay += options.minIntervalToShowNextCell, xNeedUpdate = xTotalDelay >= _xDelayForNextCell) : xTotalDelay = 0, _draggingMouseOffset.offset.y ? (yTotalDelay += options.minIntervalToShowNextCell, yNeedUpdate = yTotalDelay >= _yDelayForNextCell) : yTotalDelay = 0, (xNeedUpdate || yNeedUpdate) && (xNeedUpdate && (xTotalDelay = 0), yNeedUpdate && (yTotalDelay = 0), handleDragToNewPosition(xNeedUpdate, yNeedUpdate));
+ }, options.minIntervalToShowNextCell);
+ }
+ }
+ function handleDragToNewPosition(xNeedUpdate, yNeedUpdate) {
+ var pageX = _draggingMouseOffset.e.pageX, pageY = _draggingMouseOffset.e.pageY, mouseOffsetX = _draggingMouseOffset.offset.x, mouseOffsetY = _draggingMouseOffset.offset.y, viewportOffset = _draggingMouseOffset.viewport.offset;
+ xNeedUpdate && mouseOffsetX && (mouseOffsetX > 0 ? pageX = viewportOffset.right + _moveDistanceForOneCell.x : pageX = viewportOffset.left - _moveDistanceForOneCell.x), yNeedUpdate && mouseOffsetY && (mouseOffsetY > 0 ? pageY = viewportOffset.top - _moveDistanceForOneCell.y : pageY = viewportOffset.bottom + _moveDistanceForOneCell.y), handleDragTo({
+ pageX,
+ pageY
+ }, _draggingMouseOffset.dd);
+ }
+ function stopIntervalTimer() {
+ clearInterval(_autoScrollTimerId), _autoScrollTimerId = null;
+ }
+ function handleDragTo(e, dd) {
+ let targetEvent = e.touches ? e.touches[0] : e, canvasOffset = Utils14.offset(_activeCanvas), end = _grid.getCellFromPoint(
+ targetEvent.pageX - (canvasOffset && canvasOffset.left || 0) + _columnOffset,
+ targetEvent.pageY - (canvasOffset && canvasOffset.top || 0) + _rowOffset
+ );
+ if (!(_gridOptions.frozenColumn >= 0 && !_isRightCanvas && end.cell > _gridOptions.frozenColumn || _isRightCanvas && end.cell <= _gridOptions.frozenColumn) && !(_gridOptions.frozenRow >= 0 && !_isBottomCanvas && end.row >= _gridOptions.frozenRow || _isBottomCanvas && end.row < _gridOptions.frozenRow)) {
+ if (options.autoScroll && _draggingMouseOffset) {
+ var endCellBox = _grid.getCellNodeBox(end.row, end.cell);
+ if (!endCellBox)
+ return;
+ var viewport = _draggingMouseOffset.viewport;
+ (endCellBox.left < viewport.left || endCellBox.right > viewport.right || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) && _grid.scrollCellIntoView(end.row, end.cell);
+ }
+ if (_grid.canCellBeSelected(end.row, end.cell) && dd && dd.range) {
+ dd.range.end = end;
+ var range = new SlickRange2(dd.range.start.row, dd.range.start.cell, end.row, end.cell);
+ _decorator.show(range), _self.onCellRangeSelecting.notify({
+ range
+ });
+ }
+ }
+ }
+ function hasRowMoveManager() {
+ return !!(_grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager"));
+ }
+ function handleDragEnd(e, dd) {
+ _dragging && (_dragging = !1, e.stopImmediatePropagation(), stopIntervalTimer(), _decorator.hide(), _self.onCellRangeSelected.notify({
+ range: new SlickRange2(
+ dd.range.start.row,
+ dd.range.start.cell,
+ dd.range.end.row,
+ dd.range.end.cell
+ )
+ }));
+ }
+ function getCurrentRange() {
+ return _currentlySelectedRange;
+ }
+ Utils14.extend(this, {
+ init,
+ destroy,
+ pluginName: "CellRangeSelector",
+ getCellDecorator,
+ getCurrentRange,
+ onBeforeCellRangeSelected: new SlickEvent8(),
+ onCellRangeSelected: new SlickEvent8(),
+ onCellRangeSelecting: new SlickEvent8()
+ });
+}
+
+// src/plugins/slick.cellselectionmodel.js
+var SlickEvent9 = Event, EventData5 = EventData, SlickRange3 = Range, CellRangeSelector2 = CellRangeSelector, Utils15 = Utils;
+function CellSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _selector;
+ typeof options > "u" || typeof options.cellRangeSelector > "u" ? _selector = new CellRangeSelector2({
+ selectionCss: {
+ border: "2px solid black"
+ }
+ }) : _selector = options.cellRangeSelector;
+ var _options, _defaults = {
+ selectActiveCell: !0
+ };
+ function init(grid) {
+ _options = Utils15.extend(!0, {}, _defaults, options), _grid = grid, _grid.onActiveCellChanged.subscribe(handleActiveCellChange), _grid.onKeyDown.subscribe(handleKeyDown), grid.registerPlugin(_selector), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
+ }
+ function destroy() {
+ _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange), _grid.onKeyDown.unsubscribe(handleKeyDown), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector && _selector.destroy && _selector.destroy();
+ }
+ function removeInvalidRanges(ranges) {
+ for (var result = [], i2 = 0; i2 < ranges.length; i2++) {
+ var r = ranges[i2];
+ _grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell) && result.push(r);
+ }
+ return result;
+ }
+ function rangesAreEqual(range1, range2) {
+ var areDifferent = range1.length !== range2.length;
+ if (!areDifferent) {
+ for (var i2 = 0; i2 < range1.length; i2++)
+ if (range1[i2].fromCell !== range2[i2].fromCell || range1[i2].fromRow !== range2[i2].fromRow || range1[i2].toCell !== range2[i2].toCell || range1[i2].toRow !== range2[i2].toRow) {
+ areDifferent = !0;
+ break;
+ }
+ }
+ return !areDifferent;
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ var rangeHasChanged = !rangesAreEqual(_ranges, ranges);
+ if (_ranges = removeInvalidRanges(ranges), rangeHasChanged) {
+ var eventData = new EventData5(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickCellSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRanges(getSelectedRanges());
+ }
+ function handleBeforeCellRangeSelected(e) {
+ if (_grid.getEditorLock().isActive())
+ return e.stopPropagation(), !1;
+ }
+ function handleCellRangeSelected(e, args) {
+ _grid.setActiveCell(args.range.fromRow, args.range.fromCell, !1, !1, !0), setSelectedRanges([args.range]);
+ }
+ function handleActiveCellChange(e, args) {
+ _options.selectActiveCell && args.row != null && args.cell != null ? setSelectedRanges([new SlickRange3(args.row, args.cell)]) : _options.selectActiveCell || setSelectedRanges([]);
+ }
+ function handleKeyDown(e) {
+ var ranges, last, active = _grid.getActiveCell(), metaKey = e.ctrlKey || e.metaKey;
+ if (active && e.shiftKey && !metaKey && !e.altKey && (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {
+ ranges = getSelectedRanges().slice(), ranges.length || ranges.push(new SlickRange3(active.row, active.cell)), last = ranges.pop(), last.contains(active.row, active.cell) || (last = new SlickRange3(active.row, active.cell));
+ var dRow = last.toRow - last.fromRow, dCell = last.toCell - last.fromCell, dirRow = active.row == last.fromRow ? 1 : -1, dirCell = active.cell == last.fromCell ? 1 : -1;
+ e.which == 37 ? dCell -= dirCell : e.which == 39 ? dCell += dirCell : e.which == 38 ? dRow -= dirRow : e.which == 40 && (dRow += dirRow);
+ var new_last = new SlickRange3(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);
+ if (removeInvalidRanges([new_last]).length) {
+ ranges.push(new_last);
+ var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow, viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;
+ _grid.scrollRowIntoView(viewRow), _grid.scrollCellIntoView(viewRow, viewCell);
+ } else
+ ranges.push(last);
+ setSelectedRanges(ranges), e.preventDefault(), e.stopPropagation();
+ }
+ }
+ Utils15.extend(this, {
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "CellSelectionModel",
+ onSelectedRangesChanged: new SlickEvent9()
+ });
+}
+
+// src/plugins/slick.checkboxselectcolumn.js
+var BindingEventService7 = BindingEventService, EventHandler4 = EventHandler, Utils16 = Utils;
+function CheckboxSelectColumn(options) {
+ let _dataView, _grid, _isUsingDataView = !1, _selectableOverride = null, _headerRowNode, _selectAll_UID = createUID(), _handler = new EventHandler4(), _selectedRowsLookup = {}, _defaults = {
+ columnId: "_checkbox_selector",
+ cssClass: null,
+ hideSelectAllCheckbox: !1,
+ toolTip: "Select/Deselect All",
+ width: 30,
+ applySelectOnAllPages: !1,
+ // defaults to false, when that is enabled the "Select All" will be applied to all pages (when using Pagination)
+ hideInColumnTitleRow: !1,
+ hideInFilterHeaderRow: !0
+ }, _isSelectAllChecked = !1, _bindingEventService = new BindingEventService7(), _options = Utils16.extend(!0, {}, _defaults, options);
+ typeof _options.selectableOverride == "function" && selectableOverride(_options.selectableOverride);
+ function init(grid) {
+ _grid = grid, _isUsingDataView = !Array.isArray(grid.getData()), _isUsingDataView && (_dataView = grid.getData()), _handler.subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged).subscribe(_grid.onClick, handleClick).subscribe(_grid.onKeyDown, handleKeyDown), _isUsingDataView && _dataView && _options.applySelectOnAllPages && _handler.subscribe(_dataView.onSelectedRowIdsChanged, handleDataViewSelectedIdsChanged).subscribe(_dataView.onPagingInfoChanged, handleDataViewSelectedIdsChanged), _options.hideInFilterHeaderRow || addCheckboxToFilterHeaderRow(grid), _options.hideInColumnTitleRow || _handler.subscribe(_grid.onHeaderClick, handleHeaderClick);
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ if (_options = Utils16.extend(!0, {}, _options, options2), _options.hideSelectAllCheckbox)
+ hideSelectAllFromColumnHeaderTitleRow(), hideSelectAllFromColumnHeaderFilterRow();
+ else if (_options.hideInColumnTitleRow ? hideSelectAllFromColumnHeaderTitleRow() : (renderSelectAllCheckbox(_isSelectAllChecked), _handler.subscribe(_grid.onHeaderClick, handleHeaderClick)), _options.hideInFilterHeaderRow)
+ hideSelectAllFromColumnHeaderFilterRow();
+ else {
+ let selectAllContainerElm = _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ if (selectAllContainerElm) {
+ selectAllContainerElm.style.display = "flex";
+ let selectAllInputElm = selectAllContainerElm.querySelector('input[type="checkbox"]');
+ selectAllInputElm && (selectAllInputElm.checked = _isSelectAllChecked);
+ }
+ }
+ }
+ function hideSelectAllFromColumnHeaderTitleRow() {
+ _grid.updateColumnHeader(_options.columnId, "", "");
+ }
+ function hideSelectAllFromColumnHeaderFilterRow() {
+ let selectAllContainerElm = _headerRowNode && _headerRowNode.querySelector("#filter-checkbox-selectall-container");
+ selectAllContainerElm && (selectAllContainerElm.style.display = "none");
+ }
+ function handleSelectedRowsChanged() {
+ let selectedRows = _grid.getSelectedRows(), lookup = {}, row, i2, k, disabledCount = 0;
+ if (typeof _selectableOverride == "function")
+ for (k = 0; k < _grid.getDataLength(); k++) {
+ let dataItem = _grid.getDataItem(k);
+ checkSelectableOverride(i2, dataItem, _grid) || disabledCount++;
+ }
+ let removeList = [];
+ for (i2 = 0; i2 < selectedRows.length; i2++) {
+ row = selectedRows[i2];
+ let rowItem = _grid.getDataItem(row);
+ checkSelectableOverride(i2, rowItem, _grid) ? (lookup[row] = !0, lookup[row] !== _selectedRowsLookup[row] && (_grid.invalidateRow(row), delete _selectedRowsLookup[row])) : removeList.push(row);
+ }
+ for (i2 in _selectedRowsLookup)
+ _grid.invalidateRow(i2);
+ if (_selectedRowsLookup = lookup, _grid.render(), _isSelectAllChecked = selectedRows && selectedRows.length + disabledCount >= _grid.getDataLength(), (!_isUsingDataView || !_options.applySelectOnAllPages) && (!_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow)) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ if (removeList.length > 0) {
+ for (i2 = 0; i2 < removeList.length; i2++) {
+ let remIdx = selectedRows.indexOf(removeList[i2]);
+ selectedRows.splice(remIdx, 1);
+ }
+ _grid.setSelectedRows(selectedRows, "click.cleanup");
+ }
+ }
+ function handleDataViewSelectedIdsChanged() {
+ let selectedIds = _dataView.getAllSelectedFilteredIds(), filteredItems = _dataView.getFilteredItems(), disabledCount = 0;
+ if (typeof _selectableOverride == "function" && selectedIds.length > 0)
+ for (let k = 0; k < _dataView.getItemCount(); k++) {
+ let dataItem = _dataView.getItemByIdx(k), idProperty = _dataView.getIdPropertyName(), dataItemId = dataItem[idProperty];
+ filteredItems.findIndex(function(item) {
+ return item[idProperty] === dataItemId;
+ }) >= 0 && !checkSelectableOverride(k, dataItem, _grid) && disabledCount++;
+ }
+ if (_isSelectAllChecked = (selectedIds && selectedIds.length) + disabledCount >= filteredItems.length, !_options.hideInColumnTitleRow && !_options.hideSelectAllCheckbox && renderSelectAllCheckbox(_isSelectAllChecked), !_options.hideInFilterHeaderRow) {
+ let selectAllElm = _headerRowNode && _headerRowNode.querySelector(`#header-filter-selector${_selectAll_UID}`);
+ selectAllElm && (selectAllElm.checked = _isSelectAllChecked);
+ }
+ }
+ function handleKeyDown(e, args) {
+ e.which == 32 && _grid.getColumns()[args.cell].id === _options.columnId && ((!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) && toggleRowSelection(args.row), e.preventDefault(), e.stopImmediatePropagation());
+ }
+ function handleClick(e, args) {
+ if (_grid.getColumns()[args.cell].id === _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ toggleRowSelection(args.row), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function toggleRowSelection(row) {
+ let dataContext = _grid.getDataItem(row);
+ if (checkSelectableOverride(row, dataContext, _grid)) {
+ if (_selectedRowsLookup[row]) {
+ let newSelectedRows = _grid.getSelectedRows().filter((n) => n !== row);
+ _grid.setSelectedRows(newSelectedRows, "click.toggle");
+ } else
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(row), "click.toggle");
+ _grid.setActiveCell(row, getCheckboxColumnCellIndex());
+ }
+ }
+ function selectRows(rowArray) {
+ let i2, l = rowArray.length, addRows = [];
+ for (i2 = 0; i2 < l; i2++)
+ _selectedRowsLookup[rowArray[i2]] || (addRows[addRows.length] = rowArray[i2]);
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(addRows), "SlickCheckboxSelectColumn.selectRows");
+ }
+ function deSelectRows(rowArray) {
+ let i2, l = rowArray.length, removeRows = [];
+ for (i2 = 0; i2 < l; i2++)
+ _selectedRowsLookup[rowArray[i2]] && (removeRows[removeRows.length] = rowArray[i2]);
+ _grid.setSelectedRows(_grid.getSelectedRows().filter((n) => removeRows.indexOf(n) < 0), "SlickCheckboxSelectColumn.deSelectRows");
+ }
+ function handleHeaderClick(e, args) {
+ if (args.column.id == _options.columnId && e.target.type === "checkbox") {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ let isAllSelected = e.target.checked, caller = isAllSelected ? "click.selectAll" : "click.unselectAll", rows = [];
+ if (isAllSelected) {
+ for (let i2 = 0; i2 < _grid.getDataLength(); i2++) {
+ let rowItem = _grid.getDataItem(i2);
+ !rowItem.__group && !rowItem.__groupTotals && checkSelectableOverride(i2, rowItem, _grid) && rows.push(i2);
+ }
+ isAllSelected = !0;
+ }
+ if (_isUsingDataView && _dataView && _options.applySelectOnAllPages) {
+ let ids = [], filteredItems = _dataView.getFilteredItems();
+ for (let j = 0; j < filteredItems.length; j++) {
+ let dataviewRowItem = filteredItems[j];
+ checkSelectableOverride(j, dataviewRowItem, _grid) && ids.push(dataviewRowItem[_dataView.getIdPropertyName()]);
+ }
+ _dataView.setSelectedIds(ids, { isRowBeingAdded: isAllSelected });
+ }
+ _grid.setSelectedRows(rows, caller), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ let _checkboxColumnCellIndex = null;
+ function getCheckboxColumnCellIndex() {
+ if (_checkboxColumnCellIndex === null) {
+ _checkboxColumnCellIndex = 0;
+ let colArr = _grid.getColumns();
+ for (let i2 = 0; i2 < colArr.length; i2++)
+ colArr[i2].id == _options.columnId && (_checkboxColumnCellIndex = i2);
+ }
+ return _checkboxColumnCellIndex;
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : " ",
+ toolTip: _options.hideSelectAllCheckbox || _options.hideInColumnTitleRow ? "" : _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ cssClass: _options.cssClass,
+ hideSelectAllCheckbox: _options.hideSelectAllCheckbox,
+ formatter: checkboxSelectionFormatter,
+ // exclude from all menus, defaults to true unless the option is provided differently by the user
+ excludeFromColumnPicker: typeof _options.excludeFromColumnPicker < "u" ? _options.excludeFromColumnPicker : !0,
+ excludeFromGridMenu: typeof _options.excludeFromGridMenu < "u" ? _options.excludeFromGridMenu : !0,
+ excludeFromHeaderMenu: typeof _options.excludeFromHeaderMenu < "u" ? _options.excludeFromHeaderMenu : !0
+ };
+ }
+ function addCheckboxToFilterHeaderRow(grid) {
+ _handler.subscribe(grid.onHeaderRowCellRendered, function(e, args) {
+ if (args.column.field === "sel") {
+ Utils16.emptyElement(args.node);
+ let spanElm = document.createElement("span");
+ spanElm.id = "filter-checkbox-selectall-container";
+ let inputElm = document.createElement("input");
+ inputElm.type = "checkbox", inputElm.id = `header-filter-selector${_selectAll_UID}`;
+ let labelElm = document.createElement("label");
+ labelElm.htmlFor = `header-filter-selector${_selectAll_UID}`, spanElm.appendChild(inputElm), spanElm.appendChild(labelElm), args.node.appendChild(spanElm), _headerRowNode = args.node, _bindingEventService.bind(spanElm, "click", (e2) => handleHeaderClick(e2, args));
+ }
+ });
+ }
+ function createUID() {
+ return Math.round(1e7 * Math.random());
+ }
+ function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ let UID = createUID() + row;
+ return dataContext && checkSelectableOverride(row, dataContext, grid) ? _selectedRowsLookup[row] ? " " : " " : null;
+ }
+ function checkSelectableOverride(row, dataContext, grid) {
+ return typeof _selectableOverride == "function" ? _selectableOverride(row, dataContext, grid) : !0;
+ }
+ function renderSelectAllCheckbox(isSelectAllChecked) {
+ isSelectAllChecked ? _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip) : _grid.updateColumnHeader(_options.columnId, " ", _options.toolTip);
+ }
+ function selectableOverride(overrideFn) {
+ _selectableOverride = overrideFn;
+ }
+ Utils16.extend(this, {
+ init,
+ destroy,
+ pluginName: "CheckboxSelectColumn",
+ deSelectRows,
+ selectRows,
+ getColumnDefinition,
+ getOptions,
+ selectableOverride,
+ setOptions
+ });
+}
+
+// src/plugins/slick.contextmenu.js
+var BindingEventService8 = BindingEventService, SlickEvent10 = Event, EventData6 = EventData, EventHandler5 = EventHandler, Utils17 = Utils;
+function ContextMenu(optionProperties) {
+ let _contextMenuProperties, _currentCell = -1, _currentRow = -1, _grid, _gridOptions, _gridUid = "", _handler = new EventHandler5(), _self = this, _optionTitleElm, _commandTitleElm, _menuElm, _bindingEventService = new BindingEventService8(), _defaults = {
+ autoAdjustDrop: !0,
+ // dropup/dropdown
+ autoAlignSide: !0,
+ // left/right
+ autoAdjustDropOffset: -4,
+ autoAlignSideOffset: 0,
+ hideMenuOnScroll: !1,
+ maxHeight: "none",
+ width: "auto",
+ optionShownOverColumnIds: [],
+ commandShownOverColumnIds: []
+ };
+ function init(grid) {
+ _grid = grid, _gridOptions = grid.getOptions(), _contextMenuProperties = Utils17.extend({}, _defaults, optionProperties), _gridUid = grid && grid.getUID ? grid.getUID() : "", _handler.subscribe(_grid.onContextMenu, handleOnContextMenu), _contextMenuProperties.hideMenuOnScroll && _handler.subscribe(_grid.onScroll, destroyMenu);
+ }
+ function setOptions(newOptions) {
+ _contextMenuProperties = Utils17.extend({}, _contextMenuProperties, newOptions), newOptions.commandShownOverColumnIds && (_contextMenuProperties.commandShownOverColumnIds = newOptions.commandShownOverColumnIds), newOptions.optionShownOverColumnIds && (_contextMenuProperties.optionShownOverColumnIds = newOptions.optionShownOverColumnIds);
+ }
+ function destroy() {
+ _self.onAfterMenuShow.unsubscribe(), _self.onBeforeMenuShow.unsubscribe(), _self.onBeforeMenuClose.unsubscribe(), _self.onCommand.unsubscribe(), _self.onOptionSelected.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm && _menuElm.remove && _menuElm.remove(), _commandTitleElm = null, _optionTitleElm = null, _menuElm = null;
+ }
+ function createMenu(e) {
+ e instanceof EventData6 && (e = e.getNativeEvent());
+ let targetEvent = e.touches ? e.touches[0] : e, cell = _grid.getCellFromEvent(e);
+ _currentCell = cell && cell.cell, _currentRow = cell && cell.row;
+ let columnDef = _grid.getColumns()[_currentCell], dataContext = _grid.getDataItem(_currentRow), isColumnOptionAllowed = checkIsColumnAllowed(_contextMenuProperties.optionShownOverColumnIds, columnDef.id), isColumnCommandAllowed = checkIsColumnAllowed(_contextMenuProperties.commandShownOverColumnIds, columnDef.id), commandItems = _contextMenuProperties.commandItems || [], optionItems = _contextMenuProperties.optionItems || [];
+ if (!columnDef || !isColumnCommandAllowed && !isColumnOptionAllowed || !commandItems.length && !optionItems.length || (destroyMenu(e), _self.onBeforeMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() == !1))
+ return;
+ let maxHeight = isNaN(_contextMenuProperties.maxHeight) ? _contextMenuProperties.maxHeight : _contextMenuProperties.maxHeight + "px", width2 = isNaN(_contextMenuProperties.width) ? _contextMenuProperties.width : _contextMenuProperties.width + "px";
+ _menuElm = document.createElement("div"), _menuElm.className = `slick-context-menu ${_gridUid}`, _menuElm.role = "menu", _menuElm.style.width = width2, _menuElm.style.maxHeight = maxHeight, _menuElm.style.top = `${targetEvent.pageY}px`, _menuElm.style.left = `${targetEvent.pageX}px`, _menuElm.style.display = "none";
+ let closeButtonElm = document.createElement("button");
+ closeButtonElm.type = "button", closeButtonElm.className = "close", closeButtonElm.dataset.dismiss = "slick-context-menu", closeButtonElm.ariaLabel = "Close";
+ let spanCloseElm = document.createElement("span");
+ if (spanCloseElm.className = "close", spanCloseElm.ariaHidden = "true", spanCloseElm.innerHTML = "×", closeButtonElm.appendChild(spanCloseElm), !_contextMenuProperties.hideOptionSection && isColumnOptionAllowed && optionItems.length > 0) {
+ let optionMenuElm = document.createElement("div");
+ optionMenuElm.className = "slick-context-menu-option-list", optionMenuElm.role = "menu", _contextMenuProperties.hideCloseButton || (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(optionMenuElm), populateOptionItems(
+ _contextMenuProperties,
+ optionMenuElm,
+ optionItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (!_contextMenuProperties.hideCommandSection && isColumnCommandAllowed && commandItems.length > 0) {
+ let commandMenuElm = document.createElement("div");
+ commandMenuElm.className = "slick-context-menu-command-list", commandMenuElm.role = "menu", !_contextMenuProperties.hideCloseButton && (!isColumnOptionAllowed || optionItems.length === 0 || _contextMenuProperties.hideOptionSection) && (_bindingEventService.bind(closeButtonElm, "click", handleCloseButtonClicked), _menuElm.appendChild(closeButtonElm)), _menuElm.appendChild(commandMenuElm), populateCommandItems(
+ _contextMenuProperties,
+ commandMenuElm,
+ commandItems,
+ { cell: _currentCell, row: _currentRow, column: columnDef, dataContext, grid: _grid }
+ );
+ }
+ if (_menuElm.style.display = "block", document.body.appendChild(_menuElm), _self.onAfterMenuShow.notify({
+ cell: _currentCell,
+ row: _currentRow,
+ grid: _grid
+ }, e, _self).getReturnValue() != !1)
+ return _menuElm;
+ }
+ function handleCloseButtonClicked(e) {
+ e.defaultPrevented || destroyMenu(e);
+ }
+ function destroyMenu(e, args) {
+ if (_menuElm = _menuElm || document.querySelector(".slick-context-menu." + _gridUid), _menuElm && _menuElm.remove) {
+ if (_self.onBeforeMenuClose.notify({
+ cell: args && args.cell,
+ row: args && args.row,
+ grid: _grid,
+ menu: _menuElm
+ }, e, _self).getReturnValue() == !1)
+ return;
+ _menuElm.remove(), _menuElm = null;
+ }
+ }
+ function checkIsColumnAllowed(columnIds, columnId) {
+ let isAllowedColumn = !1;
+ if (columnIds && columnIds.length > 0)
+ for (let o = 0, ln = columnIds.length; o < ln; o++)
+ columnIds[o] === columnId && (isAllowedColumn = !0);
+ else
+ isAllowedColumn = !0;
+ return isAllowedColumn;
+ }
+ function handleOnContextMenu(e, args) {
+ e instanceof EventData6 && (e = e.getNativeEvent()), e.preventDefault();
+ let cell = _grid.getCellFromEvent(e), columnDef = _grid.getColumns()[cell.cell], dataContext = _grid.getDataItem(cell.row);
+ args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = dataContext, args.grid = _grid, runOverrideFunctionWhenExists(_contextMenuProperties.menuUsabilityOverride, args) && (_menuElm = createMenu(e, args), _menuElm && (repositionMenu(e), _menuElm.style.display = "block"), _bindingEventService.bind(document.body, "click", (e2) => {
+ e2.defaultPrevented || destroyMenu(e2, { cell: _currentCell, row: _currentRow });
+ }));
+ }
+ function populateOptionItems(contextMenu, optionMenuElm, optionItems, args) {
+ if (!(!args || !optionItems || !contextMenu)) {
+ contextMenu && contextMenu.optionTitle && (_optionTitleElm = document.createElement("div"), _optionTitleElm.className = "title", _optionTitleElm.textContent = contextMenu.optionTitle, optionMenuElm.appendChild(_optionTitleElm));
+ for (let i2 = 0, ln = optionItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = optionItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.role = "button", iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), optionMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemOptionClick.bind(this, item));
+ }
+ }
+ }
+ function populateCommandItems(contextMenu, commandMenuElm, commandItems, args) {
+ if (!(!args || !commandItems || !contextMenu)) {
+ contextMenu && contextMenu.commandTitle && (_commandTitleElm = document.createElement("div"), _commandTitleElm.className = "title", _commandTitleElm.textContent = contextMenu.commandTitle, commandMenuElm.appendChild(_commandTitleElm));
+ for (let i2 = 0, ln = commandItems.length; i2 < ln; i2++) {
+ let addClickListener = !0, item = commandItems[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let liElm = document.createElement("div");
+ liElm.className = "slick-context-menu-item", liElm.role = "menuitem", (item.divider || item === "divider") && (liElm.classList.add("slick-context-menu-item-divider"), addClickListener = !1), (item.disabled || !isItemUsable) && liElm.classList.add("slick-context-menu-item-disabled"), item.hidden && liElm.classList.add("slick-context-menu-item-hidden"), item.cssClass && liElm.classList.add(...item.cssClass.split(" ")), item.tooltip && (liElm.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-context-menu-icon", liElm.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-context-menu-content", textElm.textContent = item.title, liElm.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), commandMenuElm.appendChild(liElm), addClickListener && _bindingEventService.bind(liElm, "click", handleMenuItemCommandClick.bind(this, item));
+ }
+ }
+ }
+ function handleMenuItemCommandClick(item, e) {
+ if (!item || item.disabled || item.divider)
+ return;
+ let command = item.command || "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row), cellValue;
+ if (Object.prototype.hasOwnProperty.call(dataContext, columnDef && columnDef.field) && (cellValue = dataContext[columnDef.field]), command != null && command !== "") {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ command,
+ item,
+ column: columnDef,
+ dataContext,
+ value: cellValue
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function handleMenuItemOptionClick(item, e) {
+ if (item.disabled || item.divider || !_grid.getEditorLock().commitCurrentEdit())
+ return;
+ let option = item.option !== void 0 ? item.option : "", row = _currentRow, cell = _currentCell, columnDef = _grid.getColumns()[cell], dataContext = _grid.getDataItem(row);
+ if (option !== void 0) {
+ let callbackArgs = {
+ cell,
+ row,
+ grid: _grid,
+ option,
+ item,
+ column: columnDef,
+ dataContext
+ };
+ _self.onOptionSelected.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ }
+ function repositionMenu(e) {
+ let targetEvent = e.touches ? e.touches[0] : e, parentElm = e.target.closest(".slick-cell"), menuOffsetLeft = targetEvent.pageX, menuOffsetTop = parentElm ? Utils17.offset(parentElm).top : targetEvent.pageY, menuHeight = _menuElm && _menuElm.offsetHeight || 0, menuWidth = _menuElm && _menuElm.offsetWidth || _contextMenuProperties.width || 0, rowHeight = _gridOptions.rowHeight, dropOffset = _contextMenuProperties.autoAdjustDropOffset, sideOffset = _contextMenuProperties.autoAlignSideOffset;
+ if (_contextMenuProperties.autoAdjustDrop) {
+ let spaceBottom = Utils17.calculateAvailableSpace(parentElm).bottom, spaceTop = Utils17.calculateAvailableSpace(parentElm).top, spaceBottomRemaining = spaceBottom + dropOffset - rowHeight, spaceTopRemaining = spaceTop - dropOffset + rowHeight;
+ (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining ? "top" : "bottom") === "top" ? (_menuElm.classList.remove("dropdown"), _menuElm.classList.add("dropup"), menuOffsetTop = menuOffsetTop - menuHeight - dropOffset) : (_menuElm.classList.remove("dropup"), _menuElm.classList.add("dropdown"), menuOffsetTop = menuOffsetTop + rowHeight + dropOffset);
+ }
+ if (_contextMenuProperties.autoAlignSide) {
+ let gridPos = _grid.getGridPosition();
+ (menuOffsetLeft + menuWidth >= gridPos.width ? "left" : "right") === "left" ? (_menuElm.classList.remove("dropright"), _menuElm.classList.add("dropleft"), menuOffsetLeft = menuOffsetLeft - menuWidth - sideOffset) : (_menuElm.classList.remove("dropleft"), _menuElm.classList.add("dropright"), menuOffsetLeft = menuOffsetLeft + sideOffset);
+ }
+ _menuElm.style.top = `${menuOffsetTop}px`, _menuElm.style.left = `${menuOffsetLeft}px`;
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils17.extend(this, {
+ init,
+ closeMenu: destroyMenu,
+ destroy,
+ pluginName: "ContextMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent10(),
+ onBeforeMenuShow: new SlickEvent10(),
+ onBeforeMenuClose: new SlickEvent10(),
+ onCommand: new SlickEvent10(),
+ onOptionSelected: new SlickEvent10()
+ });
+}
+
+// src/plugins/slick.crossgridrowmovemanager.js
+var SlickEvent11 = Event, EventHandler6 = EventHandler, Utils18 = Utils;
+function CrossGridRowMoveManager(options) {
+ var _grid, _canvas, _toGrid, _toCanvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler6(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils18.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _toGrid = options.toGrid, _toCanvas = _toGrid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils18.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows)), selectedRows.sort(function(a, b) {
+ return a - b;
+ });
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.fromGrid = _grid, dd.toGrid = _toGrid, dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_toCanvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _toCanvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_toCanvas.clientWidth}px`, dd.guide.style.top = "-1000px", _toCanvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils18.offset(_toCanvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _toGrid.getOptions().rowHeight), _toGrid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _toGrid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _toGrid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_toGrid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ fromGrid: _grid,
+ toGrid: _toGrid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils18.extend(this, {
+ onBeforeMoveRows: new SlickEvent11(),
+ onMoveRows: new SlickEvent11(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "CrossGridRowMoveManager"
+ });
+}
+
+// src/plugins/slick.customtooltip.js
+var EventHandler7 = EventHandler, Utils19 = Utils;
+function CustomTooltip(options) {
+ var _cancellablePromise, _cellNodeElm, _dataView, _grid, _gridOptions, _tooltipElm, _defaults = {
+ className: "slick-custom-tooltip",
+ offsetLeft: 0,
+ offsetRight: 0,
+ offsetTopBottom: 4,
+ hideArrow: !1,
+ tooltipTextMaxLength: 700,
+ regularTooltipWhiteSpace: "pre-line",
+ whiteSpace: "normal"
+ }, _eventHandler = new EventHandler7(), _cellTooltipOptions = {}, _options;
+ function init(grid) {
+ _grid = grid;
+ var _data = grid && grid.getData() || [];
+ _dataView = Array.isArray(_data) ? null : _data, _gridOptions = grid.getOptions() || {}, _options = Utils19.extend(!0, {}, _defaults, _gridOptions.customTooltip, options), _eventHandler.subscribe(grid.onMouseEnter, handleOnMouseEnter).subscribe(grid.onHeaderMouseEnter, handleOnHeaderMouseEnter).subscribe(grid.onHeaderRowMouseEnter, handleOnHeaderRowMouseEnter).subscribe(grid.onMouseLeave, hideTooltip).subscribe(grid.onHeaderMouseLeave, hideTooltip).subscribe(grid.onHeaderRowMouseLeave, hideTooltip);
+ }
+ function destroy() {
+ hideTooltip(), _eventHandler.unsubscribeAll();
+ }
+ function handleOnHeaderMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-header-column");
+ }
+ function handleOnHeaderRowMouseEnter(e, args) {
+ handleOnHeaderMouseEnterByType(e, args, "slick-headerrow-column");
+ }
+ function handleOnHeaderMouseEnterByType(e, args, selector) {
+ hideTooltip();
+ var cell = {
+ row: -1,
+ // negative row to avoid pulling any dataContext while rendering
+ cell: _grid.getColumns().findIndex(function(col) {
+ return args && args.column && args.column.id === col.id;
+ })
+ }, columnDef = args.column, item = {}, isHeaderRowType = selector === "slick-headerrow-column";
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = isHeaderRowType ? "header-row" : "header", _cellTooltipOptions = Utils19.extend(!0, {}, _options, columnDef.customTooltip), !(columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args)) && columnDef && e.target) {
+ _cellNodeElm = findClosestHeaderNode(e.target, selector);
+ var formatter = isHeaderRowType ? _cellTooltipOptions.headerRowFormatter : _cellTooltipOptions.headerFormatter;
+ if (_cellTooltipOptions.useRegularTooltip || !formatter) {
+ var formatterOrText = isHeaderRowType ? _cellTooltipOptions.useRegularTooltip ? null : formatter : columnDef.name;
+ renderRegularTooltip(formatterOrText, cell, null, columnDef, item);
+ } else
+ _cellNodeElm && typeof formatter == "function" && renderTooltipFormatter(formatter, cell, null, columnDef, item);
+ }
+ }
+ function findClosestHeaderNode(elm, selector) {
+ return typeof elm.closest == "function" ? elm.closest("." + selector) : elm.classList.contains(selector) ? elm : elm.parentElement.classList.contains(selector) ? elm.parentElement : null;
+ }
+ function handleOnMouseEnter(e, args) {
+ if (hideTooltip(), _grid && e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (cell) {
+ var item = _dataView ? _dataView.getItem(cell.row) : _grid.getDataItem(cell.row), columnDef = _grid.getColumns()[cell.cell];
+ if (_cellNodeElm = _grid.getCellNode(cell.row, cell.cell), _cellTooltipOptions = Utils19.extend(!0, {}, _options, columnDef.customTooltip), item && columnDef) {
+ if (args || (args = {}), args.cell = cell.cell, args.row = cell.row, args.columnDef = columnDef, args.dataContext = item, args.grid = _grid, args.type = "cell", columnDef && columnDef.disableTooltip || !runOverrideFunctionWhenExists(_cellTooltipOptions.usabilityOverride, args))
+ return;
+ var value = item.hasOwnProperty(columnDef.field) ? item[columnDef.field] : null;
+ if (_cellTooltipOptions.useRegularTooltip || !_cellTooltipOptions.formatter)
+ renderRegularTooltip(columnDef.formatter, cell, value, columnDef, item);
+ else if (typeof _cellTooltipOptions.formatter == "function" && renderTooltipFormatter(_cellTooltipOptions.formatter, cell, value, columnDef, item), typeof _cellTooltipOptions.asyncProcess == "function") {
+ var asyncProcess = _cellTooltipOptions.asyncProcess(cell.row, cell.cell, value, columnDef, item, _grid);
+ if (!_cellTooltipOptions.asyncPostFormatter)
+ throw new Error('[SlickGrid] when using "asyncProcess", you must also provide an "asyncPostFormatter" formatter');
+ asyncProcess instanceof Promise && (_cancellablePromise = cancellablePromise(asyncProcess), _cancellablePromise.promise.then(function(asyncResult) {
+ asyncProcessCallback(asyncResult, cell, value, columnDef, item);
+ }).catch(function(error) {
+ if (!error.isPromiseCancelled)
+ throw error;
+ }));
+ }
+ }
+ }
+ }
+ }
+ function findFirstElementAttribute(inputElm, attributes) {
+ if (inputElm) {
+ var outputAttrData;
+ return attributes.forEach(function(attribute) {
+ var attrData = inputElm.getAttribute(attribute);
+ attrData && (outputAttrData = attrData);
+ }), outputAttrData;
+ }
+ return null;
+ }
+ function renderRegularTooltip(formatterOrText, cell, value, columnDef, item) {
+ var tmpDiv = document.createElement("div");
+ tmpDiv.innerHTML = parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item);
+ var tooltipText = columnDef.toolTip || "", tmpTitleElm;
+ tooltipText || (_cellNodeElm && _cellNodeElm.clientWidth < _cellNodeElm.scrollWidth && !_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? (tooltipText = (_cellNodeElm.textContent || "").trim() || "", _cellTooltipOptions.tooltipTextMaxLength && tooltipText.length > _cellTooltipOptions.tooltipTextMaxLength && (tooltipText = tooltipText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..."), tmpTitleElm = _cellNodeElm) : (_cellTooltipOptions.useRegularTooltipFromFormatterOnly ? tmpTitleElm = tmpDiv.querySelector("[title], [data-slick-tooltip]") : (tmpTitleElm = findFirstElementAttribute(_cellNodeElm, ["title", "data-slick-tooltip"]) ? _cellNodeElm : tmpDiv.querySelector("[title], [data-slick-tooltip]"), (!tmpTitleElm || !findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"])) && _cellNodeElm && (tmpTitleElm = _cellNodeElm.querySelector("[title], [data-slick-tooltip]"))), (!tooltipText || typeof formatterOrText == "function" && _cellTooltipOptions.useRegularTooltipFromFormatterOnly) && (tooltipText = findFirstElementAttribute(tmpTitleElm, ["title", "data-slick-tooltip"]) || ""))), tooltipText !== "" && renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText), swapAndClearTitleAttribute(tmpTitleElm, tooltipText);
+ }
+ function swapAndClearTitleAttribute(inputTitleElm, tooltipText) {
+ var titleElm = inputTitleElm || _cellNodeElm && (_cellNodeElm.hasAttribute("title") && _cellNodeElm.getAttribute("title") ? _cellNodeElm : _cellNodeElm.querySelector("[title]"));
+ titleElm && (titleElm.setAttribute("data-slick-tooltip", tooltipText || ""), titleElm.hasAttribute("title") && titleElm.setAttribute("title", ""));
+ }
+ function asyncProcessCallback(asyncResult, cell, value, columnDef, dataContext) {
+ hideTooltip();
+ var itemWithAsyncData = Utils19.extend(!0, {}, dataContext, { [_cellTooltipOptions.asyncParamsPropName || "__params"]: asyncResult });
+ renderTooltipFormatter(_cellTooltipOptions.asyncPostFormatter, cell, value, columnDef, itemWithAsyncData);
+ }
+ function calculateAvailableSpaceTop(element) {
+ var availableSpace = 0, pageScrollTop = windowScrollPosition2().top, elmOffset = getHtmlElementOffset(element);
+ if (elmOffset) {
+ var elementOffsetTop = elmOffset.top;
+ availableSpace = elementOffsetTop - pageScrollTop;
+ }
+ return availableSpace;
+ }
+ function cancellablePromise(inputPromise) {
+ var hasCancelled = !1;
+ return inputPromise instanceof Promise ? {
+ promise: inputPromise.then(function(result) {
+ if (hasCancelled)
+ throw { isPromiseCancelled: !0 };
+ return result;
+ }),
+ cancel: function() {
+ hasCancelled = !0;
+ }
+ } : inputPromise;
+ }
+ function windowScrollPosition2() {
+ return {
+ left: window.pageXOffset || document.documentElement.scrollLeft || 0,
+ top: window.pageYOffset || document.documentElement.scrollTop || 0
+ };
+ }
+ function getHtmlElementOffset(element) {
+ if (element) {
+ var rect = element.getBoundingClientRect(), top = 0, left = 0, bottom = 0, right = 0;
+ return rect.top !== void 0 && rect.left !== void 0 && (top = rect.top + window.pageYOffset, left = rect.left + window.pageXOffset, right = rect.right, bottom = rect.bottom), { top, left, bottom, right };
+ }
+ }
+ function hideTooltip() {
+ _cancellablePromise && _cancellablePromise.cancel && _cancellablePromise.cancel();
+ var prevTooltip = document.body.querySelector("." + _cellTooltipOptions.className + "." + _grid.getUID());
+ prevTooltip && prevTooltip.remove && prevTooltip.remove();
+ }
+ function reposition(cell) {
+ if (_tooltipElm) {
+ _cellNodeElm = _cellNodeElm || _grid.getCellNode(cell.row, cell.cell);
+ var cellPosition = getHtmlElementOffset(_cellNodeElm), cellContainerWidth = _cellNodeElm.offsetWidth, calculatedTooltipHeight = _tooltipElm.getBoundingClientRect().height, calculatedTooltipWidth = _tooltipElm.getBoundingClientRect().width, calculatedBodyWidth = document.body.offsetWidth || window.innerWidth, newPositionTop = cellPosition.top - _tooltipElm.offsetHeight - (_cellTooltipOptions.offsetTopBottom || 0), newPositionLeft = (cellPosition && cellPosition.left || 0) - (_cellTooltipOptions.offsetRight || 0), position = _cellTooltipOptions.position || "auto";
+ position === "center" ? (newPositionLeft += cellContainerWidth / 2 - calculatedTooltipWidth / 2 + (_cellTooltipOptions.offsetRight || 0), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-center-align")) : position === "right-align" || (position === "auto" || position !== "left-align") && newPositionLeft + calculatedTooltipWidth > calculatedBodyWidth ? (newPositionLeft -= calculatedTooltipWidth - cellContainerWidth - (_cellTooltipOptions.offsetLeft || 0), _tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-left-align"), _tooltipElm.classList.add("arrow-right-align")) : (_tooltipElm.classList.remove("arrow-center-align"), _tooltipElm.classList.remove("arrow-right-align"), _tooltipElm.classList.add("arrow-left-align")), position === "bottom" || position === "auto" && calculatedTooltipHeight > calculateAvailableSpaceTop(_cellNodeElm) ? (newPositionTop = cellPosition.top + (_gridOptions.rowHeight || 0) + (_cellTooltipOptions.offsetTopBottom || 0), _tooltipElm.classList.remove("arrow-down"), _tooltipElm.classList.add("arrow-up")) : (_tooltipElm.classList.add("arrow-down"), _tooltipElm.classList.remove("arrow-up")), _tooltipElm.style.top = newPositionTop + "px", _tooltipElm.style.left = newPositionLeft + "px";
+ }
+ }
+ function parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item) {
+ if (typeof formatterOrText == "function") {
+ var tooltipText = formatterOrText(cell.row, cell.cell, value, columnDef, item, _grid), formatterText = typeof tooltipText == "object" && tooltipText && tooltipText.text ? tooltipText.text : typeof tooltipText == "string" ? tooltipText : "";
+ return _grid.sanitizeHtmlString(formatterText);
+ } else if (typeof formatterOrText == "string")
+ return _grid.sanitizeHtmlString(formatterOrText);
+ return "";
+ }
+ function renderTooltipFormatter(formatter, cell, value, columnDef, item, tooltipText, inputTitleElm) {
+ _tooltipElm = document.createElement("div"), _tooltipElm.className = _cellTooltipOptions.className, _tooltipElm.classList.add(_grid.getUID()), _tooltipElm.classList.add("l" + cell.cell), _tooltipElm.classList.add("r" + cell.cell);
+ var outputText = tooltipText || parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || "";
+ outputText = _cellTooltipOptions.tooltipTextMaxLength && outputText.length > _cellTooltipOptions.tooltipTextMaxLength ? outputText.substring(0, _cellTooltipOptions.tooltipTextMaxLength - 3) + "..." : outputText;
+ let finalOutputText = "";
+ !tooltipText || _cellTooltipOptions && _cellTooltipOptions.renderRegularTooltipAsHtml ? (finalOutputText = _grid.sanitizeHtmlString(outputText), _tooltipElm.innerHTML = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.whiteSpace || _defaults.whiteSpace) : (finalOutputText = outputText || "", _tooltipElm.textContent = finalOutputText, _tooltipElm.style.whiteSpace = _cellTooltipOptions && _cellTooltipOptions.regularTooltipWhiteSpace || _defaults.regularTooltipWhiteSpace), _cellTooltipOptions.maxHeight && (_tooltipElm.style.maxHeight = _cellTooltipOptions.maxHeight + "px"), _cellTooltipOptions.maxWidth && (_tooltipElm.style.maxWidth = _cellTooltipOptions.maxWidth + "px"), finalOutputText && (document.body.appendChild(_tooltipElm), reposition(cell), _cellTooltipOptions.hideArrow || _tooltipElm.classList.add("tooltip-arrow"), swapAndClearTitleAttribute(inputTitleElm, outputText));
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ function setOptions(newOptions) {
+ _options = Utils19.extend({}, _options, newOptions);
+ }
+ Utils19.extend(this, {
+ init,
+ destroy,
+ hide: hideTooltip,
+ setOptions,
+ pluginName: "CustomTooltip"
+ });
+}
+
+// src/plugins/slick.draggablegrouping.js
+var BindingEventService9 = BindingEventService, SlickEvent12 = Event, EventHandler8 = EventHandler, Utils20 = Utils;
+function DraggableGrouping(options) {
+ var _grid, _gridUid, _gridColumns, _dataView, _dropzoneElm, _droppableInstance, dropzonePlaceholder, groupToggler, _defaults = {}, onGroupChanged = new SlickEvent12(), _bindingEventService = new BindingEventService9(), _handler = new EventHandler8(), _sortableLeftInstance, _sortableRightInstance;
+ function init(grid) {
+ options = Utils20.extend(!0, {}, _defaults, options), _grid = grid, _gridUid = _grid.getUID(), _gridColumns = _grid.getColumns(), _dataView = _grid.getData(), _dropzoneElm = grid.getPreHeaderPanel(), _dropzoneElm.classList.add("slick-dropzone");
+ var dropPlaceHolderText = options.dropPlaceHolderText || "Drop a column header here to group by the column";
+ dropzonePlaceholder = document.createElement("div"), dropzonePlaceholder.className = "slick-placeholder", dropzonePlaceholder.textContent = dropPlaceHolderText, groupToggler = document.createElement("div"), groupToggler.className = "slick-group-toggle-all expanded", groupToggler.style.display = "none", _dropzoneElm.appendChild(dropzonePlaceholder), _dropzoneElm.appendChild(groupToggler), setupColumnDropbox(), _handler.subscribe(_grid.onHeaderCellRendered, function(e, args) {
+ var column = args.column, node = args.node;
+ if (!Utils20.isEmptyObject(column.grouping) && node && (node.style.cursor = "pointer", options.groupIconCssClass || options.groupIconImage)) {
+ let groupableIconElm = document.createElement("span");
+ groupableIconElm.className = "slick-column-groupable", options.groupIconCssClass && groupableIconElm.classList.add(...options.groupIconCssClass.split(" ")), options.groupIconImage && (groupableIconElm.style.background = "url(" + options.groupIconImage + ") no-repeat center center"), node.appendChild(groupableIconElm);
+ }
+ });
+ for (var i2 = 0; i2 < _gridColumns.length; i2++) {
+ var columnId = _gridColumns[i2].field;
+ _grid.updateColumnHeader(columnId);
+ }
+ }
+ function setupColumnReorder(grid, headers, _headerColumnWidthDiff, setColumns, setupColumnResize, _columns, getColumnIndex, _uid, trigger) {
+ let dropzoneElm = grid.getPreHeaderPanel();
+ var sortableOptions = {
+ animation: 50,
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-sortable-placeholder",
+ draggable: ".slick-header-column",
+ dataIdAttr: "data-id",
+ group: {
+ name: "shared",
+ pull: "clone",
+ put: !1
+ },
+ revertClone: !0,
+ // filter: function (_e, target) {
+ // // block column from being able to be dragged if it's already a grouped column
+ // // NOTE: need to disable for now since it also blocks the column reordering
+ // return columnsGroupBy.some(c => c.id === target.getAttribute('data-id'));
+ // },
+ onStart: function() {
+ dropzoneElm.classList.add("slick-dropzone-hover"), dropzoneElm.classList.add("slick-dropzone-placeholder-hover");
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm.style.display = "inline-block", groupToggler.style.display = "none", dropzoneElm.querySelectorAll(".slick-dropped-grouping").forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "none");
+ },
+ onEnd: function(e) {
+ let draggablePlaceholderElm = dropzoneElm.querySelector(".slick-placeholder");
+ dropzoneElm.classList.remove("slick-dropzone-hover"), draggablePlaceholderElm.classList.remove("slick-dropzone-placeholder-hover"), dropzonePlaceholder && (dropzonePlaceholder.style.display = "none"), draggablePlaceholderElm && draggablePlaceholderElm.parentElement && draggablePlaceholderElm.parentElement.classList.remove("slick-dropzone-placeholder-hover");
+ let droppedGroupingElms = dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ if (droppedGroupingElms.forEach((droppedGroupingElm) => droppedGroupingElm.style.display = "inline-flex"), droppedGroupingElms.length && (draggablePlaceholderElm && (draggablePlaceholderElm.style.display = "none"), groupToggler.style.display = "inline-block"), !grid.getEditorLock().commitCurrentEdit())
+ return;
+ let reorderedIds = _sortableLeftInstance && _sortableLeftInstance.toArray() || [];
+ if (headers.length > 1) {
+ let ids = _sortableRightInstance && _sortableRightInstance.toArray() || [];
+ for (let id of ids)
+ reorderedIds.push(id);
+ }
+ let finalReorderedColumns = [], reorderedColumns = grid.getColumns();
+ for (let reorderedId of reorderedIds)
+ finalReorderedColumns.push(reorderedColumns[getColumnIndex(reorderedId)]);
+ setColumns(finalReorderedColumns), trigger(grid.onColumnsReordered, { grid }), e.stopPropagation(), setupColumnResize();
+ }
+ };
+ return _sortableLeftInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-left`), sortableOptions), _sortableRightInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-right`), sortableOptions), {
+ sortableLeftInstance: _sortableLeftInstance,
+ sortableRightInstance: _sortableRightInstance
+ };
+ }
+ function destroy() {
+ _sortableLeftInstance && _sortableLeftInstance.el && _sortableLeftInstance.destroy(), _sortableRightInstance && _sortableRightInstance.el && _sortableRightInstance.destroy(), onGroupChanged.unsubscribe(), _handler.unsubscribeAll(), _bindingEventService.unbindAll(), Utils20.emptyElement(document.querySelector(`.${_gridUid} .slick-preheader-panel`));
+ }
+ function addDragOverDropzoneListeners() {
+ let draggablePlaceholderElm = _dropzoneElm.querySelector(".slick-placeholder");
+ draggablePlaceholderElm && (_bindingEventService.bind(draggablePlaceholderElm, "dragover", (e) => e.preventDefault), _bindingEventService.bind(draggablePlaceholderElm, "dragenter", () => _dropzoneElm.classList.add("slick-dropzone-hover")), _bindingEventService.bind(draggablePlaceholderElm, "dragleave", () => _dropzoneElm.classList.remove("slick-dropzone-hover")));
+ }
+ function setupColumnDropbox() {
+ let dropzoneElm = _dropzoneElm;
+ _droppableInstance = Sortable.create(dropzoneElm, {
+ group: "shared",
+ // chosenClass: 'slick-header-column-active',
+ ghostClass: "slick-droppable-sortitem-hover",
+ draggable: ".slick-dropped-grouping",
+ dragoverBubble: !0,
+ onAdd: (evt) => {
+ let el = evt.item, elId = el.getAttribute("id");
+ elId && elId.replace(_gridUid, "") && handleGroupByDrop(dropzoneElm, Sortable.utils.clone(evt.item)), evt.clone.style.opacity = ".5", el.parentNode && el.parentNode.removeChild(el);
+ },
+ onUpdate: () => {
+ let sortArray = _droppableInstance && _droppableInstance.toArray() || [], newGroupingOrder = [];
+ for (var i2 = 0, l = sortArray.length; i2 < l; i2++)
+ for (var a = 0, b = columnsGroupBy.length; a < b; a++)
+ if (columnsGroupBy[a].id == sortArray[i2]) {
+ newGroupingOrder.push(columnsGroupBy[a]);
+ break;
+ }
+ columnsGroupBy = newGroupingOrder, updateGroupBy("sort-group");
+ }
+ }), addDragOverDropzoneListeners(), groupToggler && _bindingEventService.bind(groupToggler, "click", (event) => {
+ let target = event.target;
+ toggleGroupToggler(target, target && target.classList.contains("expanded"));
+ });
+ }
+ var columnsGroupBy = [];
+ function handleGroupByDrop(containerElm, headerColumnElm) {
+ let headerColDataId = headerColumnElm.getAttribute("data-id"), columnId = headerColDataId && headerColDataId.replace(_gridUid, ""), columnAllowed = !0;
+ for (let colGroupBy of columnsGroupBy)
+ colGroupBy.id === columnId && (columnAllowed = !1);
+ if (columnAllowed) {
+ for (let col of _gridColumns)
+ if (col.id === columnId && col.grouping && !Utils20.isEmptyObject(col.grouping)) {
+ let columnNameElm = headerColumnElm.querySelector(".slick-column-name"), entryElm = document.createElement("div");
+ entryElm.id = `${_gridUid}_${col.id}_entry`, entryElm.className = "slick-dropped-grouping", entryElm.dataset.id = `${col.id}`;
+ let groupTextElm = document.createElement("div");
+ groupTextElm.className = "slick-dropped-grouping-title", groupTextElm.style.display = "inline-flex", groupTextElm.textContent = columnNameElm ? columnNameElm.textContent : headerColumnElm.textContent, entryElm.appendChild(groupTextElm);
+ let groupRemoveIconElm = document.createElement("div");
+ groupRemoveIconElm.className = "slick-groupby-remove", options.deleteIconCssClass && groupRemoveIconElm.classList.add(...options.deleteIconCssClass.split(" ")), options.deleteIconImage && groupRemoveIconElm.classList.add(...options.deleteIconImage.split(" ")), options.deleteIconCssClass || groupRemoveIconElm.classList.add("slick-groupby-remove-icon"), !options.deleteIconCssClass && !options.deleteIconImage && groupRemoveIconElm.classList.add("slick-groupby-remove-image"), options && options.hideGroupSortIcons !== !0 && col.sortable && col.grouping && col.grouping.sortAsc === void 0 && (col.grouping.sortAsc = !0), entryElm.appendChild(groupRemoveIconElm), entryElm.appendChild(document.createElement("div")), containerElm.appendChild(entryElm), addColumnGroupBy(col), addGroupByRemoveClickHandler(col.id, groupRemoveIconElm, headerColumnElm, entryElm);
+ }
+ groupToggler.style.display = "inline-block";
+ }
+ }
+ function addColumnGroupBy(column) {
+ columnsGroupBy.push(column), updateGroupBy("add-group");
+ }
+ function addGroupByRemoveClickHandler(id, groupRemoveIconElm, headerColumnElm, entry) {
+ _bindingEventService.bind(groupRemoveIconElm, "click", () => {
+ let boundedElms = _bindingEventService.boundedEvents.filter((boundedEvent) => boundedEvent.element === groupRemoveIconElm);
+ for (let boundedEvent of boundedElms)
+ _bindingEventService.unbind(boundedEvent.element, "click", boundedEvent.listener);
+ removeGroupBy(id, headerColumnElm, entry);
+ });
+ }
+ function setDroppedGroups(groupingInfo) {
+ let groupingInfos = Array.isArray(groupingInfo) ? groupingInfo : [groupingInfo];
+ dropzonePlaceholder.style.display = "none";
+ for (let groupInfo of groupingInfos) {
+ let columnElm = _grid.getHeaderColumn(groupInfo);
+ handleGroupByDrop(_dropzoneElm, columnElm);
+ }
+ }
+ function clearDroppedGroups() {
+ columnsGroupBy = [], updateGroupBy("clear-all");
+ let allDroppedGroupingElms = _dropzoneElm.querySelectorAll(".slick-dropped-grouping");
+ groupToggler.style.display = "none";
+ for (let groupElm of Array.from(allDroppedGroupingElms)) {
+ let groupRemoveBtnElm = _dropzoneElm.querySelector(".slick-groupby-remove");
+ groupRemoveBtnElm && groupRemoveBtnElm.remove(), groupElm && groupElm.remove();
+ }
+ dropzonePlaceholder.style.display = "inline-block";
+ }
+ function removeFromArray(arr) {
+ for (var what, a = arguments, L = a.length, ax; L > 1 && arr.length; )
+ for (what = a[--L]; (ax = arr.indexOf(what)) != -1; )
+ arr.splice(ax, 1);
+ return arr;
+ }
+ function removeGroupBy(id, _column, entry) {
+ entry.remove();
+ var groupby = [];
+ _gridColumns.forEach(function(e) {
+ groupby[e.id] = e;
+ }), removeFromArray(columnsGroupBy, groupby[id]), columnsGroupBy.length === 0 && (dropzonePlaceholder.style = "block", groupToggler.style.display = "none"), updateGroupBy("remove-group");
+ }
+ function toggleGroupToggler(targetElm, collapsing = !0, shouldExecuteDataViewCommand = !0) {
+ targetElm && (collapsing === !0 ? (targetElm.classList.add("collapsed"), targetElm.classList.remove("expanded"), shouldExecuteDataViewCommand && _dataView.collapseAllGroups()) : (targetElm.classList.remove("collapsed"), targetElm.classList.add("expanded"), shouldExecuteDataViewCommand && _dataView.expandAllGroups()));
+ }
+ function updateGroupBy(originator) {
+ if (columnsGroupBy.length === 0) {
+ _dataView.setGrouping([]), onGroupChanged.notify({ caller: originator, groupColumns: [] });
+ return;
+ }
+ var groupingArray = [];
+ columnsGroupBy.forEach(function(element) {
+ groupingArray.push(element.grouping);
+ }), _dataView.setGrouping(groupingArray), onGroupChanged.notify({ caller: originator, groupColumns: groupingArray });
+ }
+ Utils20.extend(this, {
+ init,
+ destroy,
+ pluginName: "DraggableGrouping",
+ onGroupChanged,
+ setDroppedGroups,
+ clearDroppedGroups,
+ getSetupColumnReorder: setupColumnReorder
+ });
+}
+
+// src/plugins/slick.headerbuttons.js
+var BindingEventService10 = BindingEventService, SlickEvent13 = Event, EventHandler9 = EventHandler, Utils21 = Utils;
+function HeaderButtons(options) {
+ var _grid, _self = this, _handler = new EventHandler9(), _bindingEventService = new BindingEventService10(), _defaults = {
+ buttonCssClass: "slick-header-button"
+ };
+ function init(grid) {
+ options = Utils21.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns());
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll();
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons)
+ for (var i2 = column.header.buttons.length; i2--; ) {
+ var button = column.header.buttons[i2], isItemVisible = runOverrideFunctionWhenExists(button.itemVisibilityOverride, args), isItemUsable = runOverrideFunctionWhenExists(button.itemUsabilityOverride, args);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(button, "itemUsabilityOverride") && (button.disabled = !isItemUsable);
+ let btn = document.createElement("div");
+ btn.className = options.buttonCssClass, btn.ariaLabel = "Header Button", btn.role = "button", button.disabled && btn.classList.add("slick-header-button-disabled"), button.showOnHover && btn.classList.add("slick-header-button-hidden"), button.image && (btn.style.backgroundImage = "url(" + button.image + ")"), button.cssClass && btn.classList.add(...button.cssClass.split(" ")), button.tooltip && (btn.title = button.tooltip), button.handler && _bindingEventService.bind(btn, "click", button.handler), _bindingEventService.bind(btn, "click", handleButtonClick.bind(this, button, args.column)), args.node.appendChild(btn);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ if (column.header && column.header.buttons) {
+ let buttonCssClass = (options.buttonCssClass || "").replace(/(\s+)/g, ".");
+ buttonCssClass && args.node.querySelectorAll(`.${buttonCssClass}`).forEach((elm) => elm.remove());
+ }
+ }
+ function handleButtonClick(button, columnDef, e) {
+ let command = button.command || "", callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ button
+ };
+ command != null && (callbackArgs.command = command), typeof button.action == "function" && button.action.call(this, e, callbackArgs), command != null && !button.disabled && (_self.onCommand.notify(callbackArgs, e, _self), _grid.updateColumnHeader(columnDef.id)), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils21.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderButtons",
+ onCommand: new SlickEvent13()
+ });
+}
+
+// src/plugins/slick.headermenu.js
+var BindingEventService11 = BindingEventService, SlickEvent14 = Event, EventHandler10 = EventHandler, Utils22 = Utils;
+function HeaderMenu(options) {
+ var _grid, _self = this, _handler = new EventHandler10(), _bindingEventService = new BindingEventService11(), _defaults = {
+ buttonCssClass: null,
+ buttonImage: null,
+ minWidth: 100,
+ autoAlign: !0,
+ autoAlignOffset: 0
+ }, _activeHeaderColumnElm, _menuElm;
+ function init(grid) {
+ options = Utils22.extend(!0, {}, _defaults, options), _grid = grid, _handler.subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered).subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy), _grid.setColumns(_grid.getColumns()), _bindingEventService.bind(document.body, "mousedown", handleBodyMouseDown.bind(this));
+ }
+ function setOptions(newOptions) {
+ options = Utils22.extend(!0, {}, options, newOptions);
+ }
+ function getGridUidSelector() {
+ let gridUid = _grid.getUID() || "";
+ return gridUid ? `.${gridUid}` : "";
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _bindingEventService.unbindAll(), _menuElm = _menuElm || document.body.querySelector(`.slick-header-menu${getGridUidSelector()}`), _menuElm && _menuElm.remove(), _activeHeaderColumnElm = void 0;
+ }
+ function handleBodyMouseDown(e) {
+ (_menuElm !== e.target && !(_menuElm && _menuElm.contains(e.target)) || e.target.className === "close") && hideMenu();
+ }
+ function hideMenu() {
+ _menuElm && (_menuElm.remove(), _menuElm = void 0), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.remove("slick-header-column-active");
+ }
+ function handleHeaderCellRendered(e, args) {
+ var column = args.column, menu = column.header && column.header.menu;
+ if (menu) {
+ if (!runOverrideFunctionWhenExists(options.menuUsabilityOverride, args))
+ return;
+ let elm = document.createElement("div");
+ if (elm.className = "slick-header-menubutton", elm.ariaLabel = "Header Menu", elm.role = "button", !options.buttonCssClass && !options.buttonImage && (options.buttonCssClass = "caret"), options.buttonCssClass) {
+ let icon = document.createElement("span");
+ icon.classList.add(...options.buttonCssClass.split(" ")), elm.appendChild(icon);
+ }
+ options.buttonImage && (elm.style.backgroundImage = "url(" + options.buttonImage + ")"), options.tooltip && (elm.title = options.tooltip), _bindingEventService.bind(elm, "click", (e2) => showMenu(e2, menu, args.column)), args.node.appendChild(elm);
+ }
+ }
+ function handleBeforeHeaderCellDestroy(e, args) {
+ var column = args.column;
+ column.header && column.header.menu && args.node.querySelectorAll(".slick-header-menubutton").forEach((elm) => elm.remove());
+ }
+ function showMenu(event, menu, columnDef) {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ menu
+ };
+ if (_self.onBeforeMenuShow.notify(callbackArgs, event, _self).getReturnValue() == !1)
+ return;
+ if (!_menuElm) {
+ _menuElm = document.createElement("div"), _menuElm.className = "slick-header-menu", _menuElm.role = "menu", _menuElm.style.minWidth = `${options.minWidth}px`, _menuElm.setAttribute("aria-expanded", "true");
+ let containerNode = _grid.getContainerNode();
+ containerNode && containerNode.appendChild(_menuElm);
+ }
+ Utils22.emptyElement(_menuElm);
+ for (var i2 = 0; i2 < menu.items.length; i2++) {
+ var item = menu.items[i2], isItemVisible = runOverrideFunctionWhenExists(item.itemVisibilityOverride, callbackArgs), isItemUsable = runOverrideFunctionWhenExists(item.itemUsabilityOverride, callbackArgs);
+ if (!isItemVisible)
+ continue;
+ Object.prototype.hasOwnProperty.call(item, "itemUsabilityOverride") && (item.disabled = !isItemUsable);
+ let menuItem = document.createElement("div");
+ if (menuItem.className = "slick-header-menuitem", menuItem.role = "menuitem", item.divider || item === "divider") {
+ menuItem.classList.add("slick-header-menuitem-divider");
+ continue;
+ }
+ item.disabled && menuItem.classList.add("slick-header-menuitem-disabled"), item.hidden && menuItem.classList.add("slick-header-menuitem-hidden"), item.cssClass && menuItem.classList.add(...item.cssClass.split(" ")), item.tooltip && (menuItem.title = item.tooltip);
+ let iconElm = document.createElement("div");
+ iconElm.className = "slick-header-menuicon", menuItem.appendChild(iconElm), item.iconCssClass && iconElm.classList.add(...item.iconCssClass.split(" ")), item.iconImage && (iconElm.style.backgroundImage = "url(" + item.iconImage + ")");
+ let textElm = document.createElement("span");
+ textElm.className = "slick-header-menucontent", textElm.textContent = item.title, menuItem.appendChild(textElm), item.textCssClass && textElm.classList.add(...item.textCssClass.split(" ")), _menuElm.appendChild(menuItem), _bindingEventService.bind(menuItem, "click", handleMenuItemClick.bind(this, item, columnDef));
+ }
+ let buttonElm = event.target, btnOffset = Utils22.offset(buttonElm), menuOffset = Utils22.offset(_menuElm), leftPos = btnOffset && btnOffset.left || 0;
+ if (options.autoAlign) {
+ let gridPos = _grid.getGridPosition();
+ leftPos + _menuElm.offsetWidth >= gridPos.width && (leftPos = leftPos + buttonElm.clientWidth - _menuElm.clientWidth + (options.autoAlignOffset || 0));
+ }
+ _menuElm.style.top = `${(buttonElm.clientHeight || btnOffset && btnOffset.top || 0) + (options && options.menuOffsetTop || 0)}px`, _menuElm.style.left = `${leftPos - menuOffset.left}px`, _activeHeaderColumnElm = _menuElm.closest(".slick-header-column"), _activeHeaderColumnElm && _activeHeaderColumnElm.classList.add("slick-header-column-active"), _self.onAfterMenuShow.notify(callbackArgs, event, _self).getReturnValue() != !1 && (event.preventDefault(), event.stopPropagation());
+ }
+ function handleMenuItemClick(item, columnDef, e) {
+ let command = item.command || "";
+ if (item.disabled || item.divider || item === "divider")
+ return !1;
+ if (command != null && command !== "") {
+ var callbackArgs = {
+ grid: _grid,
+ column: columnDef,
+ command,
+ item
+ };
+ _self.onCommand.notify(callbackArgs, e, _self), typeof item.action == "function" && item.action.call(this, e, callbackArgs);
+ }
+ e.defaultPrevented || hideMenu(), e.preventDefault(), e.stopPropagation();
+ }
+ function runOverrideFunctionWhenExists(overrideFn, args) {
+ return typeof overrideFn == "function" ? overrideFn.call(this, args) : !0;
+ }
+ Utils22.extend(this, {
+ init,
+ destroy,
+ pluginName: "HeaderMenu",
+ setOptions,
+ onAfterMenuShow: new SlickEvent14(),
+ onBeforeMenuShow: new SlickEvent14(),
+ onCommand: new SlickEvent14()
+ });
+}
+
+// src/plugins/slick.resizer.js
+var BindingEventService12 = BindingEventService, SlickEvent15 = Event, Utils23 = Utils;
+function Resizer(_options, fixedDimensions) {
+ let DATAGRID_MIN_HEIGHT = 180, DATAGRID_MIN_WIDTH = 300, DATAGRID_BOTTOM_PADDING = 20, _self = this, _fixedHeight, _fixedWidth, _grid, _gridOptions, _gridUid, _lastDimensions, _timer, _resizePaused = !1, _gridDomElm, _pageContainerElm, _gridContainerElm, _defaults = {
+ bottomPadding: 20,
+ applyResizeToContainer: !1,
+ minHeight: 180,
+ minWidth: 300,
+ rightPadding: 0
+ }, options = {}, _bindingEventService = new BindingEventService12();
+ function setOptions(_newOptions) {
+ options = Utils23.extend(!0, {}, _defaults, options, _newOptions);
+ }
+ function init(grid) {
+ setOptions(_options), _grid = grid, _gridOptions = _grid.getOptions(), _gridUid = _grid.getUID(), _gridDomElm = _grid.getContainerNode(), typeof _options.container == "string" ? _pageContainerElm = typeof _options.container == "string" ? document.querySelector(_options.container) : _options.container : _pageContainerElm = _options.container, options.gridContainer && (_gridContainerElm = options.gridContainer), fixedDimensions && (_fixedHeight = fixedDimensions.height, _fixedWidth = fixedDimensions.width), _gridOptions && bindAutoResizeDataGrid();
+ }
+ function bindAutoResizeDataGrid(newSizes) {
+ let gridElmOffset = Utils23.offset(_gridDomElm);
+ (_gridDomElm !== void 0 || gridElmOffset !== void 0) && (resizeGrid(0, newSizes, null), _bindingEventService.bind(window, "resize", function(event) {
+ _self.onGridBeforeResize.notify({ grid: _grid }, event, _self), _resizePaused || (resizeGrid(0, newSizes, event), resizeGrid(0, newSizes, event));
+ }));
+ }
+ function calculateGridNewDimensions() {
+ let gridElmOffset = Utils23.offset(_gridDomElm);
+ if (!window || _pageContainerElm === void 0 || _gridDomElm === void 0 || gridElmOffset === void 0)
+ return null;
+ let bottomPadding = options && options.bottomPadding !== void 0 ? options.bottomPadding : DATAGRID_BOTTOM_PADDING, gridHeight = 0, gridOffsetTop = 0;
+ options.calculateAvailableSizeBy === "container" ? gridHeight = Utils23.innerSize(_pageContainerElm, "height") || 0 : (gridHeight = window.innerHeight || 0, gridOffsetTop = gridElmOffset !== void 0 ? gridElmOffset.top : 0);
+ let availableHeight = gridHeight - gridOffsetTop - bottomPadding, availableWidth = Utils23.innerSize(_pageContainerElm, "width") || window.innerWidth || 0, maxHeight = options && options.maxHeight || void 0, minHeight = options && options.minHeight !== void 0 ? options.minHeight : DATAGRID_MIN_HEIGHT, maxWidth = options && options.maxWidth || void 0, minWidth = options && options.minWidth !== void 0 ? options.minWidth : DATAGRID_MIN_WIDTH, newHeight = availableHeight, newWidth = options && options.rightPadding ? availableWidth - options.rightPadding : availableWidth;
+ return newHeight < minHeight && (newHeight = minHeight), maxHeight && newHeight > maxHeight && (newHeight = maxHeight), newWidth < minWidth && (newWidth = minWidth), maxWidth && newWidth > maxWidth && (newWidth = maxWidth), {
+ height: _fixedHeight || newHeight,
+ width: _fixedWidth || newWidth
+ };
+ }
+ function destroy() {
+ _self.onGridBeforeResize.unsubscribe(), _self.onGridAfterResize.unsubscribe(), _bindingEventService.unbindAll();
+ }
+ function getLastResizeDimensions() {
+ return _lastDimensions;
+ }
+ function pauseResizer(isResizePaused) {
+ _resizePaused = isResizePaused;
+ }
+ function resizeGrid(delay, newSizes, event) {
+ if (delay = delay || 0, typeof Promise == "function")
+ return new Promise(function(resolve) {
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resolve(resizeGridCallback(newSizes, event));
+ }, delay)) : resolve(resizeGridCallback(newSizes, event));
+ });
+ delay > 0 ? (clearTimeout(_timer), _timer = setTimeout(function() {
+ resizeGridCallback(newSizes, event);
+ }, delay)) : resizeGridCallback(newSizes, event);
+ }
+ function resizeGridCallback(newSizes, event) {
+ let lastDimensions = resizeGridWithDimensions(newSizes);
+ return _self.onGridAfterResize.notify({ grid: _grid, dimensions: lastDimensions }, event, _self), lastDimensions;
+ }
+ function resizeGridWithDimensions(newSizes) {
+ let availableDimensions = calculateGridNewDimensions();
+ if ((newSizes || availableDimensions) && _gridDomElm)
+ try {
+ let newHeight = newSizes && newSizes.height ? newSizes.height : availableDimensions.height, newWidth = newSizes && newSizes.width ? newSizes.width : availableDimensions.width;
+ _gridOptions.autoHeight || (_gridDomElm.style.height = `${newHeight}px`), _gridDomElm.style.width = `${newWidth}px`, _gridContainerElm && (_gridContainerElm.style.width = `${newWidth}px`), new RegExp("MSIE [6-8]").exec(navigator.userAgent) === null && _grid && _grid.resizeCanvas && _grid.resizeCanvas(), _gridOptions && _gridOptions.enableAutoSizeColumns && _grid.autosizeColumns && _gridUid && document.querySelector(`.${_gridUid}`) && _grid.autosizeColumns(), _lastDimensions = {
+ height: newHeight,
+ width: newWidth
+ };
+ } catch {
+ destroy();
+ }
+ return _lastDimensions;
+ }
+ Utils23.extend(this, {
+ init,
+ destroy,
+ pluginName: "Resizer",
+ bindAutoResizeDataGrid,
+ getLastResizeDimensions,
+ pauseResizer,
+ resizeGrid,
+ setOptions,
+ onGridAfterResize: new SlickEvent15(),
+ onGridBeforeResize: new SlickEvent15()
+ });
+}
+
+// src/plugins/slick.rowdetailview.js
+var SlickEvent16 = Event, EventHandler11 = EventHandler, Utils24 = Utils;
+function RowDetailView(options) {
+ var _grid, _gridOptions, _gridUid, _dataView, _dataViewIdProperty = "id", _expandableOverride = null, _self = this, _lastRange = null, _expandedRows = [], _handler = new EventHandler11(), _outsideRange = 5, _visibleRenderedCellCount = 0, _defaults = {
+ columnId: "_detail_selector",
+ cssClass: "detailView-toggle",
+ expandedClass: null,
+ collapsedClass: null,
+ keyPrefix: "_",
+ loadOnce: !1,
+ collapseAllOnSort: !0,
+ saveDetailViewOnScroll: !0,
+ singleRowExpand: !1,
+ useSimpleViewportCalc: !1,
+ alwaysRenderColumn: !0,
+ toolTip: "",
+ width: 30,
+ maxRows: null
+ }, _keyPrefix = _defaults.keyPrefix, _gridRowBuffer = 0, _rowIdsOutOfViewport = [], _options = Utils24.extend(!0, {}, _defaults, options);
+ typeof _options.expandableOverride == "function" && expandableOverride(_options.expandableOverride);
+ function init(grid) {
+ if (!grid)
+ throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the "init()" method');
+ _grid = grid, _gridUid = grid.getUID(), _gridOptions = grid.getOptions() || {}, _dataView = _grid.getData(), _keyPrefix = _options && _options.keyPrefix || "_", _gridRowBuffer = _grid.getOptions().minRowBuffer, _grid.getOptions().minRowBuffer = _options.panelRows + 3, _handler.subscribe(_grid.onClick, handleClick).subscribe(_grid.onScroll, handleScroll), _options.collapseAllOnSort && (_handler.subscribe(_grid.onSort, collapseAll), _expandedRows = [], _rowIdsOutOfViewport = []), _handler.subscribe(_grid.getData().onRowCountChanged, function() {
+ _grid.updateRowCount(), _grid.render();
+ }), _handler.subscribe(_grid.getData().onRowsChanged, function(e, a) {
+ _grid.invalidateRows(a.rows), _grid.render();
+ }), subscribeToOnAsyncResponse(), _handler.subscribe(_dataView.onSetItemsCalled, function() {
+ _dataViewIdProperty = _dataView && _dataView.getIdPropertyName() || "id";
+ }), _options.useSimpleViewportCalc && _handler.subscribe(_grid.onRendered, function(e, args) {
+ args && args.endRow && (_visibleRenderedCellCount = args.endRow - args.startRow);
+ });
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _self.onAsyncResponse.unsubscribe(), _self.onAsyncEndUpdate.unsubscribe(), _self.onAfterRowDetailToggle.unsubscribe(), _self.onBeforeRowDetailToggle.unsubscribe(), _self.onRowOutOfViewportRange.unsubscribe(), _self.onRowBackToViewportRange.unsubscribe();
+ }
+ function getOptions() {
+ return _options;
+ }
+ function setOptions(options2) {
+ _options = Utils24.extend(!0, {}, _options, options2), _options && _options.singleRowExpand && collapseAll();
+ }
+ function arrayFindIndex(sourceArray, value) {
+ if (sourceArray) {
+ for (var i2 = 0; i2 < sourceArray.length; i2++)
+ if (sourceArray[i2] === value)
+ return i2;
+ }
+ return -1;
+ }
+ function handleClick(e, args) {
+ var dataContext = _grid.getDataItem(args.row);
+ if (checkExpandableOverride(args.row, dataContext, _grid) && (_options.useRowClick || _grid.getColumns()[args.cell].id === _options.columnId && e.target.classList.contains(_options.cssClass || ""))) {
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
+ e.preventDefault(), e.stopImmediatePropagation();
+ return;
+ }
+ _self.onBeforeRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext
+ }, e, _self), toggleRowSelection(args.row, dataContext), _self.onAfterRowDetailToggle.notify({
+ grid: _grid,
+ item: dataContext,
+ expandedRows: _expandedRows
+ }, e, _self), e.stopPropagation(), e.stopImmediatePropagation();
+ }
+ }
+ function handleScroll() {
+ _options.useSimpleViewportCalc ? calculateOutOfRangeViewsSimplerVersion() : calculateOutOfRangeViews();
+ }
+ function calculateOutOfRangeViews() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ if (_expandedRows.length > 0) {
+ var scrollDir = "DOWN";
+ if (_lastRange) {
+ if (_lastRange.top === renderedRange.top && _lastRange.bottom === renderedRange.bottom)
+ return;
+ (_lastRange.top > renderedRange.top || // Or we are at very top but our bottom is increasing
+ _lastRange.top === 0 && renderedRange.top === 0 && _lastRange.bottom > renderedRange.bottom) && (scrollDir = "UP");
+ }
+ }
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), rowPadding = row[_keyPrefix + "sizePadding"], rowOutOfRange = arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0;
+ scrollDir === "UP" ? (_options.saveDetailViewOnScroll && rowIndex >= renderedRange.bottom - _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex - _outsideRange < renderedRange.top && rowIndex >= renderedRange.top ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex + rowPadding > renderedRange.bottom && notifyOutOfViewport(row, row[_dataViewIdProperty])) : scrollDir === "DOWN" && (_options.saveDetailViewOnScroll && rowIndex <= renderedRange.top + _gridRowBuffer && saveDetailView(row), rowOutOfRange && rowIndex + rowPadding + _outsideRange > renderedRange.bottom && rowIndex < rowIndex + rowPadding ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : !rowOutOfRange && rowIndex < renderedRange.top && notifyOutOfViewport(row, row[_dataViewIdProperty]));
+ }), _lastRange = renderedRange;
+ }
+ }
+ function calculateOutOfRangeViewsSimplerVersion() {
+ if (_grid) {
+ var renderedRange = _grid.getRenderedRange();
+ _expandedRows.forEach(function(row) {
+ var rowIndex = _dataView.getRowById(row[_dataViewIdProperty]), isOutOfVisibility = checkIsRowOutOfViewportRange(rowIndex, renderedRange);
+ !isOutOfVisibility && arrayFindIndex(_rowIdsOutOfViewport, row[_dataViewIdProperty]) >= 0 ? notifyBackToViewportWhenDomExist(row, row[_dataViewIdProperty]) : isOutOfVisibility && notifyOutOfViewport(row, row[_dataViewIdProperty]);
+ });
+ }
+ }
+ function checkIsRowOutOfViewportRange(rowIndex, renderedRange) {
+ return Math.abs(renderedRange.bottom - _gridRowBuffer - rowIndex) > _visibleRenderedCellCount * 2;
+ }
+ function notifyOutOfViewport(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ _self.onRowOutOfViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !0)
+ }, null, _self);
+ }
+ function notifyBackToViewportWhenDomExist(item, rowId) {
+ var rowIndex = item.rowIndex || _dataView.getRowById(item[_dataViewIdProperty]);
+ setTimeout(function() {
+ document.querySelector(`.${_gridUid} .cellDetailView_${item[_dataViewIdProperty]}`) && _self.onRowBackToViewportRange.notify({
+ grid: _grid,
+ item,
+ rowId,
+ rowIndex,
+ expandedRows: _expandedRows,
+ rowIdsOutOfViewport: syncOutOfViewportArray(rowId, !1)
+ }, null, _self);
+ }, 100);
+ }
+ function syncOutOfViewportArray(rowId, isAdding) {
+ var arrayRowIndex = arrayFindIndex(_rowIdsOutOfViewport, rowId);
+ return isAdding && arrayRowIndex < 0 ? _rowIdsOutOfViewport.push(rowId) : !isAdding && arrayRowIndex >= 0 && _rowIdsOutOfViewport.splice(arrayRowIndex, 1), _rowIdsOutOfViewport;
+ }
+ function toggleRowSelection(rowNumber, dataContext) {
+ checkExpandableOverride(rowNumber, dataContext, _grid) && (_dataView.beginUpdate(), handleAccordionShowHide(dataContext), _dataView.endUpdate());
+ }
+ function collapseAll() {
+ _dataView.beginUpdate();
+ for (var i2 = _expandedRows.length - 1; i2 >= 0; i2--)
+ collapseDetailView(_expandedRows[i2], !0);
+ _dataView.endUpdate();
+ }
+ function collapseDetailView(item, isMultipleCollapsing) {
+ isMultipleCollapsing || _dataView.beginUpdate(), _options.loadOnce && saveDetailView(item), item[_keyPrefix + "collapsed"] = !0;
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ item[_keyPrefix + "sizePadding"] = 0, _dataView.updateItem(item[_dataViewIdProperty], item), _expandedRows = _expandedRows.filter(function(r) {
+ return r[_dataViewIdProperty] !== item[_dataViewIdProperty];
+ }), isMultipleCollapsing || _dataView.endUpdate();
+ }
+ function expandDetailView(item) {
+ if (_options && _options.singleRowExpand && collapseAll(), item[_keyPrefix + "collapsed"] = !1, _expandedRows.push(item), item[_keyPrefix + "detailContent"] || (item[_keyPrefix + "detailViewLoaded"] = !1), !item[_keyPrefix + "detailViewLoaded"] || _options.loadOnce !== !0)
+ item[_keyPrefix + "detailContent"] = _options.preTemplate(item);
+ else {
+ _self.onAsyncResponse.notify({
+ item,
+ itemDetail: item,
+ detailView: item[_keyPrefix + "detailContent"]
+ }, void 0, this), applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item);
+ return;
+ }
+ applyTemplateNewLineHeight(item), _dataView.updateItem(item[_dataViewIdProperty], item), _options.process(item);
+ }
+ function saveDetailView(item) {
+ let view = document.querySelector(`.${_gridUid} .innerDetailView_${item[_dataViewIdProperty]}`);
+ if (view) {
+ let html = view.innerHTML;
+ html !== void 0 && (item[`${_keyPrefix}detailContent`] = html);
+ }
+ }
+ function subscribeToOnAsyncResponse() {
+ _self.onAsyncResponse.subscribe(function(e, args) {
+ if (!args || !args.item && !args.itemDetail)
+ throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.item" property.';
+ var itemDetail = args.item || args.itemDetail;
+ args.detailView ? itemDetail[_keyPrefix + "detailContent"] = args.detailView : itemDetail[_keyPrefix + "detailContent"] = _options.postTemplate(itemDetail), itemDetail[_keyPrefix + "detailViewLoaded"] = !0, _dataView.updateItem(itemDetail[_dataViewIdProperty], itemDetail), _self.onAsyncEndUpdate.notify({
+ grid: _grid,
+ item: itemDetail,
+ itemDetail
+ }, e, _self);
+ });
+ }
+ function handleAccordionShowHide(item) {
+ item && (item[_keyPrefix + "collapsed"] ? expandDetailView(item) : collapseDetailView(item));
+ }
+ var getPaddingItem = function(parent, offset2) {
+ var item = {};
+ for (var prop in _grid.getData())
+ item[prop] = null;
+ return item[_dataViewIdProperty] = parent[_dataViewIdProperty] + "." + offset2, item[_keyPrefix + "collapsed"] = !0, item[_keyPrefix + "isPadding"] = !0, item[_keyPrefix + "parent"] = parent, item[_keyPrefix + "offset"] = offset2, item;
+ };
+ function applyTemplateNewLineHeight(item) {
+ var rowCount = _options.panelRows, lineHeight = 13;
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / _gridOptions.rowHeight), item[_keyPrefix + "height"] = item[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ }
+ function getColumnDefinition() {
+ return {
+ id: _options.columnId,
+ name: "",
+ toolTip: _options.toolTip,
+ field: "sel",
+ width: _options.width,
+ resizable: !1,
+ sortable: !1,
+ alwaysRenderColumn: _options.alwaysRenderColumn,
+ cssClass: _options.cssClass,
+ formatter: detailSelectionFormatter
+ };
+ }
+ function getExpandedRows() {
+ return _expandedRows;
+ }
+ function detailSelectionFormatter(row, cell, value, columnDef, dataContext, grid) {
+ if (checkExpandableOverride(row, dataContext, grid)) {
+ if (dataContext[_keyPrefix + "collapsed"] == null && (dataContext[_keyPrefix + "collapsed"] = !0, dataContext[_keyPrefix + "sizePadding"] = 0, dataContext[_keyPrefix + "height"] = 0, dataContext[_keyPrefix + "isPadding"] = !1, dataContext[_keyPrefix + "parent"] = void 0, dataContext[_keyPrefix + "offset"] = 0), !dataContext[_keyPrefix + "isPadding"])
+ if (dataContext[_keyPrefix + "collapsed"]) {
+ var collapsedClasses = _options.cssClass + " expand ";
+ return _options.collapsedClass && (collapsedClasses += _options.collapsedClass), '
';
+ } else {
+ var html = [], rowHeight = _gridOptions.rowHeight, outterHeight = dataContext[_keyPrefix + "sizePadding"] * _gridOptions.rowHeight;
+ _options.maxRows !== null && dataContext[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, dataContext[_keyPrefix + "sizePadding"] = _options.maxRows);
+ var expandedClasses = _options.cssClass + " collapse ";
+ return _options.expandedClass && (expandedClasses += _options.expandedClass), html.push('
'), html.push(''), html.push('
'), html.push('
', dataContext[_keyPrefix + "detailContent"], "
"), html.join("");
+ }
+ } else
+ return null;
+ return null;
+ }
+ function resizeDetailView(item) {
+ if (item) {
+ var mainContainer = document.querySelector("." + _gridUid + " .detailViewContainer_" + item[_dataViewIdProperty]), cellItem = document.querySelector("." + _gridUid + " .cellDetailView_" + item[_dataViewIdProperty]), inner = document.querySelector("." + _gridUid + " .innerDetailView_" + item[_dataViewIdProperty]);
+ if (!(!mainContainer || !cellItem || !inner)) {
+ for (var idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.deleteItem(item[_dataViewIdProperty] + "." + idx);
+ var rowHeight = _gridOptions.rowHeight, lineHeight = 13;
+ mainContainer.style.minHeight = null;
+ var itemHeight = mainContainer.scrollHeight, rowCount = Math.ceil(itemHeight / rowHeight);
+ item[_keyPrefix + "sizePadding"] = Math.ceil(rowCount * 2 * lineHeight / rowHeight), item[_keyPrefix + "height"] = itemHeight;
+ var outterHeight = item[_keyPrefix + "sizePadding"] * rowHeight;
+ _options.maxRows !== null && item[_keyPrefix + "sizePadding"] > _options.maxRows && (outterHeight = _options.maxRows * rowHeight, item[_keyPrefix + "sizePadding"] = _options.maxRows), _grid.getOptions().minRowBuffer < item[_keyPrefix + "sizePadding"] && (_grid.getOptions().minRowBuffer = item[_keyPrefix + "sizePadding"] + 3), mainContainer.setAttribute("style", "min-height: " + item[_keyPrefix + "height"] + "px"), cellItem && cellItem.setAttribute("style", "height: " + outterHeight + "px; top:" + rowHeight + "px");
+ for (var idxParent = _dataView.getIdxById(item[_dataViewIdProperty]), idx = 1; idx <= item[_keyPrefix + "sizePadding"]; idx++)
+ _dataView.insertItem(idxParent + idx, getPaddingItem(item, idx));
+ saveDetailView(item);
+ }
+ }
+ }
+ function getFilterItem(item) {
+ return item[_keyPrefix + "isPadding"] && item[_keyPrefix + "parent"] && (item = item[_keyPrefix + "parent"]), item;
+ }
+ function checkExpandableOverride(row, dataContext, grid) {
+ return typeof _expandableOverride == "function" ? _expandableOverride(row, dataContext, grid) : !0;
+ }
+ function expandableOverride(overrideFn) {
+ _expandableOverride = overrideFn;
+ }
+ Utils24.extend(this, {
+ init,
+ destroy,
+ pluginName: "RowDetailView",
+ collapseAll,
+ collapseDetailView,
+ expandDetailView,
+ expandableOverride,
+ getColumnDefinition,
+ getExpandedRows,
+ getFilterItem,
+ getOptions,
+ resizeDetailView,
+ saveDetailView,
+ setOptions,
+ // events
+ onAsyncResponse: new SlickEvent16(),
+ onAsyncEndUpdate: new SlickEvent16(),
+ onAfterRowDetailToggle: new SlickEvent16(),
+ onBeforeRowDetailToggle: new SlickEvent16(),
+ onRowOutOfViewportRange: new SlickEvent16(),
+ onRowBackToViewportRange: new SlickEvent16()
+ });
+}
+
+// src/plugins/slick.rowmovemanager.js
+var SlickEvent17 = Event, EventHandler12 = EventHandler, Utils25 = Utils;
+function RowMoveManager(options) {
+ var _grid, _canvas, _dragging, _self = this, _usabilityOverride = null, _handler = new EventHandler12(), _defaults = {
+ columnId: "_move",
+ cssClass: null,
+ cancelEditOnDrag: !1,
+ disableRowSelection: !1,
+ hideRowMoveShadow: !0,
+ rowMoveShadowMarginTop: 0,
+ rowMoveShadowMarginLeft: 0,
+ rowMoveShadowOpacity: 0.95,
+ rowMoveShadowScale: 0.75,
+ singleRowMove: !1,
+ width: 40
+ };
+ options && typeof options.usabilityOverride == "function" && usabilityOverride(options.usabilityOverride);
+ function init(grid) {
+ options = Utils25.extend(!0, {}, _defaults, options), _grid = grid, _canvas = _grid.getCanvasNode(), _handler.subscribe(_grid.onDragInit, handleDragInit).subscribe(_grid.onDragStart, handleDragStart).subscribe(_grid.onDrag, handleDrag).subscribe(_grid.onDragEnd, handleDragEnd);
+ }
+ function destroy() {
+ _handler.unsubscribeAll();
+ }
+ function setOptions(newOptions) {
+ options = Utils25.extend({}, options, newOptions);
+ }
+ function handleDragInit(e) {
+ e.stopImmediatePropagation();
+ }
+ function handleDragStart(e, dd) {
+ var cell = _grid.getCellFromEvent(e), currentRow = cell && cell.row, dataContext = _grid.getDataItem(currentRow);
+ if (checkUsabilityOverride(currentRow, dataContext, _grid)) {
+ if (options.cancelEditOnDrag && _grid.getEditorLock().isActive() && _grid.getEditorLock().cancelCurrentEdit(), _grid.getEditorLock().isActive() || !isHandlerColumn(cell.cell))
+ return !1;
+ if (_dragging = !0, e.stopImmediatePropagation(), !options.hideRowMoveShadow) {
+ let cellNodeElm = _grid.getCellNode(cell.row, cell.cell), slickRowElm = cellNodeElm && cellNodeElm.closest(".slick-row");
+ slickRowElm && (dd.clonedSlickRow = slickRowElm.cloneNode(!0), dd.clonedSlickRow.classList.add("slick-reorder-shadow-row"), dd.clonedSlickRow.style.display = "none", dd.clonedSlickRow.style.marginLeft = Number(options.rowMoveShadowMarginLeft || 0) + "px", dd.clonedSlickRow.style.marginTop = Number(options.rowMoveShadowMarginTop || 0) + "px", dd.clonedSlickRow.style.opacity = `${options.rowMoveShadowOpacity || 0.95}`, dd.clonedSlickRow.style.transform = `scale(${options.rowMoveShadowScale || 0.75})`, _canvas.appendChild(dd.clonedSlickRow));
+ }
+ var selectedRows = options.singleRowMove ? [cell.row] : _grid.getSelectedRows();
+ (selectedRows.length === 0 || !selectedRows.some((selectedRow) => selectedRow === cell.row)) && (selectedRows = [cell.row], options.disableRowSelection || _grid.setSelectedRows(selectedRows));
+ var rowHeight = _grid.getOptions().rowHeight;
+ dd.selectedRows = selectedRows, dd.selectionProxy = document.createElement("div"), dd.selectionProxy.className = "slick-reorder-proxy", dd.selectionProxy.style.display = "none", dd.selectionProxy.style.position = "absolute", dd.selectionProxy.style.zIndex = "99999", dd.selectionProxy.style.width = `${_canvas.clientWidth}px`, dd.selectionProxy.style.height = `${rowHeight * selectedRows.length}px`, _canvas.appendChild(dd.selectionProxy), dd.guide = document.createElement("div"), dd.guide.className = "slick-reorder-guide", dd.guide.style.position = "absolute", dd.guide.style.zIndex = "99999", dd.guide.style.width = `${_canvas.clientWidth}px`, dd.guide.style.top = "-1000px", _canvas.appendChild(dd.guide), dd.insertBefore = -1;
+ }
+ }
+ function handleDrag(evt, dd) {
+ if (!_dragging)
+ return;
+ evt.stopImmediatePropagation();
+ let e = evt.getNativeEvent();
+ var targetEvent = e.touches ? e.touches[0] : e;
+ let top = targetEvent.pageY - (Utils25.offset(_canvas).top || 0);
+ dd.selectionProxy.style.top = `${top - 5}px`, dd.selectionProxy.style.display = "block", dd.clonedSlickRow && (dd.clonedSlickRow.style.top = `${top - 6}px`, dd.clonedSlickRow.style.display = "block");
+ var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));
+ if (insertBefore !== dd.insertBefore) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore
+ };
+ if (_self.onBeforeMoveRows.notify(eventData).getReturnValue() === !1 ? dd.canMove = !1 : dd.canMove = !0, _usabilityOverride && dd.canMove) {
+ var insertBeforeDataContext = _grid.getDataItem(insertBefore);
+ dd.canMove = checkUsabilityOverride(insertBefore, insertBeforeDataContext, _grid);
+ }
+ dd.canMove ? dd.guide.style.top = `${insertBefore * (_grid.getOptions().rowHeight || 0)}px` : dd.guide.style.top = "-1000px", dd.insertBefore = insertBefore;
+ }
+ }
+ function handleDragEnd(e, dd) {
+ if (_dragging && (_dragging = !1, e.stopImmediatePropagation(), dd.guide.remove(), dd.selectionProxy.remove(), dd.clonedSlickRow && (dd.clonedSlickRow.remove(), dd.clonedSlickRow = null), dd.canMove)) {
+ var eventData = {
+ grid: _grid,
+ rows: dd.selectedRows,
+ insertBefore: dd.insertBefore
+ };
+ _self.onMoveRows.notify(eventData);
+ }
+ }
+ function getColumnDefinition() {
+ return {
+ id: options.columnId || "_move",
+ name: "",
+ field: "move",
+ width: options.width || 40,
+ behavior: "selectAndMove",
+ selectable: !1,
+ resizable: !1,
+ // cssClass: options.cssClass,
+ formatter: moveIconFormatter
+ };
+ }
+ function moveIconFormatter(row, cell, value, columnDef, dataContext, grid) {
+ return checkUsabilityOverride(row, dataContext, grid) ? { addClasses: "cell-reorder dnd " + options.cssClass || "", text: "" } : null;
+ }
+ function checkUsabilityOverride(row, dataContext, grid) {
+ return typeof _usabilityOverride == "function" ? _usabilityOverride(row, dataContext, grid) : !0;
+ }
+ function usabilityOverride(overrideFn) {
+ _usabilityOverride = overrideFn;
+ }
+ function isHandlerColumn(columnIndex) {
+ return /move|selectAndMove/.test(_grid.getColumns()[columnIndex].behavior);
+ }
+ Utils25.extend(this, {
+ onBeforeMoveRows: new SlickEvent17(),
+ onMoveRows: new SlickEvent17(),
+ init,
+ destroy,
+ getColumnDefinition,
+ setOptions,
+ usabilityOverride,
+ isHandlerColumn,
+ pluginName: "RowMoveManager"
+ });
+}
+
+// src/plugins/slick.rowselectionmodel.js
+var EventData7 = EventData, EventHandler13 = EventHandler, keyCode6 = keyCode, SlickEvent18 = Event, SlickRange4 = Range, Draggable4 = Draggable, CellRangeDecorator3 = CellRangeDecorator, CellRangeSelector3 = CellRangeSelector, Utils26 = Utils;
+function RowSelectionModel(options) {
+ var _grid, _ranges = [], _self = this, _handler = new EventHandler13(), _inHandler, _options, _selector, _isRowMoveManagerHandler, _defaults = {
+ selectActiveRow: !0,
+ dragToSelect: !1,
+ autoScrollWhenDrag: !0,
+ cellRangeSelector: void 0
+ };
+ function init(grid) {
+ if (typeof Draggable4 > "u")
+ throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');
+ if (_options = Utils26.extend(!0, {}, _defaults, options), _selector = _options.cellRangeSelector, _grid = grid, !_selector && _options.dragToSelect) {
+ if (!CellRangeDecorator3)
+ throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true");
+ _selector = new CellRangeSelector3({
+ selectionCss: {
+ border: "none"
+ },
+ autoScroll: _options.autoScrollWhenDrag
+ });
+ }
+ _handler.subscribe(
+ _grid.onActiveCellChanged,
+ wrapHandler(handleActiveCellChange)
+ ), _handler.subscribe(
+ _grid.onKeyDown,
+ wrapHandler(handleKeyDown)
+ ), _handler.subscribe(
+ _grid.onClick,
+ wrapHandler(handleClick)
+ ), _selector && (grid.registerPlugin(_selector), _selector.onCellRangeSelecting.subscribe(handleCellRangeSelected), _selector.onCellRangeSelected.subscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected));
+ }
+ function destroy() {
+ _handler.unsubscribeAll(), _selector && (_selector.onCellRangeSelecting.unsubscribe(handleCellRangeSelected), _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected), _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected), _grid.unregisterPlugin(_selector), _selector.destroy && _selector.destroy());
+ }
+ function wrapHandler(handler) {
+ return function() {
+ _inHandler || (_inHandler = !0, handler.apply(this, arguments), _inHandler = !1);
+ };
+ }
+ function rangesToRows(ranges) {
+ for (var rows = [], i2 = 0; i2 < ranges.length; i2++)
+ for (var j = ranges[i2].fromRow; j <= ranges[i2].toRow; j++)
+ rows.push(j);
+ return rows;
+ }
+ function rowsToRanges(rows) {
+ for (var ranges = [], lastCell = _grid.getColumns().length - 1, i2 = 0; i2 < rows.length; i2++)
+ ranges.push(new SlickRange4(rows[i2], 0, rows[i2], lastCell));
+ return ranges;
+ }
+ function getRowsRange(from, to) {
+ var i2, rows = [];
+ for (i2 = from; i2 <= to; i2++)
+ rows.push(i2);
+ for (i2 = to; i2 < from; i2++)
+ rows.push(i2);
+ return rows;
+ }
+ function getSelectedRows() {
+ return rangesToRows(_ranges);
+ }
+ function setSelectedRows(rows) {
+ setSelectedRanges(rowsToRanges(rows), "SlickRowSelectionModel.setSelectedRows");
+ }
+ function setSelectedRanges(ranges, caller) {
+ if (!((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0))) {
+ _ranges = ranges;
+ var eventData = new EventData7(null, _ranges);
+ Object.defineProperty(eventData, "detail", { writable: !0, configurable: !0, value: { caller: caller || "SlickRowSelectionModel.setSelectedRanges" } }), _self.onSelectedRangesChanged.notify(_ranges, eventData);
+ }
+ }
+ function getSelectedRanges() {
+ return _ranges;
+ }
+ function refreshSelections() {
+ setSelectedRows(getSelectedRows());
+ }
+ function handleActiveCellChange(e, data) {
+ _options.selectActiveRow && data.row != null && setSelectedRanges([new SlickRange4(data.row, 0, data.row, _grid.getColumns().length - 1)]);
+ }
+ function handleKeyDown(e) {
+ var activeRow = _grid.getActiveCell();
+ if (_grid.getOptions().multiSelect && activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == keyCode6.UP || e.which == keyCode6.DOWN)) {
+ var selectedRows = getSelectedRows();
+ selectedRows.sort(function(x, y) {
+ return x - y;
+ }), selectedRows.length || (selectedRows = [activeRow.row]);
+ var top = selectedRows[0], bottom = selectedRows[selectedRows.length - 1], active;
+ if (e.which == keyCode6.DOWN ? active = activeRow.row < bottom || top == bottom ? ++bottom : ++top : active = activeRow.row < bottom ? --bottom : --top, active >= 0 && active < _grid.getDataLength()) {
+ _grid.scrollRowIntoView(active);
+ var tempRanges = rowsToRanges(getRowsRange(top, bottom));
+ setSelectedRanges(tempRanges);
+ }
+ e.preventDefault(), e.stopPropagation();
+ }
+ }
+ function handleClick(e) {
+ var cell = _grid.getCellFromEvent(e);
+ if (!cell || !_grid.canCellBeActive(cell.row, cell.cell) || !_grid.getOptions().multiSelect || !e.ctrlKey && !e.shiftKey && !e.metaKey)
+ return !1;
+ var selection = rangesToRows(_ranges), idx = selection.indexOf(cell.row);
+ if (idx === -1 && (e.ctrlKey || e.metaKey))
+ selection.push(cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (idx !== -1 && (e.ctrlKey || e.metaKey))
+ selection = selection.filter((o) => o !== cell.row), _grid.setActiveCell(cell.row, cell.cell);
+ else if (selection.length && e.shiftKey) {
+ var last = selection.pop(), from = Math.min(cell.row, last), to = Math.max(cell.row, last);
+ selection = [];
+ for (var i2 = from; i2 <= to; i2++)
+ i2 !== last && selection.push(i2);
+ selection.push(last), _grid.setActiveCell(cell.row, cell.cell);
+ }
+ var tempRanges = rowsToRanges(selection);
+ return setSelectedRanges(tempRanges), e.stopImmediatePropagation(), !0;
+ }
+ function handleBeforeCellRangeSelected(e, cell) {
+ if (!_isRowMoveManagerHandler) {
+ var rowMoveManager = _grid.getPluginByName("RowMoveManager") || _grid.getPluginByName("CrossGridRowMoveManager");
+ _isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils26.noop;
+ }
+ if (_grid.getEditorLock().isActive() || _isRowMoveManagerHandler(cell.cell))
+ return e.stopPropagation(), !1;
+ _grid.setActiveCell(cell.row, cell.cell);
+ }
+ function handleCellRangeSelected(e, args) {
+ if (!_grid.getOptions().multiSelect || !_options.selectActiveRow)
+ return !1;
+ setSelectedRanges([new SlickRange4(args.range.fromRow, 0, args.range.toRow, _grid.getColumns().length - 1)]);
+ }
+ Utils26.extend(this, {
+ getSelectedRows,
+ setSelectedRows,
+ getSelectedRanges,
+ setSelectedRanges,
+ refreshSelections,
+ init,
+ destroy,
+ pluginName: "RowSelectionModel",
+ onSelectedRangesChanged: new SlickEvent18()
+ });
+}
+
+// src/plugins/slick.state.js
+var SlickEvent19 = Event, Utils27 = Utils, localStorageWrapper = function() {
+ var localStorage = window.localStorage;
+ return typeof localStorage > "u" && console.error("localStorage is not available. slickgrid statepersistor disabled."), {
+ get: function(key) {
+ return new Promise((resolve, reject) => {
+ if (!localStorage) {
+ reject("missing localStorage");
+ return;
+ }
+ try {
+ var d = localStorage.getItem(key);
+ if (d)
+ return resolve(JSON.parse(d));
+ resolve({});
+ } catch (exc) {
+ reject(exc);
+ }
+ });
+ },
+ set: function(key, obj) {
+ localStorage && (typeof obj < "u" && (obj = JSON.stringify(obj)), localStorage.setItem(key, obj));
+ }
+ };
+}, defaults = {
+ key_prefix: "slickgrid:",
+ storage: new localStorageWrapper(),
+ scrollRowIntoView: !0
+};
+function State(options) {
+ options = Utils27.extend(!0, {}, defaults, options);
+ var _grid, _cid, _store = options.storage, onStateChanged = new SlickEvent19(), userData = {
+ state: null,
+ current: null
+ };
+ function init(grid) {
+ _grid = grid, _cid = grid.cid || options.cid, _cid ? (_grid.onColumnsResized.subscribe(save), _grid.onColumnsReordered.subscribe(save), _grid.onSort.subscribe(save)) : console.warn("grid has no client id. state persisting is disabled.");
+ }
+ function destroy() {
+ _grid.onSort.unsubscribe(save), _grid.onColumnsReordered.unsubscribe(save), _grid.onColumnsResized.unsubscribe(save), save();
+ }
+ function save() {
+ if (_cid && _store) {
+ var state = {
+ sortcols: getSortColumns(),
+ viewport: _grid.getViewport(),
+ columns: getColumns(),
+ userData: null
+ };
+ return state.userData = userData.current, setUserDataFromState(state.userData), onStateChanged.notify(state), _store.set(options.key_prefix + _cid, state);
+ }
+ }
+ function restore() {
+ return new Promise((resolve, reject) => {
+ if (!_cid) {
+ reject("missing client id");
+ return;
+ }
+ if (!_store) {
+ reject("missing store");
+ return;
+ }
+ _store.get(options.key_prefix + _cid).then(function(state) {
+ if (state) {
+ if (state.sortcols && _grid.setSortColumns(state.sortcols || []), state.viewport && options.scrollRowIntoView && _grid.scrollRowIntoView(state.viewport.top, !0), state.columns) {
+ var defaultColumns = options.defaultColumns;
+ if (defaultColumns) {
+ var defaultColumnsLookup = {};
+ defaultColumns.forEach(function(colDef) {
+ defaultColumnsLookup[colDef.id] = colDef;
+ });
+ var cols = [];
+ (state.columns || []).forEach(function(columnDef) {
+ defaultColumnsLookup[columnDef.id] && cols.push(Utils27.extend(!0, {}, defaultColumnsLookup[columnDef.id], {
+ width: columnDef.width,
+ headerCssClass: columnDef.headerCssClass
+ }));
+ }), state.columns = cols;
+ }
+ _grid.setColumns(state.columns);
+ }
+ setUserDataFromState(state.userData);
+ }
+ resolve(state);
+ }).catch(function(e) {
+ reject(e);
+ });
+ });
+ }
+ function setUserData(data) {
+ return userData.current = data, this;
+ }
+ function setUserDataFromState(data) {
+ return userData.state = data, setUserData(data);
+ }
+ function getUserData() {
+ return userData.current;
+ }
+ function getStateUserData() {
+ return userData.state;
+ }
+ function resetUserData() {
+ return userData.current = userData.state, this;
+ }
+ function getColumns() {
+ return _grid.getColumns().map(function(col) {
+ return {
+ id: col.id,
+ width: col.width
+ };
+ });
+ }
+ function getSortColumns() {
+ var sortCols = _grid.getSortColumns();
+ return sortCols;
+ }
+ function reset() {
+ _store.set(options.key_prefix + _cid, {}), setUserDataFromState(null);
+ }
+ Utils27.extend(this, {
+ init,
+ destroy,
+ save,
+ setUserData,
+ resetUserData,
+ getUserData,
+ getStateUserData,
+ restore,
+ onStateChanged,
+ reset
+ });
+}
+export {
+ Aggregators,
+ AvgAggregator,
+ BindingEventService,
+ CellCopyManager,
+ CellExternalCopyManager,
+ CellMenu,
+ CellRangeDecorator,
+ CellRangeSelector,
+ CellSelectionModel,
+ CheckboxEditor,
+ CheckboxFormatter,
+ CheckboxSelectColumn,
+ CheckmarkFormatter,
+ ColAutosizeMode,
+ CompositeEditor,
+ ContextMenu,
+ CountAggregator,
+ CrossGridRowMoveManager,
+ CustomTooltip,
+ DataView,
+ Draggable,
+ DraggableGrouping,
+ EditorLock,
+ Editors,
+ Event,
+ EventData,
+ EventHandler,
+ FlatpickrEditor,
+ FloatEditor,
+ Formatters,
+ GlobalEditorLock,
+ GridAutosizeColsMode,
+ Group,
+ GroupItemMetadataProvider,
+ GroupTotals,
+ HeaderButtons,
+ HeaderMenu,
+ IntegerEditor,
+ LongTextEditor,
+ MaxAggregator,
+ MinAggregator,
+ MouseWheel,
+ NonDataItem,
+ PercentCompleteBarFormatter,
+ PercentCompleteEditor,
+ PercentCompleteFormatter,
+ Range,
+ Resizable,
+ Resizer,
+ RowDetailView,
+ RowMoveManager,
+ RowSelectionMode,
+ RowSelectionModel,
+ SlickAutoTooltips,
+ SlickColumnPicker,
+ SlickGrid,
+ SlickGridMenu,
+ SlickGridPager,
+ State,
+ SumAggregator,
+ TextEditor,
+ Utils,
+ ValueFilterMode,
+ WidthEvalMode,
+ YesNoFormatter,
+ YesNoSelectEditor,
+ keyCode,
+ preClickClassName
+};
+/**
+ * @license
+ * (c) 2009-2016 Michael Leibman
+ * michael{dot}leibman{at}gmail{dot}com
+ * http://github.com/mleibman/slickgrid
+ *
+ * Distributed under MIT license.
+ * All rights reserved.
+ *
+ * SlickGrid v4.0.0
+ *
+ * NOTES:
+ * Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.
+ * This increases the speed dramatically, but can only be done safely because there are no event handlers
+ * or data associated with any cell/row DOM nodes. Cell editors must make sure they implement .destroy()
+ * and do proper cleanup.
+ */
diff --git a/dist/examples/examples-unicode-icons.min.css b/dist/examples/examples-unicode-icons.min.css
deleted file mode 100644
index 58ad21c0..00000000
--- a/dist/examples/examples-unicode-icons.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-.slick-icon-lightbulb,
-.slick-icon-search{cursor:pointer}.slick-icon-lightbulb:before{content:"\01F4A1";font-size:12px}.slick-icon-search:before{content:"\01F50D";font-size:12px}.slick-icon-state-disabled{opacity:0.5}.slick-icon-seek-first:before{content:"\0023EE";font-size:14px}.slick-icon-seek-prev:before{content:"\0023EA";font-size:14px}.slick-icon-seek-next:before{content:"\0023E9";font-size:14px}.slick-icon-seek-end:before{content:"\0023ED";font-size:14px}
\ No newline at end of file
diff --git a/dist/examples/examples.min.css b/dist/examples/examples.min.css
deleted file mode 100644
index e26df30a..00000000
--- a/dist/examples/examples.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@import url('../slick-default-theme.min.css');*{font-family:arial;font-size:8pt}body{background:beige;padding:0;margin:8px}h2{font-size:10pt;border-bottom:1px dotted gray}ul{margin-left:0;padding:0;cursor:default}.options-panel li{background:url("../images/arrow_right_spearmint.png") no-repeat center left;padding:0 0 0 14px;list-style:none;margin:0}#myGrid, .example-grid{background:white;outline:0;border:1px solid gray}.grid-header{border:1px solid gray;border-bottom:0;border-top:0;background:url('../images/header-bg.gif') repeat-x center top;color:black;height:24px;line-height:24px}.grid-header label{display:inline-block;font-weight:bold;margin:auto auto auto 6px}.grid-header .ui-icon{margin:4px 4px auto 6px;background-color:transparent;border-color:transparent}.grid-header .ui-icon.ui-state-hover{background-color:white}.grid-header #txtSearch{margin:0 4px 0 4px;padding:2px 2px;-moz-border-radius:2px;-webkit-border-radius:2px;border:1px solid silver}.options-panel{-moz-border-radius:6px;-webkit-border-radius:6px;border:1px solid silver;background:#f0f0f0;padding:4px;margin-bottom:20px;width:320px;position:absolute;top:0px;left:650px}.slick-cell.task-name{font-weight:bold;text-align:right}.slick-cell.task-percent{text-align:right}.slick-cell.cell-move-handle{font-weight:bold;text-align:right;border-right:solid gray;background:#efefef;cursor:move}.cell-move-handle:hover{background:#b6b9bd}.slick-row.selected .cell-move-handle{background:#D5DC8D}.slick-row .cell-actions{text-align:left}.slick-row.complete{background-color:#DFD;color:#555}.percent-complete-bar{display:inline-block;height:6px;-moz-border-radius:3px;-webkit-border-radius:3px}input.editor-text{width:100%;height:100%;border:0;margin:0;background:transparent;outline:0;padding:0}.ui-datepicker-trigger{background:url("../images/calendar.gif") top left no-repeat;width:16px;height:16px;margin-top:2px;padding:0;vertical-align:top}input.editor-percentcomplete{width:100%;height:100%;border:0;margin:0;background:transparent;outline:0;padding:0;float:left}input[type='range'].editor-percentcomplete-slider{background-color:#ccc;transform:rotate(270deg);transform-origin:left;position:absolute;top:125px;left:15px}.editor-percentcomplete-picker{position:relative;display:inline-block;width:16px;height:100%;background:url("../images/pencil.gif") no-repeat center center;overflow:visible;z-index:1000;float:right}.editor-percentcomplete-helper{border:0 solid gray;position:absolute;top:-2px;left:-9px;background:url("../images/editor-helper-bg.gif") no-repeat top left;padding-left:9px;width:120px;height:140px;display:none;overflow:visible}.editor-percentcomplete-wrapper{background:beige;padding:20px 8px;width:100%;height:98px;border:1px solid gray;border-left:0;position:fixed;width:120px}.editor-percentcomplete-buttons{float:right}.editor-percentcomplete-buttons button{width:80px}.editor-percentcomplete-slider{float:left}.editor-percentcomplete-picker:hover .editor-percentcomplete-helper{display:block}.editor-percentcomplete-helper:hover{display:block}select.editor-yesno{width:100%;margin:0;vertical-align:middle}input.editor-checkbox{margin:0;height:100%;padding:0;border:0}
\ No newline at end of file
diff --git a/dist/images/CheckboxN.png b/dist/images/CheckboxN.png
deleted file mode 100644
index 072ecbb9..00000000
Binary files a/dist/images/CheckboxN.png and /dev/null differ
diff --git a/dist/images/CheckboxY.png b/dist/images/CheckboxY.png
deleted file mode 100644
index 467f3010..00000000
Binary files a/dist/images/CheckboxY.png and /dev/null differ
diff --git a/dist/images/GrpCheckboxN.png b/dist/images/GrpCheckboxN.png
deleted file mode 100644
index 9ced0e17..00000000
Binary files a/dist/images/GrpCheckboxN.png and /dev/null differ
diff --git a/dist/images/GrpCheckboxY.png b/dist/images/GrpCheckboxY.png
deleted file mode 100644
index 276dee18..00000000
Binary files a/dist/images/GrpCheckboxY.png and /dev/null differ
diff --git a/dist/images/actions.gif b/dist/images/actions.gif
deleted file mode 100644
index 026dd108..00000000
Binary files a/dist/images/actions.gif and /dev/null differ
diff --git a/dist/images/ajax-loader-small.gif b/dist/images/ajax-loader-small.gif
deleted file mode 100644
index 5b33f7e5..00000000
Binary files a/dist/images/ajax-loader-small.gif and /dev/null differ
diff --git a/dist/images/arrow-right.gif b/dist/images/arrow-right.gif
deleted file mode 100644
index 6f654602..00000000
Binary files a/dist/images/arrow-right.gif and /dev/null differ
diff --git a/dist/images/arrow_redo.png b/dist/images/arrow_redo.png
deleted file mode 100644
index 4f7f55d6..00000000
Binary files a/dist/images/arrow_redo.png and /dev/null differ
diff --git a/dist/images/arrow_right_peppermint.png b/dist/images/arrow_right_peppermint.png
deleted file mode 100644
index 87225678..00000000
Binary files a/dist/images/arrow_right_peppermint.png and /dev/null differ
diff --git a/dist/images/arrow_right_spearmint.png b/dist/images/arrow_right_spearmint.png
deleted file mode 100644
index 277ddde3..00000000
Binary files a/dist/images/arrow_right_spearmint.png and /dev/null differ
diff --git a/dist/images/arrow_undo.png b/dist/images/arrow_undo.png
deleted file mode 100644
index bc9924ac..00000000
Binary files a/dist/images/arrow_undo.png and /dev/null differ
diff --git a/dist/images/bullet_blue.png b/dist/images/bullet_blue.png
deleted file mode 100644
index 79d978c3..00000000
Binary files a/dist/images/bullet_blue.png and /dev/null differ
diff --git a/dist/images/bullet_star.png b/dist/images/bullet_star.png
deleted file mode 100644
index 142ea482..00000000
Binary files a/dist/images/bullet_star.png and /dev/null differ
diff --git a/dist/images/bullet_toggle_minus.png b/dist/images/bullet_toggle_minus.png
deleted file mode 100644
index f5aa0450..00000000
Binary files a/dist/images/bullet_toggle_minus.png and /dev/null differ
diff --git a/dist/images/bullet_toggle_plus.png b/dist/images/bullet_toggle_plus.png
deleted file mode 100644
index a9650534..00000000
Binary files a/dist/images/bullet_toggle_plus.png and /dev/null differ
diff --git a/dist/images/calendar.gif b/dist/images/calendar.gif
deleted file mode 100644
index 90fd2e17..00000000
Binary files a/dist/images/calendar.gif and /dev/null differ
diff --git a/dist/images/collapse.gif b/dist/images/collapse.gif
deleted file mode 100644
index 01e69145..00000000
Binary files a/dist/images/collapse.gif and /dev/null differ
diff --git a/dist/images/column-grouping.png b/dist/images/column-grouping.png
deleted file mode 100644
index 971dccd0..00000000
Binary files a/dist/images/column-grouping.png and /dev/null differ
diff --git a/dist/images/comment_yellow.gif b/dist/images/comment_yellow.gif
deleted file mode 100644
index df7158a4..00000000
Binary files a/dist/images/comment_yellow.gif and /dev/null differ
diff --git a/dist/images/delete.png b/dist/images/delete.png
deleted file mode 100644
index dee2496a..00000000
Binary files a/dist/images/delete.png and /dev/null differ
diff --git a/dist/images/down.gif b/dist/images/down.gif
deleted file mode 100644
index 9bd94475..00000000
Binary files a/dist/images/down.gif and /dev/null differ
diff --git a/dist/images/drag-handle.png b/dist/images/drag-handle.png
deleted file mode 100644
index ad7531cf..00000000
Binary files a/dist/images/drag-handle.png and /dev/null differ
diff --git a/dist/images/editor-helper-bg.gif b/dist/images/editor-helper-bg.gif
deleted file mode 100644
index 2daa973b..00000000
Binary files a/dist/images/editor-helper-bg.gif and /dev/null differ
diff --git a/dist/images/expand.gif b/dist/images/expand.gif
deleted file mode 100644
index 1b24ef12..00000000
Binary files a/dist/images/expand.gif and /dev/null differ
diff --git a/dist/images/header-bg.gif b/dist/images/header-bg.gif
deleted file mode 100644
index fe7dd1c1..00000000
Binary files a/dist/images/header-bg.gif and /dev/null differ
diff --git a/dist/images/header-columns-bg.gif b/dist/images/header-columns-bg.gif
deleted file mode 100644
index 8d459a30..00000000
Binary files a/dist/images/header-columns-bg.gif and /dev/null differ
diff --git a/dist/images/header-columns-over-bg.gif b/dist/images/header-columns-over-bg.gif
deleted file mode 100644
index f9c07af1..00000000
Binary files a/dist/images/header-columns-over-bg.gif and /dev/null differ
diff --git a/dist/images/help.png b/dist/images/help.png
deleted file mode 100644
index 85eca095..00000000
Binary files a/dist/images/help.png and /dev/null differ
diff --git a/dist/images/info.gif b/dist/images/info.gif
deleted file mode 100644
index 5769434f..00000000
Binary files a/dist/images/info.gif and /dev/null differ
diff --git a/dist/images/listview.gif b/dist/images/listview.gif
deleted file mode 100644
index 3ec25ca7..00000000
Binary files a/dist/images/listview.gif and /dev/null differ
diff --git a/dist/images/pencil.gif b/dist/images/pencil.gif
deleted file mode 100644
index 29f78f43..00000000
Binary files a/dist/images/pencil.gif and /dev/null differ
diff --git a/dist/images/row-over-bg.gif b/dist/images/row-over-bg.gif
deleted file mode 100644
index b288e387..00000000
Binary files a/dist/images/row-over-bg.gif and /dev/null differ
diff --git a/dist/images/sort-asc.gif b/dist/images/sort-asc.gif
deleted file mode 100644
index 67a2a4c6..00000000
Binary files a/dist/images/sort-asc.gif and /dev/null differ
diff --git a/dist/images/sort-asc.png b/dist/images/sort-asc.png
deleted file mode 100644
index 8604ff4e..00000000
Binary files a/dist/images/sort-asc.png and /dev/null differ
diff --git a/dist/images/sort-desc.gif b/dist/images/sort-desc.gif
deleted file mode 100644
index 34db47c3..00000000
Binary files a/dist/images/sort-desc.gif and /dev/null differ
diff --git a/dist/images/sort-desc.png b/dist/images/sort-desc.png
deleted file mode 100644
index a2a6adf9..00000000
Binary files a/dist/images/sort-desc.png and /dev/null differ
diff --git a/dist/images/stripes.png b/dist/images/stripes.png
deleted file mode 100644
index c3c4b28a..00000000
Binary files a/dist/images/stripes.png and /dev/null differ
diff --git a/dist/images/tag_red.png b/dist/images/tag_red.png
deleted file mode 100644
index d290fcd7..00000000
Binary files a/dist/images/tag_red.png and /dev/null differ
diff --git a/dist/images/tick.png b/dist/images/tick.png
deleted file mode 100644
index 3899d71d..00000000
Binary files a/dist/images/tick.png and /dev/null differ
diff --git a/dist/images/user_identity.gif b/dist/images/user_identity.gif
deleted file mode 100644
index 095831ba..00000000
Binary files a/dist/images/user_identity.gif and /dev/null differ
diff --git a/dist/images/user_identity_plus.gif b/dist/images/user_identity_plus.gif
deleted file mode 100644
index b276a81c..00000000
Binary files a/dist/images/user_identity_plus.gif and /dev/null differ
diff --git a/dist/plugins/slick.autotooltips.min.js b/dist/plugins/slick.autotooltips.min.js
deleted file mode 100644
index ffa92251..00000000
--- a/dist/plugins/slick.autotooltips.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.autotooltips.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{AutoTooltips:function(n){var i,t={enableForCells:!0,enableForHeaderCells:!1,maxToolTipLength:null,replaceExisting:!0};function l(){var l=i.getCellFromEvent(event);if(l){let e=i.getCellNode(l.row,l.cell),t;n&&e&&(!e.title||n&&n.replaceExisting)&&(e.clientWidth
n.maxToolTipLength&&(t=t.substring(0,n.maxToolTipLength-3)+"...")):t="",e.title=t),e=null}}function o(e,t){t=t.column;let l;e=e.target;!e||!(l=e.closest(".slick-header-column"))||t&&t.toolTip||(l.title=e.clientWidthr.getDataLength(),v.newRowCreator&&n&&(n=c+a-r.getDataLength(),v.newRowCreator(n)),n={isClipboardCommand:!0,clippedRange:i,oldValues:[],cellExternalCopyManager:y,_options:v,setDataItemValueForColumn:R,markCopySelection:V,oneCellToMultiple:u,activeRow:c,activeCell:d,destH:a,destW:e,maxDestY:r.getDataLength(),maxDestX:r.getColumns().length,h:0,w:0,execute:function(){for(var e=this.h=0;e{g.getEditorLock().isActive()||g.focus()})},destroy:function(){g.onKeyDown.unsubscribe(t)},pluginName:"CellExternalCopyManager",clearCopySelection:I,handleKeyDown:t,onCopyCells:new Slick.Event,onCopyCancelled:new Slick.Event,onPasteCells:new Slick.Event,setIncludeHeaderWhenCopying:function(e){v.includeHeaderWhenCopying=e}})}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.cellexternalcopymanager.min.js.map b/dist/plugins/slick.cellexternalcopymanager.min.js.map
deleted file mode 100644
index e3764c05..00000000
--- a/dist/plugins/slick.cellexternalcopymanager.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","CellExternalCopyManager","options","_grid","_copiedRanges","_self","this","_options","_copiedCellStyleLayerKey","copiedCellStyleLayerKey","_copiedCellStyle","copiedCellStyle","_clearCopyTI","_bodyElement","bodyElement","document","body","_onCopyInit","onCopyInit","_onCopySuccess","onCopySuccess","keyCodes","C","V","ESC","INSERT","setDataItemValueForColumn","item","columnDef","value","tmpDiv","editor","denyPaste","dataItemColumnValueSetter","createElement","container","column","position","top","left","grid","loadValue","applyValue","destroy","remove","field","_createTextBox","innerText","ta","style","scrollTop","appendChild","select","handleKeyDown","e","args","ranges","getEditorLock","isActive","getOptions","autoEdit","which","preventDefault","clearCopySelection","onCopyCancelled","notify","ctrlKey","metaKey","shiftKey","call","getSelectionModel","getSelectedRanges","length","markCopySelection","onCopyCells","focusEl","rowCount","columns","getColumns","clipText","rg","range","clipTextRows","i","fromRow","toRow","clipTextCells","dt","getDataItem","includeHeaderWhenCopying","clipTextHeaders","j","fromCell","toCell","name","hidden","push","headerColumnValueExtractor","val","join","event","dataItemColumnValueExtractor","let","retVal","tmpP","serializeValue","clipboardData","setData","activeElement","focus","setTimeout","removeChild","console","log","readOnlyMode","_decodeTabularData","clipRows","split","clippedRange","pop","selectedCell","getActiveCell","selectedRange","activeRow","activeCell","row","cell","oneCellToMultiple","destH","destW","availableRows","getData","addRows","newRowCreator","d","render","overflowsBottomOfGrid","getDataLength","newRowsNeeded","clipCommand","isClipboardCommand","oldValues","cellExternalCopyManager","maxDestY","maxDestX","h","w","execute","y","x","desty","destx","getCellNode","updateCell","onCellChange","bRange","setSelectedRanges","onPasteCells","undo","splice","clipboardCommandHandler","hash","k","id","setCellCssStyles","clearTimeout","removeCellCssStyles","init","onKeyDown","subscribe","cellSelectionModel","Error","onSelectedRangesChanged","unsubscribe","pluginName","Event","setIncludeHeaderWhenCopying"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/plugins/slick.cellmenu.min.css b/dist/plugins/slick.cellmenu.min.css
deleted file mode 100644
index 75098541..00000000
--- a/dist/plugins/slick.cellmenu.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.slick-cell-menu{border:1px solid #718BB7;background:#f0f0f0;padding:6px;box-shadow:2px 2px 2px silver;min-width:180px;cursor:default;position:absolute;z-index:2000;overflow:auto;resize:both}.slick-cell-menu-button{position:absolute;cursor:pointer;right:0;padding:0 2px;top:0;background-color:transparent;cursor:pointer;border:0;margin-top:5px;width:16px}.slick-cell-menu > .close{float:right}.slick-cell-menu .title{font-size:16px;width:calc(100% - 30px);border-bottom:solid 1px #d6d6d6;margin-bottom:5px}.slick-cell-menu li{list-style:none;margin:0;padding:0;background:none}.slick-cell-menu input{margin:4px}.slick-cell-menu li a{display:block;padding:4px;font-weight:bold}.slick-cell-menu li a:hover{background:white}.slick-cell-menu-option-list{margin-bottom:10px}.slick-cell-menu{position:absolute;display:inline-block;margin:0;padding:6px;cursor:default}.slick-cell-menu-item{list-style:none;margin:0;cursor:pointer;padding:2px 4px;border:1px solid transparent;border-radius:3px;display:block}.slick-cell-menu-item:hover{border-color:silver;background:white}.slick-cell-menu-item-disabled{cursor:default;border-color:transparent!important;background:inherit!important}.slick-cell-menu-icon{display:inline-block;width:16px;height:16px;vertical-align:middle;margin-right:4px;background-repeat:no-repeat;background-position:center center}.slick-cell-menu-content{display:inline-block;vertical-align:middle}.slick-cell-menu-item-disabled{color:silver}.slick-cell-menu-item-hidden{display:none}.slick-cell-menu-list li.hidden{display:none}.slick-cell-menu-item.slick-cell-menu-item-divider{cursor:default;border:none;overflow:hidden;padding:0;height:1px;margin:6px 2px;background-color:#cecece}.slick-cell-menu-item-divider.slick-cell-menu-item:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/plugins/slick.cellmenu.min.js b/dist/plugins/slick.cellmenu.min.js
deleted file mode 100644
index bee28dba..00000000
--- a/dist/plugins/slick.cellmenu.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.cellmenu.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{Plugins:{CellMenu:function(t){let r,u=-1,m=-1,p,f,d="",l=new Slick.EventHandler,c=this,a,g,h,v=new Slick.BindingEventService,i={autoAdjustDrop:!0,autoAlignSide:!0,autoAdjustDropOffset:0,autoAlignSideOffset:0,hideMenuOnScroll:!0,maxHeight:"none",width:"auto"};function e(e){var t=p.getCellFromEvent(e),t=(u=t&&t.cell,m=t&&t.row,p.getColumns()[u]),l=p.getDataItem(m),i=r.commandItems||[],n=r.optionItems||[];if(t&&t.cellMenu&&(i.length||n.length)&&(b(),0!=c.onBeforeMenuShow.notify({cell:u,row:m,grid:p},e,c).getReturnValue())){var s=isNaN(r.maxHeight)?r.maxHeight:r.maxHeight+"px",o=isNaN(r.width)?r.width:r.width+"px",o=((h=document.createElement("div")).className="slick-cell-menu "+d,h.role="menu",h.style.width=o,h.style.maxHeight=s,h.style.top=e.pageY+5+"px",h.style.left=e.pageX+"px",h.style.display="none",document.createElement("button")),s=(o.type="button",o.className="close",o.dataset.dismiss="slick-cell-menu",o.ariaLabel="Close",document.createElement("span"));if(s.className="close",s.ariaHidden="true",s.innerHTML="×",o.appendChild(s),!r.hideOptionSection&&0=o.width?"left":"right")?(h.classList.remove("dropright"),h.classList.add("dropleft"),e=e-(l-i)-a):(h.classList.remove("dropleft"),h.classList.add("dropright"),e+=a)),h.style.top=t+"px",h.style.left=e+"px"}h.setAttribute("aria-expanded","true"),h.style.display="block"}v.bind(document.body,"mousedown",function(e){h==e.target||h&&h.contains(e.target)||e.defaultPrevented||k(e,{cell:u,row:m})}.bind(this))}}function k(e,t){h&&0!=c.onBeforeMenuClose.notify({cell:t&&t.cell,row:t&&t.row,grid:p,menu:h},e,c).getReturnValue()&&h&&h.remove&&(h.remove(),h=null)}function w(e,t){var l,i,n,s,o;!e||e.disabled||e.divider||"divider"===e||(o=e.command||"",l=m,i=u,n=p.getColumns()[i],s=p.getDataItem(l),null!==o&&""!==o&&(o={cell:i,row:l,grid:p,command:o,item:e,column:n,dataContext:s},c.onCommand.notify(o,t,c),"function"==typeof e.action&&e.action.call(this,t,o),t.defaultPrevented||k(t,{cell:i,row:l})))}function S(e,t){var l,i,n,s,o;!e||e.disabled||e.divider||"divider"===e||p.getEditorLock().commitCurrentEdit()&&(o=void 0!==e.option?e.option:"",l=m,i=u,n=p.getColumns()[i],s=p.getDataItem(l),void 0!==o)&&(o={cell:i,row:l,grid:p,option:o,item:e,column:n,dataContext:s},c.onOptionSelected.notify(o,t,c),"function"==typeof e.action&&e.action.call(this,t,o),t.defaultPrevented||k(t,{cell:i,row:l}))}function y(e,t){return"function"!=typeof e||e.call(this,t)}Slick.Utils.extend(this,{init:function(e){p=e,f=e.getOptions(),r=Slick.Utils.extend({},i,t),d=e&&e.getUID?e.getUID():"",l.subscribe(p.onClick,n),r.hideMenuOnScroll&&l.subscribe(p.onScroll,b)},closeMenu:b,destroy:function(){c.onAfterMenuShow.unsubscribe(),c.onBeforeMenuShow.unsubscribe(),c.onBeforeMenuClose.unsubscribe(),c.onCommand.unsubscribe(),c.onOptionSelected.unsubscribe(),l.unsubscribeAll(),v.unbindAll(),h&&h.remove&&h.remove(),a=null,g=null,h=null},pluginName:"CellMenu",setOptions:function(e){r=Slick.Utils.extend({},r,e)},onAfterMenuShow:new Slick.Event,onBeforeMenuShow:new Slick.Event,onBeforeMenuClose:new Slick.Event,onCommand:new Slick.Event,onOptionSelected:new Slick.Event})}}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.cellmenu.min.js.map b/dist/plugins/slick.cellmenu.min.js.map
deleted file mode 100644
index 6c547725..00000000
--- a/dist/plugins/slick.cellmenu.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","Plugins","CellMenu","optionProperties","let","_cellMenuProperties","_currentCell","_currentRow","_grid","_gridOptions","_gridUid","_handler","EventHandler","_self","this","_commandTitleElm","_optionTitleElm","_menuElm","_bindingEventService","BindingEventService","_defaults","autoAdjustDrop","autoAlignSide","autoAdjustDropOffset","autoAlignSideOffset","hideMenuOnScroll","maxHeight","width","createMenu","e","cell","getCellFromEvent","columnDef","row","getColumns","dataContext","getDataItem","commandItems","optionItems","cellMenu","length","destroyMenu","onBeforeMenuShow","notify","grid","getReturnValue","isNaN","closeButtonElm","document","createElement","className","role","style","top","pageY","left","pageX","display","spanCloseElm","type","dataset","dismiss","ariaLabel","ariaHidden","innerHTML","appendChild","hideOptionSection","optionMenuElm","hideCloseButton","bind","handleCloseButtonClicked","args","optionTitle","textContent","i","ln","addClickListener","item","isItemVisible","runOverrideFunctionWhenExists","itemVisibilityOverride","isItemUsable","itemUsabilityOverride","Object","prototype","hasOwnProperty","call","disabled","liElm","divider","classList","add","hidden","cssClass","split","tooltip","title","iconElm","iconCssClass","iconImage","backgroundImage","textElm","textCssClass","handleMenuItemOptionClick","column","hideCommandSection","commandMenuElm","commandTitle","handleMenuItemCommandClick","body","onAfterMenuShow","defaultPrevented","querySelector","remove","onBeforeMenuClose","menu","handleCellClick","EventData","getNativeEvent","preventDefault","menuUsabilityOverride","repositionMenu","parentElm","target","closest","parentOffset","offset","menuOffsetLeft","menuOffsetTop","gridPos","parentCellWidth","offsetWidth","menuHeight","offsetHeight","menuWidth","rowHeight","dropOffset","sideOffset","spaceBottom","calculateAvailableSpace","bottom","spaceTop","spaceBottomRemaining","getGridPosition","setAttribute","contains","closeMenu","callbackArgs","command","onCommand","action","getEditorLock","commitCurrentEdit","option","undefined","onOptionSelected","overrideFn","init","getOptions","getUID","subscribe","onClick","onScroll","destroy","unsubscribe","unsubscribeAll","unbindAll","pluginName","setOptions","newOptions","Event"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/plugins/slick.cellrangedecorator.min.js b/dist/plugins/slick.cellrangedecorator.min.js
deleted file mode 100644
index 569aeff1..00000000
--- a/dist/plugins/slick.cellrangedecorator.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.cellrangedecorator.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{CellRangeDecorator:function(o,l){var s;function e(){s&&(s.remove(),s=null)}l=Slick.Utils.extend(!0,{},{selectionCssClass:"slick-range-decorator",selectionCss:{zIndex:"9999",border:"2px dashed red"},offset:{top:-1,left:-1,height:-2,width:-2}},l),Slick.Utils.extend(this,{pluginName:"CellRangeDecorator",show:function(e){!s&&((s=document.createElement("div")).className=l.selectionCssClass,Object.keys(l.selectionCss).forEach(e=>{s.style[e]=l.selectionCss[e]}),s.style.position="absolute",t=o.getActiveCanvasNode())&&t.appendChild(s);var t=o.getCellNodeBox(e.fromRow,e.fromCell),e=o.getCellNodeBox(e.toRow,e.toCell);return t&&e&&l&&l.offset&&(s.style.top=t.top+l.offset.top+"px",s.style.left=t.left+l.offset.left+"px",s.style.height=e.bottom-t.top+l.offset.height+"px",s.style.width=e.right-t.left+l.offset.width+"px"),s},hide:e,destroy:function(){e()}})}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.cellrangedecorator.min.js.map b/dist/plugins/slick.cellrangedecorator.min.js.map
deleted file mode 100644
index 30689b6f..00000000
--- a/dist/plugins/slick.cellrangedecorator.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","CellRangeDecorator","grid","options","_elem","hide","remove","selectionCssClass","selectionCss","zIndex","border","offset","top","left","height","width","this","pluginName","show","range","document","createElement","className","Object","keys","forEach","style","cssStyleKey","position","canvasNode","getActiveCanvasNode","appendChild","from","getCellNodeBox","fromRow","fromCell","to","toRow","toCell","bottom","right","destroy"],"mappings":";;;;;;;;AAAA,CAAA,SAAWA,GAETC,MAAMC,MAAMC,OAAO,CAAA,EAAMH,EAAQ,CAC/BC,MAAS,CACPG,mBAeJ,SAA4BC,EAAMC,GAChC,IAAIC,EA2CJ,SAASC,IACHD,IACFA,EAAME,OAAO,EACbF,EAAQ,KAEZ,CAtCAD,EAAUL,MAAMC,MAAMC,OAAO,CAAA,EAAM,GATnB,CACdO,kBAAmB,wBACnBC,aAAc,CACZC,OAAU,OACVC,OAAU,gBACZ,EACAC,OAAQ,CAAEC,IAAK,CAAC,EAAGC,KAAM,CAAC,EAAGC,OAAQ,CAAC,EAAGC,MAAO,CAAC,CAAE,CACrD,EAEkDZ,CAAO,EAwCzDL,MAAMC,MAAMC,OAAOgB,KAAM,CACvBC,WAAc,qBACdC,KAxCF,SAAcC,GACPf,CAAAA,KACHA,EAAQgB,SAASC,cAAc,KAAK,GAC9BC,UAAYnB,EAAQI,kBAC1BgB,OAAOC,KAAKrB,EAAQK,YAAY,EAAEiB,QAAQ,IACxCrB,EAAMsB,MAAMC,GAAexB,EAAQK,aAAamB,EAClD,CAAC,EACDvB,EAAMsB,MAAME,SAAW,WACjBC,EAAa3B,EAAK4B,oBAAoB,IAE1CD,EAAWE,YAAY3B,CAAK,EAThC,IAaI4B,EAAO9B,EAAK+B,eAAed,EAAMe,QAASf,EAAMgB,QAAQ,EACxDC,EAAKlC,EAAK+B,eAAed,EAAMkB,MAAOlB,EAAMmB,MAAM,EAStD,OAPIN,GAAQI,GAAMjC,GAAWA,EAAQQ,SACnCP,EAAMsB,MAAMd,IAASoB,EAAKpB,IAAMT,EAAQQ,OAAOC,IAA7B,KAClBR,EAAMsB,MAAMb,KAAUmB,EAAKnB,KAAOV,EAAQQ,OAAOE,KAA9B,KACnBT,EAAMsB,MAAMZ,OAAYsB,EAAGG,OAASP,EAAKpB,IAAMT,EAAQQ,OAAOG,OAAzC,KACrBV,EAAMsB,MAAMX,MAAWqB,EAAGI,MAAQR,EAAKnB,KAAOV,EAAQQ,OAAOI,MAAzC,MAGfX,CACT,EAgBEC,KAAQA,EACRoC,QAfF,WACEpC,EAAK,CACP,CAcA,CAAC,CACH,CAvEE,CACF,CAAC,CAuEF,EAAER,MAAM"}
\ No newline at end of file
diff --git a/dist/plugins/slick.cellrangeselector.min.js b/dist/plugins/slick.cellrangeselector.min.js
deleted file mode 100644
index 58a8851a..00000000
--- a/dist/plugins/slick.cellrangeselector.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.cellrangeselector.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{CellRangeSelector:function(s){var r,a,i,c,n,f,g,u,d,w,p,v,S,m,h,C,o,b,x,y=this,t=new Slick.EventHandler,l={autoScroll:!0,minIntervalToShowNextCell:30,maxIntervalToShowNextCell:600,accelerateInterval:5,selectionCss:{border:"2px dashed blue"}},I=!1,R=0,k=0;function N(e,t){R=t.scrollTop,k=t.scrollLeft}function D(e){n=r.getActiveCanvasNode(e),v=r.getActiveViewportNode(e);var t=r.getDisplayedScrollbarDimensions();S=v.offsetWidth-t.width,m=v.offsetHeight-t.height,C={x:r.getAbsoluteColumnMinWidth()/2,y:r.getOptions().rowHeight/2},I=!(!r.getPluginByName("RowMoveManager")&&!r.getPluginByName("CrossGridRowMoveManager")),d=u=0,p=n.classList.contains("grid-canvas-bottom"),-1s&&(e.offset.x=o.pageX-s);o.pageYf&&(e.offset.y=f-o.pageY);return e.isOutsideViewport=!!e.offset.x||!!e.offset.y,e}(e,t)).isOutsideViewport)return b=s.maxIntervalToShowNextCell-Math.abs(h.offset.x)*s.accelerateInterval,x=s.maxIntervalToShowNextCell-Math.abs(h.offset.y)*s.accelerateInterval,void(o||(c=i=0,o=setInterval(function(){var e,t,o,l,n,r=!1,a=!1;h.offset.x?(i+=s.minIntervalToShowNextCell,r=b<=i):i=0,h.offset.y?(c+=s.minIntervalToShowNextCell,a=x<=c):c=0,(r||a)&&(r&&(i=0),a&&(c=0),r=r,a=a,e=h.e.pageX,t=h.e.pageY,o=h.offset.x,l=h.offset.y,n=h.viewport.offset,r&&o&&(e=0c.frozenColumn||w&&e.cell<=c.frozenColumn||0<=c.frozenRow&&!p&&e.row>=c.frozenRow||p&&e.rowl.right||o.topl.bottom)&&r.scrollCellIntoView(e.row,e.cell)}r.canCellBeSelected(e.row,e.cell)&&t&&t.range&&(t.range.end=e,o=new Slick.Range(t.range.start.row,t.range.start.cell,e.row,e.cell),g.show(o),y.onCellRangeSelecting.notify({range:o}))}}function P(e,t){f&&(f=!1,e.stopImmediatePropagation(),B(),g.hide(),y.onCellRangeSelected.notify({range:new Slick.Range(t.range.start.row,t.range.start.cell,t.range.end.row,t.range.end.cell)}))}Slick.Utils.extend(this,{init:function(e){if(void 0===Slick.Draggable)throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');s=Slick.Utils.extend(!0,{},l,s),g=s.cellDecorator||new Slick.CellRangeDecorator(e,s),i=(r=e).getCanvasNode(),c=r.getOptions(),t.subscribe(r.onScroll,N).subscribe(r.onDragInit,D).subscribe(r.onDragStart,z).subscribe(r.onDrag,T).subscribe(r.onDragEnd,P)},destroy:function(){t.unsubscribeAll(),i=v=n=null,g&&g.destroy&&g.destroy()},pluginName:"CellRangeSelector",getCellDecorator:function(){return g},getCurrentRange:function(){return a},onBeforeCellRangeSelected:new Slick.Event,onCellRangeSelected:new Slick.Event,onCellRangeSelecting:new Slick.Event})}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.cellrangeselector.min.js.map b/dist/plugins/slick.cellrangeselector.min.js.map
deleted file mode 100644
index 0e580095..00000000
--- a/dist/plugins/slick.cellrangeselector.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","CellRangeSelector","options","_grid","_currentlySelectedRange","_canvas","_gridOptions","_activeCanvas","_dragging","_decorator","_rowOffset","_columnOffset","_isRightCanvas","_isBottomCanvas","_activeViewport","_viewportWidth","_viewportHeight","_draggingMouseOffset","_moveDistanceForOneCell","_autoScrollTimerId","_xDelayForNextCell","_yDelayForNextCell","_self","this","_handler","EventHandler","_defaults","autoScroll","minIntervalToShowNextCell","maxIntervalToShowNextCell","accelerateInterval","selectionCss","border","_isRowMoveRegistered","_scrollTop","_scrollLeft","handleScroll","e","args","scrollTop","scrollLeft","handleDragInit","getActiveCanvasNode","getActiveViewportNode","scrollbarDimensions","getDisplayedScrollbarDimensions","offsetWidth","width","offsetHeight","height","x","getAbsoluteColumnMinWidth","y","getOptions","rowHeight","getPluginByName","classList","contains","frozenRow","canvasSelector","getUID","frozenBottom","canvasElm","document","querySelector","clientHeight","frozenColumn","canvasLeftElm","clientWidth","stopImmediatePropagation","preventDefault","handleDragStart","dd","cell","getCellFromEvent","onBeforeCellRangeSelected","notify","canCellBeSelected","row","focus","canvasOffset","offset","let","startX","left","startY","top","start","getCellFromPoint","range","end","show","Range","handleDrag","evt","xTotalDelay","yTotalDelay","getNativeEvent","targetEvent","touches","viewportLeft","viewportTop","viewportRight","viewportBottom","viewportOffset","viewportOffsetLeft","viewportOffsetTop","viewportOffsetRight","viewportOffsetBottom","result","viewport","right","bottom","isOutsideViewport","pageX","pageY","handleDragOutsideViewport","Math","abs","setInterval","mouseOffsetX","mouseOffsetY","xNeedUpdate","yNeedUpdate","handleDragTo","stopIntervalTimer","clearInterval","endCellBox","getCellNodeBox","scrollCellIntoView","onCellRangeSelecting","handleDragEnd","hide","onCellRangeSelected","init","grid","Draggable","Error","cellDecorator","CellRangeDecorator","getCanvasNode","subscribe","onScroll","onDragInit","onDragStart","onDrag","onDragEnd","destroy","unsubscribeAll","pluginName","getCellDecorator","getCurrentRange","Event"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/plugins/slick.cellselectionmodel.min.js b/dist/plugins/slick.cellselectionmodel.min.js
deleted file mode 100644
index 2228ec2c..00000000
--- a/dist/plugins/slick.cellselectionmodel.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.cellselectionmodel.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{CellSelectionModel:function(l){var s,n,o,a=[],t=this;n=void 0===l||void 0===l.cellRangeSelector?new Slick.CellRangeSelector({selectionCss:{border:"2px solid black"}}):l.cellRangeSelector;var c={selectActiveCell:!0};function u(e){for(var l=[],n=0;n=s.getDataLength(),h&&k.applySelectOnAllPages||(k.hideInColumnTitleRow||k.hideSelectAllCheckbox||v(b),k.hideInFilterHeaderRow)||(r=m&&m.querySelector("#header-filter-selector"+g))&&(r.checked=b),0=o.length,k.hideInColumnTitleRow||k.hideSelectAllCheckbox||v(b),k.hideInFilterHeaderRow||(e=m&&m.querySelector("#header-filter-selector"+g))&&(e.checked=b)}function r(e,t){32==e.which&&s.getColumns()[t.cell].id===k.columnId&&(s.getEditorLock().isActive()&&!s.getEditorLock().commitCurrentEdit()||u(t.row),e.preventDefault(),e.stopImmediatePropagation())}function a(e,t){s.getColumns()[t.cell].id===k.columnId&&"checkbox"===e.target.type&&(s.getEditorLock().isActive()&&!s.getEditorLock().commitCurrentEdit()?e.preventDefault():(u(t.row),e.stopPropagation()),e.stopImmediatePropagation())}function u(t){var e=s.getDataItem(t);I(t,e,s)&&(p[t]?(e=s.getSelectedRows().filter(e=>e!==t),s.setSelectedRows(e,"click.toggle")):s.setSelectedRows(s.getSelectedRows().concat(t),"click.toggle"),s.setActiveCell(t,function(){if(null===S){S=0;var t=s.getColumns();for(let e=0;e ":" ":null}function I(e,t,l){return"function"!=typeof f||f(e,t,l)}function v(e){e?s.updateColumnHeader(k.columnId," ",k.toolTip):s.updateColumnHeader(k.columnId," ",k.toolTip)}function y(e){f=e}Slick.Utils.extend(this,{init:function(e){s=e,(h=!Array.isArray(e.getData()))&&(d=e.getData()),t.subscribe(s.onSelectedRowsChanged,c).subscribe(s.onClick,a).subscribe(s.onKeyDown,r),h&&d&&k.applySelectOnAllPages&&t.subscribe(d.onSelectedRowIdsChanged,i).subscribe(d.onPagingInfoChanged,i),k.hideInFilterHeaderRow||(e=e,t.subscribe(e.onHeaderRowCellRendered,function(e,t){var l,o,c;"sel"===t.column.field&&(Slick.Utils.emptyElement(t.node),(l=document.createElement("span")).id="filter-checkbox-selectall-container",(o=document.createElement("input")).type="checkbox",o.id="header-filter-selector"+g,(c=document.createElement("label")).htmlFor="header-filter-selector"+g,l.appendChild(o),l.appendChild(c),t.node.appendChild(l),m=t.node,n.bind(l,"click",e=>C(e,t)))})),k.hideInColumnTitleRow||t.subscribe(s.onHeaderClick,C)},destroy:function(){t.unsubscribeAll(),n.unbindAll()},pluginName:"CheckboxSelectColumn",deSelectRows:function(e){let t,l=e.length,o=[];for(t=0;to.indexOf(e)<0),"SlickCheckboxSelectColumn.deSelectRows")},selectRows:function(e){let t,l=e.length,o=[];for(t=0;t '):(a=[],e=r.rowHeight,l=o[g+"sizePadding"]*r.rowHeight,null!==R.maxRows&&o[g+"sizePadding"]>R.maxRows&&(l=R.maxRows*e,o[g+"sizePadding"]=R.maxRows),s=R.cssClass+" collapse ",R.expandedClass&&(s+=R.expandedClass),a.push('
'),a.push(''),a.push('
'),a.push('
',o[g+"detailContent"],"
"),a.join(""))}function z(e,t,i){return"function"!=typeof n||n(e,t,i)}function E(e){n=e}Slick.Utils.extend(this,{init:function(e){if(!e)throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the "init()" method');c=(d=e).getUID(),r=e.getOptions()||{},u=d.getData(),g=R&&R.keyPrefix||"_",f=d.getOptions().minRowBuffer,d.getOptions().minRowBuffer=R.panelRows+3,i.subscribe(d.onClick,v).subscribe(d.onScroll,b),R.collapseAllOnSort&&(i.subscribe(d.onSort,D),l=[],m=[]),i.subscribe(d.getData().onRowCountChanged,function(){d.updateRowCount(),d.render()}),i.subscribe(d.getData().onRowsChanged,function(e,t){d.invalidateRows(t.rows),d.render()}),o.onAsyncResponse.subscribe(function(e,t){if(!t||!t.item&&!t.itemDetail)throw'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.item" property.';var i=t.item||t.itemDetail;t.detailView?i[g+"detailContent"]=t.detailView:i[g+"detailContent"]=R.postTemplate(i),i[g+"detailViewLoaded"]=!0,u.updateItem(i[p],i),o.onAsyncEndUpdate.notify({grid:d,item:i,itemDetail:i},e,o)}),i.subscribe(u.onSetItemsCalled,function(){p=u&&u.getIdPropertyName()||"id"}),R.useSimpleViewportCalc&&i.subscribe(d.onRendered,function(e,t){t&&t.endRow&&(w=t.endRow-t.startRow)})},destroy:function(){i.unsubscribeAll(),o.onAsyncResponse.unsubscribe(),o.onAsyncEndUpdate.unsubscribe(),o.onAfterRowDetailToggle.unsubscribe(),o.onBeforeRowDetailToggle.unsubscribe(),o.onRowOutOfViewportRange.unsubscribe(),o.onRowBackToViewportRange.unsubscribe()},pluginName:"RowDetailView",collapseAll:D,collapseDetailView:V,expandDetailView:I,expandableOverride:E,getColumnDefinition:function(){return{id:R.columnId,name:"",toolTip:R.toolTip,field:"sel",width:R.width,resizable:!1,sortable:!1,alwaysRenderColumn:R.alwaysRenderColumn,cssClass:R.cssClass,formatter:k}},getExpandedRows:function(){return l},getFilterItem:function(e){return e=e[g+"isPadding"]&&e[g+"parent"]?e[g+"parent"]:e},getOptions:function(){return R},resizeDetailView:function(e){if(e){var t=document.querySelector("."+c+" .detailViewContainer_"+e[p]),i=document.querySelector("."+c+" .cellDetailView_"+e[p]),n=document.querySelector("."+c+" .innerDetailView_"+e[p]);if(t&&i&&n){for(var o=1;o<=e[g+"sizePadding"];o++)u.deleteItem(e[p]+"."+o);for(var n=r.rowHeight,a=(t.style.minHeight=null,t.scrollHeight),l=Math.ceil(a/n),l=(e[g+"sizePadding"]=Math.ceil(2*l*13/n),e[g+"height"]=a,e[g+"sizePadding"]*n),s=(null!==R.maxRows&&e[g+"sizePadding"]>R.maxRows&&(l=R.maxRows*n,e[g+"sizePadding"]=R.maxRows),d.getOptions().minRowBuffer
e===t.row)||(i=[t.row],n.disableRowSelection)||l.setSelectedRows(i),l.getOptions().rowHeight);o.selectedRows=i,o.selectionProxy=document.createElement("div"),o.selectionProxy.className="slick-reorder-proxy",o.selectionProxy.style.display="none",o.selectionProxy.style.position="absolute",o.selectionProxy.style.zIndex="99999",o.selectionProxy.style.width=s.clientWidth+"px",o.selectionProxy.style.height=e*i.length+"px",s.appendChild(o.selectionProxy),o.guide=document.createElement("div"),o.guide.className="slick-reorder-guide",o.guide.style.position="absolute",o.guide.style.zIndex="99999",o.guide.style.width=s.clientWidth+"px",o.guide.style.top="-1000px",s.appendChild(o.guide),o.insertBefore=-1}}function w(e,o){var t;c&&(e.stopImmediatePropagation(),e=((e=e.getNativeEvent()).touches?e.touches[0]:e).pageY-(Slick.Utils.offset(s).top||0),o.selectionProxy.style.top=e-5+"px",o.selectionProxy.style.display="block",o.clonedSlickRow&&(o.clonedSlickRow.style.top=e-6+"px",o.clonedSlickRow.style.display="block"),(e=Math.max(0,Math.min(Math.round(e/l.getOptions().rowHeight),l.getDataLength())))!==o.insertBefore)&&(!(t={grid:l,rows:o.selectedRows,insertBefore:e})===i.onBeforeMoveRows.notify(t).getReturnValue()?o.canMove=!1:o.canMove=!0,r&&o.canMove&&(t=l.getDataItem(e),o.canMove=g(e,t,l)),o.canMove?o.guide.style.top=e*(l.getOptions().rowHeight||0)+"px":o.guide.style.top="-1000px",o.insertBefore=e)}function u(e,o){c&&(c=!1,e.stopImmediatePropagation(),o.guide.remove(),o.selectionProxy.remove(),o.clonedSlickRow&&(o.clonedSlickRow.remove(),o.clonedSlickRow=null),o.canMove)&&(e={grid:l,rows:o.selectedRows,insertBefore:o.insertBefore},i.onMoveRows.notify(e))}function e(e,o,t,i,n,l){return g(e,n,l)?{addClasses:"cell-reorder dnd",text:""}:null}function g(e,o,t){return"function"!=typeof r||r(e,o,t)}function v(e){r=e}function p(e){return/move|selectAndMove/.test(l.getColumns()[e].behavior)}Slick.Utils.extend(this,{onBeforeMoveRows:new Slick.Event,onMoveRows:new Slick.Event,init:function(e){n=Slick.Utils.extend(!0,{},t,n),s=(l=e).getCanvasNode(),o.subscribe(l.onDragInit,d).subscribe(l.onDragStart,a).subscribe(l.onDrag,w).subscribe(l.onDragEnd,u)},destroy:function(){o.unsubscribeAll()},getColumnDefinition:function(){return{id:n.columnId||"_move",name:"",field:"move",width:n.width||40,behavior:"selectAndMove",selectable:!1,resizable:!1,cssClass:n.cssClass,formatter:e}},setOptions:function(e){n=Slick.Utils.extend({},n,e)},usabilityOverride:v,isHandlerColumn:p,pluginName:"RowMoveManager"})}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.rowmovemanager.min.js.map b/dist/plugins/slick.rowmovemanager.min.js.map
deleted file mode 100644
index 650c1095..00000000
--- a/dist/plugins/slick.rowmovemanager.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","RowMoveManager","options","_grid","_canvas","_dragging","_self","this","_usabilityOverride","_handler","EventHandler","_defaults","columnId","cssClass","cancelEditOnDrag","disableRowSelection","hideRowMoveShadow","rowMoveShadowMarginTop","rowMoveShadowMarginLeft","rowMoveShadowOpacity","rowMoveShadowScale","singleRowMove","width","usabilityOverride","handleDragInit","e","stopImmediatePropagation","handleDragStart","dd","cell","getCellFromEvent","currentRow","row","checkUsabilityOverride","getDataItem","getEditorLock","isActive","cancelCurrentEdit","isHandlerColumn","slickRowElm","cellNodeElm","getCellNode","closest","clonedSlickRow","cloneNode","classList","add","style","display","marginLeft","Number","marginTop","opacity","transform","appendChild","selectedRows","getSelectedRows","rowHeight","length","some","selectedRow","setSelectedRows","getOptions","selectionProxy","document","createElement","className","position","zIndex","clientWidth","height","guide","top","insertBefore","handleDrag","evt","insertBeforeDataContext","getNativeEvent","touches","pageY","offset","Math","max","min","round","getDataLength","eventData","grid","rows","onBeforeMoveRows","notify","getReturnValue","canMove","handleDragEnd","remove","onMoveRows","moveIconFormatter","value","columnDef","dataContext","addClasses","text","overrideFn","columnIndex","test","getColumns","behavior","Event","init","getCanvasNode","subscribe","onDragInit","onDragStart","onDrag","onDragEnd","destroy","unsubscribeAll","getColumnDefinition","id","name","field","selectable","resizable","formatter","setOptions","newOptions","pluginName"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/plugins/slick.rowselectionmodel.min.js b/dist/plugins/slick.rowselectionmodel.min.js
deleted file mode 100644
index 34c891fd..00000000
--- a/dist/plugins/slick.rowselectionmodel.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.rowselectionmodel.js
- */
-!function(e){Slick.Utils.extend(!0,e,{Slick:{RowSelectionModel:function(t){var c,n,l,o,i,s=[],r=this,a=new Slick.EventHandler,u={selectActiveRow:!0,dragToSelect:!1,autoScrollWhenDrag:!0,cellRangeSelector:void 0};function g(e){return function(){n||(n=!0,e.apply(this,arguments),n=!1)}}function w(e){for(var t=[],n=0;ne!==t.row),c.setActiveCell(t.row,t.cell);else if(i.length&&e.shiftKey){for(var l=i.pop(),n=Math.min(t.row,l),o=Math.max(t.row,l),i=[],r=n;r<=o;r++)r!==l&&i.push(r);i.push(l),c.setActiveCell(t.row,t.cell)}return d(S(i)),e.stopImmediatePropagation(),!0}function C(e,t){var n;if(i||(n=c.getPluginByName("RowMoveManager")||c.getPluginByName("CrossGridRowMoveManager"),i=n?n.isHandlerColumn:Slick.Utils.noop),c.getEditorLock().isActive()||i(t.cell))return e.stopPropagation(),!1;c.setActiveCell(t.row,t.cell)}function k(e,t){if(!c.getOptions().multiSelect||!l.selectActiveRow)return!1;d([new Slick.Range(t.range.fromRow,0,t.range.toRow,c.getColumns().length-1)])}Slick.Utils.extend(this,{getSelectedRows:f,setSelectedRows:e,getSelectedRanges:function(){return s},setSelectedRanges:d,refreshSelections:function(){e(f())},init:function(e){if(void 0===Slick.Draggable)throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');if(l=Slick.Utils.extend(!0,{},u,t),o=l.cellRangeSelector,c=e,!o&&l.dragToSelect){if(!Slick.CellRangeDecorator)throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true");o=new Slick.CellRangeSelector({selectionCss:{border:"none"},autoScroll:l.autoScrollWhenDrag})}a.subscribe(c.onActiveCellChanged,g(h)),a.subscribe(c.onKeyDown,g(R)),a.subscribe(c.onClick,g(v)),o&&(e.registerPlugin(o),o.onCellRangeSelecting.subscribe(k),o.onCellRangeSelected.subscribe(k),o.onBeforeCellRangeSelected.subscribe(C))},destroy:function(){a.unsubscribeAll(),o&&(o.onCellRangeSelecting.unsubscribe(k),o.onCellRangeSelected.unsubscribe(k),o.onBeforeCellRangeSelected.unsubscribe(C),c.unregisterPlugin(o),o.destroy)&&o.destroy()},pluginName:"RowSelectionModel",onSelectedRangesChanged:new Slick.Event})}}})}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.rowselectionmodel.min.js.map b/dist/plugins/slick.rowselectionmodel.min.js.map
deleted file mode 100644
index 75ea9e4b..00000000
--- a/dist/plugins/slick.rowselectionmodel.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","RowSelectionModel","options","_grid","_inHandler","_options","_selector","_isRowMoveManagerHandler","_ranges","_self","this","_handler","EventHandler","_defaults","selectActiveRow","dragToSelect","autoScrollWhenDrag","cellRangeSelector","undefined","wrapHandler","handler","apply","arguments","rangesToRows","ranges","rows","i","length","j","fromRow","toRow","push","rowsToRanges","lastCell","getColumns","Range","getSelectedRows","setSelectedRows","setSelectedRanges","caller","eventData","EventData","Object","defineProperty","writable","configurable","value","onSelectedRangesChanged","notify","handleActiveCellChange","e","data","row","handleKeyDown","top","bottom","activeRow","getActiveCell","getOptions","multiSelect","shiftKey","ctrlKey","altKey","metaKey","which","keyCode","UP","DOWN","selectedRows","sort","x","y","active","getDataLength","scrollRowIntoView","from","to","preventDefault","stopPropagation","handleClick","cell","getCellFromEvent","canCellBeActive","idx","selection","indexOf","setActiveCell","filter","o","last","pop","Math","min","max","stopImmediatePropagation","handleBeforeCellRangeSelected","rowMoveManager","getPluginByName","isHandlerColumn","noop","getEditorLock","isActive","handleCellRangeSelected","args","range","getSelectedRanges","refreshSelections","init","grid","Draggable","Error","CellRangeDecorator","CellRangeSelector","selectionCss","border","autoScroll","subscribe","onActiveCellChanged","onKeyDown","onClick","registerPlugin","onCellRangeSelecting","onCellRangeSelected","onBeforeCellRangeSelected","destroy","unsubscribeAll","unsubscribe","unregisterPlugin","pluginName","Event"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/plugins/slick.state.min.js b/dist/plugins/slick.state.min.js
deleted file mode 100644
index c4b9ffc4..00000000
--- a/dist/plugins/slick.state.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./plugins/slick.state.js
- */
-!function(t){Slick.Utils.extend(!0,t,{Slick:{State:function(i){var o,n,s=(i=Slick.Utils.extend(!0,{},a,i)).storage,e=new Slick.Event,r={state:null,current:null};function u(){var t;if(n&&s)return(t={sortcols:o.getSortColumns(),viewport:o.getViewport(),columns:o.getColumns().map(function(t){return{id:t.id,width:t.width}}),userData:null}).userData=r.current,l(t.userData),e.notify(t),s.set(i.key_prefix+n,t)}function c(t){return r.current=t,this}function l(t){r.state=t,c(t)}Slick.Utils.extend(this,{init:function(t){(n=(o=t).cid||i.cid)?(o.onColumnsResized.subscribe(u),o.onColumnsReordered.subscribe(u),o.onSort.subscribe(u)):console.warn("grid has no client id. state persisting is disabled.")},destroy:function(){o.onSort.unsubscribe(u),o.onColumnsReordered.unsubscribe(u),o.onColumnsResized.unsubscribe(u),u()},save:u,setUserData:c,resetUserData:function(){return r.current=r.state,this},getUserData:function(){return r.current},getStateUserData:function(){return r.state},restore:function(){return new Promise((r,e)=>{n?s?s.get(i.key_prefix+n).then(function(t){var e,n,s;t&&(t.sortcols&&o.setSortColumns(t.sortcols||[]),t.viewport&&i.scrollRowIntoView&&o.scrollRowIntoView(t.viewport.top,!0),t.columns&&((e=i.defaultColumns)&&(n={},e.forEach(function(t){n[t.id]=t}),s=[],(t.columns||[]).forEach(function(t){n[t.id]&&s.push(Slick.Utils.extend(!0,{},n[t.id],{width:t.width,headerCssClass:t.headerCssClass}))}),t.columns=s),o.setColumns(t.columns)),l(t.userData)),r(t)}).catch(function(t){e(t)}):e("missing store"):e("missing client id")})},onStateChanged:e,reset:function(){s.set(i.key_prefix+n,{}),l(null)}})}}});var a={key_prefix:"slickgrid:",storage:new function(){var r=t.localStorage;return void 0===r&&console.error("localStorage is not available. slickgrid statepersistor disabled."),{get:function(s){return new Promise((t,e)=>{if(r)try{var n=r.getItem(s);if(n)return t(JSON.parse(n));t({})}catch(t){e(t)}else e("missing localStorage")})},set:function(t,e){r&&(void 0!==e&&(e=JSON.stringify(e)),r.setItem(t,e))}}},scrollRowIntoView:!0}}(window);
\ No newline at end of file
diff --git a/dist/plugins/slick.state.min.js.map b/dist/plugins/slick.state.min.js.map
deleted file mode 100644
index 6693e5a3..00000000
--- a/dist/plugins/slick.state.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","Slick","Utils","extend","State","options","_grid","_cid","_store","defaults","storage","onStateChanged","Event","userData","state","current","save","sortcols","getSortColumns","viewport","getViewport","columns","getColumns","map","col","id","width","setUserDataFromState","notify","set","key_prefix","setUserData","data","this","init","grid","cid","onColumnsResized","subscribe","onColumnsReordered","onSort","console","warn","destroy","unsubscribe","resetUserData","getUserData","getStateUserData","restore","Promise","resolve","reject","get","then","defaultColumns","defaultColumnsLookup","cols","setSortColumns","scrollRowIntoView","top","forEach","colDef","columnDef","push","headerCssClass","setColumns","catch","e","reset","localStorage","error","key","d","getItem","JSON","parse","exc","obj","stringify","setItem"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick-default-theme.min.css b/dist/slick-default-theme.min.css
deleted file mode 100644
index a76d1b2e..00000000
--- a/dist/slick-default-theme.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.slick-header-columns{background:url('images/header-columns-bg.gif') repeat-x center bottom;border-bottom:1px solid silver}.slick-header-column{background:url('images/header-columns-bg.gif') repeat-x center bottom;border-right:1px solid silver}.slick-header-column:hover, .slick-header-column-active{background:white url('images/header-columns-over-bg.gif') repeat-x center bottom}.slick-headerrow{background:#fafafa}.slick-headerrow-column{background:#fafafa;border-bottom:0;height:100%}.slick-preheader-panel{border:1px solid #d3d3d3}.slick-row.ui-state-active{background:#F5F7D7}.slick-row{position:absolute;background:white;border:0px;line-height:20px}.slick-row.selected{z-index:10;background:#DFE8F6}.slick-cell{padding-left:4px;padding-right:4px}.slick-group{border-bottom:2px solid silver}.slick-group-toggle{width:9px;height:9px;margin-right:5px}.slick-group-toggle.expanded{background:url(images/collapse.gif) no-repeat center center}.slick-group-toggle.collapsed{background:url(images/expand.gif) no-repeat center center}.slick-group-totals{color:gray;background:white}.slick-group-select-checkbox{width:13px;height:13px;margin:3px 10px 0 0;display:inline-block}.slick-group-select-checkbox.checked{background:url(images/GrpCheckboxY.png) no-repeat center center}.slick-group-select-checkbox.unchecked{background:url(images/GrpCheckboxN.png) no-repeat center center}.slick-cell.selected{background-color:beige}.slick-cell.active{border-color:gray;border-style:solid}.slick-sortable-placeholder{background:#d9d9d9!important}.slick-row.odd{background:#fafafa}.slick-row.ui-state-active{background:#F5F7D7}.slick-row.loading{opacity:0.5;filter:alpha(opacity = 50)}.slick-cell.invalid{border-color:red;-moz-animation-duration:0.2s;-webkit-animation-duration:0.2s;-moz-animation-name:slickgrid-invalid-hilite;-webkit-animation-name:slickgrid-invalid-hilite}
\ No newline at end of file
diff --git a/dist/slick.compositeeditor.min.js b/dist/slick.compositeeditor.min.js
deleted file mode 100644
index e9225f89..00000000
--- a/dist/slick.compositeeditor.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.compositeeditor.js
- */
-Slick.Utils.extend(Slick,{CompositeEditor:function(a,u,h){var c,r=function(){};function i(i){var d=[];this.destroy=function(){for(var i=0;i=this.fromRow&&t<=this.toRow&&e>=this.fromCell&&e<=this.toCell},this.toString=function(){return this.isSingleCell()?"("+this.fromRow+":"+this.fromCell+")":"("+this.fromRow+":"+this.fromCell+" - "+this.toRow+":"+this.toCell+")"}},NonDataRow:t,Group:e,GroupTotals:n,RegexSanitizer:function(t){return t.replace(/(\b)(on[a-z]+)(\s*)=|javascript:([^>]*)[^>]*|(<\s*)(\/*)script([<>]*).*(<\s*)(\/*)script(>*)|(<)(\/*)(script|script defer)(.*)(>|>">)/gi,"")},EditorLock:i,BindingEventService:function(){this.boundedEvents=[],this.destroy=function(){this.unbindAll(),this.boundedEvents=[]},this.bind=function(t,e,n,i){t.addEventListener(e,n,i),this.boundedEvents.push({element:t,eventName:e,listener:n})},this.unbind=function(t,e,n){t&&t.removeEventListener&&t.removeEventListener(e,n)},this.unbindByEventName=function(e,n){var t=this.boundedEvents.find(t=>t.element===e&&t.eventName===n);t&&this.unbind(t.element,t.eventName,t.listener)},this.unbindAll=function(){for(;0{0<=n?(clearTimeout(i),i=setTimeout(()=>e.apply(null,t),n)):e.apply(null)}},extend:function t(){var e,n,i,o,r,s,l=arguments[0],u=1,c=arguments.length,a=!1;for("boolean"==typeof l?(a=l,l=arguments[u]||{},u++):l=l||{},"object"==typeof l||"function"==typeof(s=l)&&"number"!=typeof s.nodeType&&"function"!=typeof s.item||(l={}),u===c&&(l=this,u--);u{var e=n[t];"object"==typeof e?Object.assign(i[t],e):i[t]=n[t]}),e&&e.appendChild&&e.appendChild(i),i},emptyElement:function(t){if(t&&t.firstChild)for(;t.firstChild;)t.lastChild&&t.removeChild(t.lastChild);return t},innerSize:function(t,e){let n=0;if(t){n=t["height"===e?"clientHeight":"clientWidth"];for(const o of"height"===e?["top","bottom"]:["left","right"]){var i=parseFloat(function(t,e){if(t&&t.getComputedStyle)return a.getComputedStyle(t,null).getPropertyValue(e);return null}(t,"padding-"+o))||0;n-=i}}return n},isEmptyObject:function(t){return null==t||0===Object.entries(t).length},noop:function(){},offset:f,height:function(t,e){if(t)return void 0===e?t.getBoundingClientRect().height:void o(t,"height",e)},width:function(t,e){if(t&&t.getBoundingClientRect)return void 0===e?t.getBoundingClientRect().width:void o(t,"width",e)},setStyleSize:o,contains:function(e,t){return!(!e||!t||l(t).every(function(t){return e!=t}))},toFloat:function(t){return t=parseFloat(t),isNaN(t)?0:t},parents:l,show:u,hide:c,slideUp:function(t,e){return h(t,"slideUp",e)},slideDown:function(t,e){return h(t,"slideDown",e)},storage:{_storage:new WeakMap,put:function(t,e,n){this._storage.has(t)||this._storage.set(t,new Map),this._storage.get(t).set(e,n)},get:function(t,e){t=this._storage.get(t);return t?t.get(e):null},remove:function(t,e){e=this._storage.get(t).delete(e);return 0===!this._storage.get(t).size&&this._storage.delete(t),e}}},GlobalEditorLock:new i,keyCode:{SPACE:8,BACKSPACE:8,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,RIGHT:39,TAB:9,UP:38,A:65},preClickClassName:"slick-edit-preclick",GridAutosizeColsMode:{None:"NOA",LegacyOff:"LOF",LegacyForceFit:"LFF",IgnoreViewport:"IGV",FitColsToViewport:"FCV",FitViewportToCols:"FVC"},ColAutosizeMode:{Locked:"LCK",Guide:"GUI",Content:"CON",ContentExpandOnly:"CXO",ContentIntelligent:"CTI"},RowSelectionMode:{FirstRow:"FS1",FirstNRows:"FSN",AllRows:"ALL",LastRow:"LS1"},ValueFilterMode:{None:"NONE",DeDuplicate:"DEDP",GetGreatestAndSub:"GR8T",GetLongestTextAndSub:"LNSB",GetLongestText:"LNSC"},WidthEvalMode:{Auto:"AUTO",TextOnly:"CANV",HTML:"HTML"}},"undefined"!=typeof global&&(global.Slick=a.Slick)}(window);
\ No newline at end of file
diff --git a/dist/slick.core.min.js.map b/dist/slick.core.min.js.map
deleted file mode 100644
index 8a80a729..00000000
--- a/dist/slick.core.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","EventData","event","args","let","nativeEvent","this","arguments_","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","returnValues","returnValue","undefined","key","target","stopPropagation","stopImmediatePropagation","getNativeEvent","preventDefault","defaultPrevented","addReturnValue","value","push","getReturnValue","getArguments","NonDataItem","__nonDataRow","Group","__group","level","count","title","collapsed","selectChecked","totals","rows","groups","groupingKey","GroupTotals","__groupTotals","group","initialized","EditorLock","activeEditController","isActive","editController","activate","Error","commitCurrentEdit","cancelCurrentEdit","deactivate","offset","el","docElem","getBoundingClientRect","box","document","documentElement","top","pageYOffset","clientTop","left","pageXOffset","clientLeft","setStyleSize","style","val","isHidden","offsetWidth","offsetHeight","parents","selector","visible","hidden","parentNode","matches","show","type","Array","isArray","forEach","e","display","hide","slideAnimation","slideDirection","callback","jQuery","prototype","equals","getProto","Object","getPrototypeOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","call","isPlainObject","obj","proto","Ctor","constructor","Slick","Event","handlers","subscribe","fn","unsubscribe","i","length","splice","notify","scope","EventHandler","handler","unsubscribeAll","Range","fromRow","fromCell","toRow","toCell","Math","min","max","isSingleRow","isSingleCell","contains","row","cell","NonDataRow","RegexSanitizer","dirtyHtml","replace","BindingEventService","boundedEvents","destroy","unbindAll","bind","element","eventName","listener","options","addEventListener","unbind","removeEventListener","unbindByEventName","boundedEvent","find","pop","Utils","debounce","wait","timeoutId","clearTimeout","setTimeout","apply","extend","name","copy","copyIsArray","clone","arguments","deep","nodeType","item","src","calculateAvailableSpace","bottom","right","elementOffsetTop","windowHeight","innerHeight","windowWidth","innerWidth","pageScrollTop","scrollPosition","scrollLeft","scrollTop","pageScrollLeft","elmOffset","elementOffsetLeft","createDomElement","tagName","elementOptions","appendToParent","elm","createElement","keys","elmValue","elmOptionKey","assign","appendChild","emptyElement","firstChild","lastChild","removeChild","innerSize","size","side","sideSize","parseFloat","property","getComputedStyle","getPropertyValue","isEmptyObject","entries","noop","height","width","parent","child","every","p","toFloat","x","isNaN","slideUp","slideDown","storage","_storage","WeakMap","put","has","set","Map","get","remove","ret","delete","GlobalEditorLock","keyCode","SPACE","BACKSPACE","DELETE","DOWN","END","ENTER","ESCAPE","HOME","INSERT","LEFT","PAGE_DOWN","PAGE_UP","RIGHT","TAB","UP","A","preClickClassName","GridAutosizeColsMode","None","LegacyOff","LegacyForceFit","IgnoreViewport","FitColsToViewport","FitViewportToCols","ColAutosizeMode","Locked","Guide","Content","ContentExpandOnly","ContentIntelligent","RowSelectionMode","FirstRow","FirstNRows","AllRows","LastRow","ValueFilterMode","DeDuplicate","GetGreatestAndSub","GetLongestTextAndSub","GetLongestText","WidthEvalMode","Auto","TextOnly","HTML","global"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick.dataview.min.js b/dist/slick.dataview.min.js
deleted file mode 100644
index 1814a09d..00000000
--- a/dist/slick.dataview.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.dataview.js
- */
-Slick.Utils.extend(!0,Slick,{Data:{DataView:function(r){var i,o,l,a,P,s,u=this,g="id",c=[],d=[],f=new Map,h=null,p=null,m=null,j=!1,w=!1,v=new Map,_=!0,y={},B={},S=[],U=[],C=null,z={getter:null,formatter:null,comparer:function(e,t){return e.value===t.value?0:e.value>t.value?1:-1},predefinedValues:[],aggregators:[],aggregateEmpty:!1,aggregateCollapsed:!1,aggregateChildGroups:!1,collapsed:!1,displayTotalsRow:!0,lazyTotalsCalculation:!1},I=[],$=[],R=[],x=":|:",k=null,E=0,G=0,M=0,b=new Slick.Event,n=new Slick.Event,K=new Slick.Event,q=new Slick.Event,L=new Slick.Event,H=new Slick.Event,W=new Slick.Event,A=new Slick.Event,F=new Slick.Event;function D(e){if(!w&&f)for(var t,n=e=e||0,i=c.length;n>>1;-1===o(c[i],e)?t=1+i:n=i}return t}(e),e)}function ie(e,t){if(null==e)for(var n=0;nthis.max_)&&(this.max_=e)},this.storeResult=function(e){e.max||(e.max={}),e.max[this.field_]=this.max_}},Sum:function(e){this.field_=e,this.init=function(){this.sum_=null},this.accumulate=function(e){e=e[this.field_];null==e||""===e||isNaN(e)||(this.sum_+=parseFloat(e))},this.storeResult=function(e){e.sum||(e.sum={}),e.sum[this.field_]=this.sum_}},Count:function(e){this.field_=e,this.init=function(){},this.storeResult=function(e){e.count||(e.count={}),e.count[this.field_]=e.group.rows.length}}}}});
\ No newline at end of file
diff --git a/dist/slick.dataview.min.js.map b/dist/slick.dataview.min.js.map
deleted file mode 100644
index 4eade5e8..00000000
--- a/dist/slick.dataview.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["Slick","Utils","extend","Data","DataView","options","fastSortField","sortComparer","filterArgs","compiledFilter","compiledFilterWithCaching","preSelectedRowIdsChangeFn","self","this","idProperty","items","rows","idxById","Map","rowsById","filter","updated","suspend","isBulkSuspend","bulkDeleteIds","sortAsc","refreshHints","prevRefreshHints","filteredItems","filterCache","_grid","groupingInfoDefaults","getter","formatter","comparer","a","b","value","predefinedValues","aggregators","aggregateEmpty","aggregateCollapsed","aggregateChildGroups","collapsed","displayTotalsRow","lazyTotalsCalculation","groupingInfos","groups","toggledGroupsByLevel","groupingDelimiter","selectedRowIds","pagesize","pagenum","totalRows","onSelectedRowIdsChanged","Event","onSetItemsCalled","onRowCountChanged","onRowsChanged","onRowsOrCountChanged","onBeforePagingInfoChanged","onPagingInfoChanged","onGroupExpanded","onGroupCollapsed","updateIdxById","startingIndex","id","i","l","length","undefined","Error","set","ensureIdUniqueness","get","getPagingInfo","totalPages","Math","max","ceil","pageSize","pageNum","dataView","sort","ascending","reverse","refresh","fastSort","field","oldToString","Object","prototype","toString","setGrouping","groupingInfo","groupItemMetadataProvider","GroupItemMetadataProvider","Array","gi","idx","getterIsAFn","compiledAccumulators","aggregator","fnName","accumulate","accumulatorInfo","getFunctionInfo","fn","Function","params","body","displayName","name","setFunctionName","ensureRowsByIdCache","getItemById","updateSingleItem","item","has","newId","delete","updateItem","insertItem","insertBefore","splice","deleteItem","sortedAddItem","searchItem","low","high","mid","expandCollapseAllGroups","level","collapse","notify","groupingKey","expandCollapseGroup","extractGroups","parentGroup","group","val","r","groupsByVal","Group","count","addTotals","groupCollapsed","toggledGroups","g","addGroupTotals","title","calculateTotals","totals","agg","isLeafLevel","initialized","init","call","storeResult","GroupTotals","fnRegex","indexOf","matches","match","split","defineProperty","writable","err","uncompiledFilter","args","retval","ii","uncompiledFilterWithCaching","cache","recalc","_items","isFilterNarrowing","isFilterExpanding","batchFilter","inlineFilters","batchFilterWithCaching","isFilterUnchanged","concat","paged","floor","slice","newRows","diff","flattenGroupedRows","groupedRows","gl","j","jj","eitherIsNonData","from","to","ignoreDiffsBefore","min","ignoreDiffsAfter","rl","__group","equals","__groupTotals","previousPagingInfo","countBefore","totalRowsBefore","previous","current","itemCount","callingOnRowsChanged","calledOnRowCountChanged","rowsDiff","previousRowCount","currentRowCount","rowCountChanged","rowsChanged","getAllSelectedIds","getAllSelectedFilteredItems","isArray","some","beginUpdate","bulkUpdate","endUpdate","wasBulkSuspend","newIdx","destroy","onSelectedRowsChanged","onCellCssStylesChanged","unsubscribe","setPagingOptions","getReturnValue","getIdPropertyName","getItems","setItems","data","objectIdProperty","setFilter","filterFn","filterPath1","filterPath2","filterInfo","filterBody","replace","tpl","join","getFilter","getFilteredItems","getFilteredItemCount","reSort","getGrouping","groupBy","valueGetter","valueFormatter","setAggregators","groupAggregators","includeCollapsed","collapseAllGroups","expandAllGroups","collapseGroup","varArgs","arguments","arg0","expandGroup","getGroups","getAllSelectedItems","selectedData","forEach","push","getAllSelectedFilteredIds","map","setSelectedIds","selectedIds","isRowBeingAdded","shouldTriggerEvent","applyRowSelectionToGrid","selectedRows","mapIdsToRows","selectedRowsChangedArgs","grid","ids","added","assign","filteredIds","EventData","setSelectedRows","getIdxById","getRowByItem","getRowById","getItemByIdx","mapItemsToRows","itemArray","row","mapRowsToIds","rowArray","rowItem","idArray","setRefreshHints","hints","setFilterArgs","updateItems","newItems","insertItems","apply","addItem","addItems","deleteItems","indexesToDelete","sortedUpdateItem","oldItem","syncGridSelection","preserveHidden","preserveHiddenOnSelectionChange","inHandler","setSelectedRowIds","rowIds","getSelectedRows","subscribe","e","newSelectedRowIds","getOptions","multiSelect","syncGridCellCssStyles","key","hashById","storeCellCssStyles","hash","update","newHash","setCellCssStyles","getCellCssStyles","getItemCount","getLength","getItem","getItemMetadata","getGroupRowMetadata","getTotalsRowMetadata","Aggregators","Avg","field_","count_","nonNullCount_","sum_","isNaN","parseFloat","groupTotals","avg","Min","min_","Max","max_","Sum","sum","Count"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick.editors.min.js b/dist/slick.editors.min.js
deleted file mode 100644
index 2b3a31d9..00000000
--- a/dist/slick.editors.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.editors.js
- */
-!function(e){const u=Slick.Utils;function l(i){var n,t,e,o=this;function a(){var e=i.column.editorFixedDecimalPlaces;return(e=void 0===e?l.DefaultDecimalPlaces:e)||0===e?e:null}this.args=i,this.init=function(){e=i.grid.getOptions().editorCellNavOnLRKeys,(n=u.createDomElement("input",{type:"text",className:"editor-text"},i.container)).addEventListener("keydown.nav",e?s:r),n.focus(),n.select(),i.compositeEditorOptions&&n.addEventListener("change",this.onChange)},this.onChange=function(){var e=i.grid.getActiveCell();o.validate().valid&&o.applyValue(o.args.item,o.serializeValue()),o.applyValue(o.args.compositeEditorOptions.formValues,o.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:o.args.item,column:o.args.column,formValues:o.args.compositeEditorOptions.formValues})},this.destroy=function(){n.removeEventListener("keydown.nav",e?s:r),n.removeEventListener("change",this.onChange),n.remove()},this.focus=function(){n.focus()},this.loadValue=function(e){t=e[i.column.field];e=a();null!==e&&(t||0===t)&&t.toFixed&&(t=t.toFixed(e)),n.value=t,n.defaultValue=t,n.select()},this.serializeValue=function(){var e=parseFloat(n.value),t=(l.AllowEmptyValue?e||0===e||(e=""):e=e||0,a());return e=null!==t&&(e||0===e)&&e.toFixed?parseFloat(e.toFixed(t)):e},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===n.value&&null==t)&&n.value!=t},this.validate=function(){if(isNaN(n.value))return{valid:!1,msg:"Please enter a valid number"};if(i.column.validator){var e=i.column.validator(n.value,i);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()}function s(e){var t=this.selectionStart,i=this.value.length;(e.keyCode===Slick.keyCode.LEFT&&0{var e;i.compositeEditorOptions&&(e=i.grid.getActiveCell(),a.validate().valid&&a.applyValue(a.args.item,a.serializeValue()),a.applyValue(a.args.compositeEditorOptions.formValues,a.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:a.args.item,column:a.args.column,formValues:a.args.compositeEditorOptions.formValues}))}}),i.compositeEditorOptions||setTimeout(()=>{a.show(),a.focus()},50),u.width(t,u.width(t)-(i.compositeEditorOptions?28:18))},this.destroy=function(){a.hide(),o&&o.destroy(),t.remove()},this.show=function(){!i.compositeEditorOptions&&o&&o.open()},this.hide=function(){!i.compositeEditorOptions&&o&&o.close()},this.focus=function(){t.focus()},this.loadValue=function(e){n=e[i.column.field],t.value=n,t.defaultValue=n,t.select(),o&&o.setDate(n)},this.serializeValue=function(){return t.value},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===t.value&&null==n)&&t.value!=n},this.validate=function(){if(i.column.validator){var e=i.column.validator(t.value,i);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()},YesNoSelect:function(i){var t,n,o=this;this.args=i,this.init=function(){t=u.createDomElement("select",{tabIndex:0,className:"editor-yesno"},i.container),u.createDomElement("option",{value:"yes",textContent:"Yes"},t),u.createDomElement("option",{value:"no",textContent:"No"},t),t.focus(),i.compositeEditorOptions&&t.addEventListener("change",this.onChange)},this.onChange=function(){var e=i.grid.getActiveCell();o.validate().valid&&o.applyValue(o.args.item,o.serializeValue()),o.applyValue(o.args.compositeEditorOptions.formValues,o.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:o.args.item,column:o.args.column,formValues:o.args.compositeEditorOptions.formValues})},this.destroy=function(){t.removeEventListener("change",this.onChange),t.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){t.value=(n=e[i.column.field])?"yes":"no"},this.serializeValue=function(){return"yes"==t.value},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return t.value!=n},this.validate=function(){return{valid:!0,msg:null}},this.init()},Checkbox:function(i){var t,n,o=this;this.args=i,this.init=function(){(t=u.createDomElement("input",{className:"editor-checkbox",type:"checkbox",value:"true"},i.container)).focus(),i.compositeEditorOptions&&t.addEventListener("change",this.onChange)},this.onChange=function(){var e=i.grid.getActiveCell();o.validate().valid&&o.applyValue(o.args.item,o.serializeValue()),o.applyValue(o.args.compositeEditorOptions.formValues,o.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:o.args.item,column:o.args.column,formValues:o.args.compositeEditorOptions.formValues})},this.destroy=function(){t.removeEventListener("change",this.onChange),t.remove()},this.focus=function(){t.focus()},this.loadValue=function(e){n=!!e[i.column.field],t.checked=!!n},this.serializeValue=function(){return t.checked},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return this.serializeValue()!==n},this.validate=function(){return{valid:!0,msg:null}},this.init()},PercentComplete:function(i){function t(){o.value=this.value}function n(){var e;i.compositeEditorOptions&&(e=i.grid.getActiveCell(),r.validate().valid&&r.applyValue(r.args.item,r.serializeValue()),r.applyValue(r.args.compositeEditorOptions.formValues,r.serializeValue()),i.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:r.args.item,column:r.args.column,formValues:r.args.compositeEditorOptions.formValues}))}var o,a,l,s,r=this;this.args=i,this.init=function(){o=u.createDomElement("input",{className:"editor-percentcomplete",type:"text"},i.container),u.width(o,i.container.clientWidth-25),a=u.createDomElement("div",{className:"editor-percentcomplete-picker"},i.container);var e=u.createDomElement("div",{className:"editor-percentcomplete-helper"},a),e=u.createDomElement("div",{className:"editor-percentcomplete-wrapper"},e),e=(u.createDomElement("div",{className:"editor-percentcomplete-slider"},e),u.createDomElement("input",{className:"editor-percentcomplete-slider",type:"range"},e),u.createDomElement("div",{className:"editor-percentcomplete-buttons"},e)),e=(u.createDomElement("button",{value:"0",textContent:"Not started"},e),e.appendChild(document.createElement("br")),u.createDomElement("button",{value:"50",textContent:"In Progress"},e),e.appendChild(document.createElement("br")),u.createDomElement("button",{value:"100",textContent:"Complete"},e),o.focus(),o.select(),(s=a.querySelector("input.editor-percentcomplete-slider")).value=l,s.addEventListener("input",t),s.addEventListener("change",n),a.querySelectorAll(".editor-percentcomplete-buttons button"));[].forEach.call(e,e=>{e.addEventListener("click",this.onClick)})},this.onClick=function(){o.value=this.value,s.value=this.value},this.destroy=function(){s.removeEventListener("input",t),s.removeEventListener("change",n),a.querySelectorAll(".editor-percentcomplete-buttons button").forEach(e=>e.removeEventListener("click",this.onClick)),o.remove(),a.remove()},this.focus=function(){o.focus()},this.loadValue=function(e){l=e[i.column.field],s.value=l,o.value=l,o.select()},this.serializeValue=function(){return parseInt(o.value,10)||0},this.applyValue=function(e,t){e[i.column.field]=t},this.isValueChanged=function(){return!(""===o.value&&null==l)&&(parseInt(o.value,10)||0)!=l},this.validate=function(){return isNaN(parseInt(o.value,10))?{valid:!1,msg:"Please enter a valid positive number"}:{valid:!0,msg:null}},this.init()},LongText:function(n){var i,o,t,a=this;this.args=n,this.init=function(){var e=n.compositeEditorOptions,t=(n.grid.getOptions().editorCellNavOnLRKeys,e?n.container:document.body);o=u.createDomElement("div",{className:"slick-large-editor-text",style:{zIndex:1e4,background:"white",padding:"5px",border:"3px solid gray",borderRadius:"10px"}},t),e?(o.style.position="relative",u.setStyleSize(o,"padding",0),u.setStyleSize(o,"border",0)):o.style.position="absolute",i=u.createDomElement("textarea",{rows:5,style:{background:"white",width:"250px",height:"80px",border:"0",outline:"0"}},o),e?i.addEventListener("change",this.onChange):(t=u.createDomElement("div",{style:"text-align:right"},o),u.createDomElement("button",{id:"save",textContent:"Save"},t),u.createDomElement("button",{id:"cancel",textContent:"Cancel"},t),o.querySelector("#save").addEventListener("click",this.save),o.querySelector("#cancel").addEventListener("click",this.cancel),i.addEventListener("keydown",this.handleKeyDown),a.position(n.position)),i.focus(),i.select()},this.onChange=function(){var e=n.grid.getActiveCell();a.validate().valid&&a.applyValue(a.args.item,a.serializeValue()),a.applyValue(a.args.compositeEditorOptions.formValues,a.serializeValue()),n.grid.onCompositeEditorChange.notify({row:e.row,cell:e.cell,item:a.args.item,column:a.args.column,formValues:a.args.compositeEditorOptions.formValues})},this.handleKeyDown=function(e){var t,i;e.which==Slick.keyCode.ENTER&&e.ctrlKey?a.save():e.which==Slick.keyCode.ESCAPE?(e.preventDefault(),a.cancel()):e.which==Slick.keyCode.TAB&&e.shiftKey?(e.preventDefault(),n.grid.navigatePrev()):e.which==Slick.keyCode.TAB?(e.preventDefault(),n.grid.navigateNext()):e.which!=Slick.keyCode.LEFT&&e.which!=Slick.keyCode.RIGHT||n.grid.getOptions().editorCellNavOnLRKeys&&(t=this.selectionStart,i=this.value.length,e.keyCode===Slick.keyCode.LEFT&&0===t&&n.grid.navigatePrev(),e.keyCode===Slick.keyCode.RIGHT)&&i-1<=t&&n.grid.navigateNext()},this.save=function(){(n.grid.getOptions()||{}).autoCommitEdit?n.grid.getEditorLock().commitCurrentEdit():n.commitChanges()},this.cancel=function(){i.value=t,n.cancelChanges()},this.hide=function(){u.hide(o)},this.show=function(){u.show(o)},this.position=function(e){u.setStyleSize(o,"top",e.top-5),u.setStyleSize(o,"left",e.left-2)},this.destroy=function(){n.compositeEditorOptions?i.removeEventListener("change",this.onChange):(o.querySelector("#save").removeEventListener("click",this.save),o.querySelector("#cancel").removeEventListener("click",this.cancel),i.removeEventListener("keydown",this.handleKeyDown)),o.remove()},this.focus=function(){i.focus()},this.loadValue=function(e){i.value=t=e[n.column.field],i.select()},this.serializeValue=function(){return i.value},this.applyValue=function(e,t){e[n.column.field]=t},this.isValueChanged=function(){return!(""===i.value&&null==t)&&i.value!=t},this.validate=function(){if(n.column.validator){var e=n.column.validator(i.value,n);if(!e.valid)return e}return{valid:!0,msg:null}},this.init()}}}})}(window);
\ No newline at end of file
diff --git a/dist/slick.editors.min.js.map b/dist/slick.editors.min.js.map
deleted file mode 100644
index 39dd7ff7..00000000
--- a/dist/slick.editors.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["window","utils","Slick","Utils","FloatEditor","args","input","defaultValue","navOnLR","scope","this","getDecimalPlaces","rtn","column","editorFixedDecimalPlaces","DefaultDecimalPlaces","init","grid","getOptions","editorCellNavOnLRKeys","createDomElement","type","className","container","addEventListener","handleKeydownLRNav","handleKeydownLRNoNav","focus","select","compositeEditorOptions","onChange","activeCell","getActiveCell","validate","valid","applyValue","item","serializeValue","formValues","onCompositeEditorChange","notify","row","cell","destroy","removeEventListener","remove","loadValue","field","decPlaces","toFixed","value","parseFloat","AllowEmptyValue","state","isValueChanged","isNaN","msg","validator","validationResults","e","cursorPosition","selectionStart","textLength","length","keyCode","LEFT","RIGHT","stopImmediatePropagation","extend","Editors","Text","getValue","setValue","val","Integer","parseInt","Float","Flatpickr","flatpickr","Error","flatpickrInstance","closeOnSelect","allowInput","altInput","altFormat","dateFormat","setTimeout","show","width","hide","open","close","setDate","YesNoSelect","tabIndex","textContent","Checkbox","checked","PercentComplete","sliderInputHandler","sliderChangeHandler","picker","slider","clientWidth","containerHelper","containerWrapper","containerButtons","buttons","appendChild","document","createElement","querySelector","querySelectorAll","forEach","call","button","onClick","LongText","wrapper","body","style","zIndex","background","padding","border","borderRadius","position","setStyleSize","rows","height","outline","btnContainer","id","save","cancel","handleKeyDown","which","ENTER","ctrlKey","ESCAPE","preventDefault","TAB","shiftKey","navigatePrev","navigateNext","autoCommitEdit","getEditorLock","commitCurrentEdit","commitChanges","cancelChanges","top","left"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick.formatters.min.js b/dist/slick.formatters.min.js
deleted file mode 100644
index 3d38f333..00000000
--- a/dist/slick.formatters.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.formatters.js
- */
-Slick.Utils.extend(Slick,{Formatters:{PercentComplete:function(e,n,t,r,c){return null==t||""===t?"-":t<50?""+t+"% ":""+t+"% "},PercentCompleteBar:function(e,n,t,r,c){return null==t||""===t?"":" "},YesNo:function(e,n,t,r,c){return t?"Yes":"No"},Checkmark:function(e,n,t,r,c){return t?" ":""},Checkbox:function(e,n,t,r,c){return' '}}});
\ No newline at end of file
diff --git a/dist/slick.formatters.min.js.map b/dist/slick.formatters.min.js.map
deleted file mode 100644
index f70ecbd6..00000000
--- a/dist/slick.formatters.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["Slick","Utils","extend","Formatters","PercentComplete","row","cell","value","columnDef","dataContext","PercentCompleteBar","YesNo","Checkmark","Checkbox"],"mappings":";;;;;;;;AAoDEA,MAAMC,MAAMC,OAAOF,MAAO,CACxBG,WAAc,CACZC,gBA3CJ,SAAkCC,EAAKC,EAAMC,EAAOC,EAAWC,GAC7D,OAAa,MAATF,GAA2B,KAAVA,EACZ,IACEA,EAAQ,GACV,6CAA+CA,EAAQ,WAEvD,6BAA+BA,EAAQ,UAElD,EAoCIG,mBAlCJ,SAAqCL,EAAKC,EAAMC,EAAOC,EAAWC,GAChE,OAAa,MAATF,GAA2B,KAAVA,EACZ,GAaF,yDARHA,EAAQ,GACF,MACCA,EAAQ,GACT,SAEA,SAG+D,UAAYA,EAAQ,aAAeA,EAAQ,YACtH,EAmBII,MAjBJ,SAAwBN,EAAKC,EAAMC,EAAOC,EAAWC,GACnD,OAAOF,EAAQ,MAAQ,IACzB,EAgBIK,UAVJ,SAA4BP,EAAKC,EAAMC,EAAOC,EAAWC,GACvD,OAAOF,EAAQ,iCAAmC,EACpD,EASIM,SAfJ,SAA2BR,EAAKC,EAAMC,EAAOC,EAAWC,GACtD,MAAO,oDAAsDF,EAAQ,YAAc,aAAe,QACpG,CAeE,CACF,CAAC"}
\ No newline at end of file
diff --git a/dist/slick.grid.min.css b/dist/slick.grid.min.css
deleted file mode 100644
index 3b727ce8..00000000
--- a/dist/slick.grid.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.slick-header.ui-state-default, .slick-headerrow.ui-state-default, .slick-footerrow.ui-state-default, .slick-top-panel-scroller.ui-state-default, .slick-group-header.ui-state-default{width:100%;overflow:auto;position:relative;border-left:0px!important}.slick-header.ui-state-default{overflow:inherit;border-top:1px solid #d3d3d3}.slick-header::-webkit-scrollbar, .slick-headerrow::-webkit-scrollbar, .slick-footerrow::-webkit-scrollbar{display:none}.slick-header-columns, .slick-headerrow-columns, .slick-footerrow-columns, .slick-group-header-columns{position:relative;white-space:nowrap;cursor:default;overflow:hidden}.slick-header-column.ui-state-default, .slick-group-header-column.ui-state-default{position:relative;display:inline-block;box-sizing:content-box!important;overflow:hidden;text-overflow:ellipsis;height:16px;line-height:16px;margin:0;padding:4px;border-right:1px solid silver;border-left:0px!important;border-top:0px!important;border-bottom:0px!important;float:left;z-index:1}.slick-footerrow-column.ui-state-default{text-overflow:ellipsis;margin:0;padding:4px;border-right:1px solid silver;border-left:0px;border-top:0px;border-bottom:0px;float:left;line-height:20px;vertical-align:middle}.slick-headerrow-column.ui-state-default, .slick-footerrow-column.ui-state-default{padding:4px}.slick-header-column-sorted{font-style:italic}.slick-sort-indicator{display:inline-block;width:8px;height:5px;margin-left:4px;margin-top:6px;float:left}.slick-sort-indicator-numbered{display:inline-block;width:8px;height:5px;margin-left:4px;margin-top:0;line-height:20px;float:left;font-family:Arial;font-style:normal;font-weight:bold;color:#6190CD}.slick-sort-indicator-desc{background:url(images/sort-desc.gif)}.slick-sort-indicator-asc{background:url(images/sort-asc.gif)}.slick-resizable-handle{position:absolute;font-size:0.1px;display:block;cursor:col-resize;width:9px;right:-5px;top:0;height:100%;z-index:2}.slick-sortable-placeholder{background:silver}.grid-canvas{position:relative;outline:0}.slick-row.ui-widget-content, .slick-row.ui-state-active{position:absolute;border:0px;width:100%}.slick-cell, .slick-headerrow-column , .slick-footerrow-column{position:absolute;border:1px solid transparent;border-right:1px dotted silver;border-bottom-color:silver;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;z-index:1;padding:1px 2px 2px 1px;margin:0;white-space:nowrap;cursor:default}.slick-cell, .slick-headerrow-column{border-bottom-color:silver}.slick-footerrow-column{border-top-color:silver}.slick-group-toggle{display:inline-block}.slick-cell.highlighted{background:lightskyblue;background:rgba(0,0,255,0.2);transition:all 0.5s}.slick-cell.flashing{border:1px solid red!important}.slick-cell.editable{z-index:11;overflow:visible;background:white;border-color:black;border-style:solid}.slick-cell:focus{outline:none}.slick-reorder-proxy{display:inline-block;background:blue;opacity:0.15;filter:alpha(opacity = 15);cursor:move}.slick-reorder-guide{display:inline-block;height:2px;background:blue;opacity:0.7;filter:alpha(opacity = 70)}.slick-reorder-shadow-row{position:absolute;z-index:999999;box-shadow:rgba(0,0,0,0.2) 8px 2px 8px 4px,rgba(0,0,0,0.19) 2px 2px 0px 0px}.slick-selection{z-index:10;position:absolute;border:2px dashed black}.slick-pane{position:absolute;outline:0;overflow:hidden;width:100%}.slick-pane-header{display:block}.slick-header{overflow:hidden;position:relative}.slick-headerrow{overflow:hidden;position:relative}.slick-top-panel-scroller{overflow:hidden;position:relative}.slick-top-panel{width:10000px}.slick-viewport{position:relative;outline:0;width:100%}
\ No newline at end of file
diff --git a/dist/slick.grid.min.js b/dist/slick.grid.min.js
deleted file mode 100644
index 2644ac55..00000000
--- a/dist/slick.grid.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.grid.js
- */
-if("undefined"==typeof Slick)throw new Error('"slick.core.js" not loaded');!function(){"use strict";var fl,ml;Slick.Utils.extend(Slick,{Grid:function(e,x,N,I){var V,r,O,G,j,t={alwaysShowVerticalScroll:!1,alwaysAllowHorizontalScroll:!1,explicitInitialization:!1,rowHeight:25,defaultColumnWidth:80,enableAddRow:!1,leaveSpaceForNewRows:!1,editable:!1,autoEdit:!0,autoCommitEdit:!1,suppressActiveCellChangeOnEdit:!1,enableCellNavigation:!0,enableColumnReorder:!0,asyncEditorLoading:!1,asyncEditorLoadDelay:100,forceFitColumns:!1,enableAsyncPostRender:!1,asyncPostRenderDelay:50,enableAsyncPostRenderCleanup:!1,asyncPostRenderCleanupDelay:40,autoHeight:!1,editorLock:Slick.GlobalEditorLock,showColumnHeader:!0,showHeaderRow:!1,headerRowHeight:25,createFooterRow:!1,showFooterRow:!1,footerRowHeight:25,createPreHeaderPanel:!1,showPreHeaderPanel:!1,preHeaderPanelHeight:25,showTopPanel:!1,topPanelHeight:25,formatterFactory:null,editorFactory:null,cellFlashingCssClass:"flashing",selectedCellCssClass:"selected",multiSelect:!0,enableTextSelectionOnCells:!1,dataItemColumnValueExtractor:null,frozenBottom:!1,frozenColumn:-1,frozenRow:-1,frozenRightViewportMinWidth:100,fullWidthRows:!1,multiColumnSort:!1,numberedMultiColumnSort:!1,tristateMultiColumnSort:!1,sortColNumberInSeparateSpan:!1,defaultFormatter:function(e,t,o,n,i,l){return null==o?"":(o+"").replace(/&/g,"&").replace(//g,">")},forceSyncScrolling:!1,addNewRowCssClass:"new-row",preserveCopiedSelectionOnPaste:!1,showCellSelection:!0,viewportClass:null,minRowBuffer:3,emulatePagingWhenScrolling:!0,editorCellNavOnLRKeys:!1,enableMouseWheelScrollHandler:!0,doPaging:!0,autosizeColsMode:Slick.GridAutosizeColsMode.LegacyOff,autosizeColPaddingPx:4,autosizeTextAvgToMWidthRatio:.75,viewportSwitchToScrollModeWidthPercent:void 0,viewportMinWidthPx:void 0,viewportMaxWidthPx:void 0,suppressCssChangesOnHiddenInit:!1,ffMaxSupportedCssHeight:6e6,maxSupportedCssHeight:1e9,sanitizer:void 0,logSanitizedHtml:!1},n={name:"",resizable:!0,sortable:!1,minWidth:30,maxWidth:void 0,rerenderOnResize:!1,headerCssClass:null,defaultSortAsc:!0,focusable:!0,selectable:!0,hidden:!1},q={ignoreHeaderText:!1,colValueArray:void 0,allowAddlPercent:void 0,formatterOverride:void 0,autosizeMode:Slick.ColAutosizeMode.ContentIntelligent,rowSelectionModeOnInit:void 0,rowSelectionMode:Slick.RowSelectionMode.FirstNRows,rowSelectionCount:100,valueFilterMode:Slick.ValueFilterMode.None,widthEvalMode:Slick.WidthEvalMode.Auto,sizeToRemaining:void 0,widthPx:void 0,contentSizePx:0,headerWidthPx:0,colDataTypeOf:void 0},X=0,a=0,K=1;const W=Slick.Utils,U=W.show,l=W.hide;var D,_,$,Q,Y,Z,J,ee,te,oe,ne,ie,le,re,ae,se,de,ce,ue,he,fe,me,we,ge,ve,L,pe,g,Ce,ye,Se,be,xe,ke,Ee,ze,Re,Me,k,E,Ae,He,o,Pe,Ne,Ie,We,v=new Slick.BindingEventService,De=!1,p="slickgrid_"+Math.round(1e6*Math.random()),C=this,Le=[],y=[],Te=[],Be=0,Fe=0,Ve=0,z=!1,Oe=0,R=-1,Ge=0,je=0,qe=0,Xe=0,Ke=0,Ue=0,_e=1,M=null,s=null,A={},$e=0,Qe=0,Ye=0,d=0,Ze=0,Je=0,et=0,c=0,tt=[],ot=[],nt={},it={},u=[],lt=[],rt=[],at=!1,st=!1,dt=(Pe=Ln,{enqueue:function(){Ie?We=!0:ut()},dequeue:ct});function ct(){We=!1}function ut(){Ie=!0,setTimeout(ht,Ne),Pe()}function ht(){We?(ct(),ut()):Ie=!1}var ft,mt,wt,gt,vt,pt,Ct,yt,St,bt,xt,kt,Et,zt,Rt,Mt,At,Ht,Pt,Nt,It,Wt,h,Dt,f,Lt,Tt,Bt,Ft,Vt,m,w,Ot,Gt,jt,qt,Xt,Kt,Ut=null,_t=null,$t=null,S={},Qt=null,Yt=null,Zt=[],Jt=0,eo=0,to=0,oo={position:"absolute",visibility:"hidden",display:"block"},no=[],io=We=Ie=!(Ne=50),lo=!1,ro=null,ao=[],so=[];function co(){if(!De){De=!0,kn(),xn();{var o=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],n=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=y[0];Be=0,Fe=Ve=0;let e=W.createDomElement("div",{className:"ui-state-default slick-header-column",style:{visibility:"hidden"},textContent:"-"},i),t=getComputedStyle(e);"border-box"!=t["box-sizing"]&&"border-box"!=t["-moz-box-sizing"]&&"border-box"!=t["-webkit-box-sizing"]&&(o.forEach(function(e){Be+=W.toFloat(t[e])}),n.forEach(function(e){W.toFloat(t[e])}));e.remove();i=W.createDomElement("div",{className:"slick-row"},he[0]);e=W.createDomElement("div",{className:"slick-cell",id:"",style:{visibility:"hidden",textContent:"-"}},i),"border-box"!=(t=getComputedStyle(e))["box-sizing"]&&"border-box"!=t["-moz-box-sizing"]&&"border-box"!=t["-webkit-box-sizing"]&&(o.forEach(function(e){Fe+=W.toFloat(t[e])}),n.forEach(function(e){Ve+=W.toFloat(t[e])}));i.remove(),Ee=Math.max(Be,Fe)}y.forEach(function(e){e.setAttribute("unselectable","on"),e.style.MozUserSelect="none",v.bind(e,"selectstart.ui",function(){return!1})}),I.enableTextSelectionOnCells||ue.forEach(function(e){v.bind(e,"selectstart.ui",function(e){e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement})}),Wo(),Do(),To(),Lo(),en(),Ho(),Ro(),y.forEach(function(e){v.bind(e,"click",function(e){if(!lo&&!e.target.classList.contains("slick-resizable-handle")){var t=e.target.closest(".slick-header-column");if(t){var o=W.storage.get(t,"column");if(o.sortable&&P().commitCurrentEdit()){for(var t=u.slice(),n=null,i=0;i=R+(I.frozenBottom?0:1)?2:0)+(H()&&t>I.frozenColumn?1:0)]}function yo(){var e=W.createDomElement("div",{className:ue.className,style:{position:"absolute",top:"-10000px",left:"-10000px",overflow:"auto",width:"100px",height:"100px"}},document.body),t=W.createDomElement("div",{style:{width:"200px",height:"200px",overflow:"auto"}},e),o={width:e.offsetWidth-e.clientWidth,height:e.offsetHeight-e.clientHeight};return t.remove(),e.remove(),o}function So(){ye=Se=be=0;for(var e,t=!I.autoHeight,o=0,n=N.length;oI.frozenColumn?be+=e:Se+=e);return t&&(-1I.frozenColumn?be+=fl.width:Se+=fl.width),H()?(Se+=1e3,be=Math.max(be,L)+Se,be+=fl.width):(Se+=fl.width,Se=Math.max(Se,L)+1e3),ye=Se+be,Math.max(ye,L)+1e3}function bo(){var e=ke?L-fl.width:L,t=N.length;for(g=Ce=0;t--;)N[t]&&!N[t].hidden&&(H()&&t>I.frozenColumn?Ce+=N[t].width:g+=N[t].width);var o=g+Ce;return I.fullWidthRows&&0<(e=Math.max(o,e)-o)&&(o+=e,H()?Ce+=e:g+=e),o}function xo(e){var t=pe,o=g,n=Ce;if((t=(pe=bo())!==t||g!==o||Ce!==n)||H()||z)if(W.width(Tt,g),So(),W.width(St,Se),W.width(bt,be),H()){o=W.width(D)||0;if(0=L-fl.width,W.width(Z,pe+(ke?fl.width:0)),W.width(J,pe+(ke?fl.width:0)),I.createFooterRow&&(W.width(oe,pe+(ke?fl.width:0)),W.width(ne,pe+(ke?fl.width:0))),(t||e)&&Qo()}function ko(){return p}function Eo(e){return e?(e=T(e.id),!H()||e<=I.frozenColumn?St:bt):H()?y:St}function zo(){return ie}function Ro(){if(I.createFooterRow){ee.forEach(function(e){e.querySelectorAll(".slick-footerrow-column").forEach(function(e){var t=W.storage.get(e,"column");b(C.onBeforeFooterRowCellDestroy,{node:e,column:t,grid:C})})}),W.emptyElement(At),W.emptyElement(Ht);for(var e=0;eI.frozenColumn?Ht:At),(o=H()&&e<=I.frozenColumn?"frozen":null)&&t.classList.add(o),W.storage.put(t,"column",n),b(C.onFooterRowCellRendered,{node:t,column:n,grid:C}))}}}function Mo(e){e.target.classList.add("ui-state-hover")}function Ao(e){e.target.classList.remove("ui-state-hover")}function Ho(){y.forEach(function(e){e.querySelectorAll(".slick-header-column").forEach(function(e){var t=W.storage.get(e,"column");t&&b(C.onBeforeHeaderCellDestroy,{node:e,column:t,grid:C})})}),W.emptyElement(St),W.emptyElement(bt),So(),W.width(St,Se),W.width(bt,be),Q.forEach(function(e){e.querySelectorAll(".slick-headerrow-column").forEach(function(e){e=W.storage.get(e,"column");e&&b(C.onBeforeHeaderRowCellDestroy,{node:this,column:e,grid:C})})}),W.emptyElement(Rt),W.emptyElement(Mt),I.createFooterRow&&(At.querySelectorAll(".slick-footerrow-column").forEach(function(e){e=W.storage.get(e,"column");e&&b(C.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:C})}),W.emptyElement(At),H())&&(Ht.querySelectorAll(".slick-footerrow-column").forEach(function(e){e=W.storage.get(e,"column");e&&b(C.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:C})}),W.emptyElement(Ht));for(var t,i,e,o=0;oW.offset(m).left,i=t&&e.originalEvent.pageX>D.clientWidth?i||setInterval(d,100):t&&e.originalEvent.pageX=N.length||!N[e]||N[e].hidden||N[e].resizable&&(void 0===t&&(t=e),o=e);if(void 0!==t)for(let s=0;s=N.length||!N[s]||N[s].hidden||s=o||(i=W.createDomElement("div",{className:"slick-resizable-handle",role:"separator",ariaOrientation:"horizontal"},l),v.bind(i,"dblclick",Po),so.push(Slick.Resizable({resizeableElement:l,resizeableHandleElement:i,onResizeStart:function(e,t){e=e.touches?e.touches[0]:e;if(!P().commitCurrentEdit())return!1;h=e.pageX,w=0,t.resizeableElement.classList.add("slick-header-column-active");var o=null,n=null;for(let e=0;e=N.length||!N[e]||N[e].hidden||(N[e].previousWidth=r[e].offsetWidth);if(I.forceFitColumns)for(n=o=0,d=s+1;dI.frozenColumn?u.width:r+=u.width);if(I.forceFitColumns)for(n=-e,d=s+1;dI.frozenColumn?u.width:r+=u.width);else for(d=s+1;dI.frozenColumn?u.width:r+=u.width);if(I.forceFitColumns)for(n=-e,d=s+1;da?w:i):u.width=i,n=0));for(c=0;c<=s;c++)(u=N[c])&&!u.hidden&&(H()&&c>I.frozenColumn?u.width:r+=u.width);if(I.forceFitColumns)for(n=-e,d=s+1;dI.frozenColumn?u.width:r+=u.width);else for(d=s+1;dI.frozenColumn?u.width:r+=u.width)}H()&&r!=g&&(W.width(St,r+1e3),W.setStyleSize(mt,"left",r)),$o(),I.syncColumnCellResize&&Qo(),b(C.onColumnsDrag,{triggeredByColumn:t.resizeableElement,resizeHandle:t.resizeableHandleElement})},onResizeEnd:function(e,t){t.resizeableElement.classList.remove("slick-header-column-active");var o,t=t.resizeableElement.id.replace(p,"");for(!0===b(C.onBeforeColumnsResize,{triggeredByColumn:t}).getReturnValue()&&$o(),d=0;d '}),e=(fe=e.content.firstChild,document.head.appendChild(fe),I.rowHeight-Ve),t=["."+p+" .slick-group-header-column { left: 1000px; }","."+p+" .slick-header-column { left: 1000px; }","."+p+" .slick-top-panel { height:"+I.topPanelHeight+"px; }","."+p+" .slick-preheader-panel { height:"+I.preHeaderPanelHeight+"px; }","."+p+" .slick-headerrow-columns { height:"+I.headerRowHeight+"px; }","."+p+" .slick-footerrow-columns { height:"+I.footerRowHeight+"px; }","."+p+" .slick-cell { height:"+e+"px; }","."+p+" .slick-row { height:"+I.rowHeight+"px; }"],o=0;oI.viewportMaxWidthPx?(t=I.viewportMaxWidthPx,e=Slick.GridAutosizeColsMode.FitColsToViewport):I.viewportMinWidthPx&&tb*I.viewportSwitchToScrollModeWidthPercent/100||bw&&(m=r,w=Math.abs(r));m=""+m,m=Array(m.length+1).join("9"),u.valueArr=[m=+m],u.startIndex=u.endIndex=0}if(a.valueFilterMode===Slick.ValueFilterMode.GetLongestTextAndSub){for(l=u.startIndex;l<=u.endIndex;l++)((r=u.getRowVal(l))||"").length>d&&(d=r.length);r=Array(d+1).join("m"),s=I.autosizeTextAvgToMWidthRatio,u.maxLen=d,u.valueArr=[r],u.startIndex=u.endIndex=0}if(a.valueFilterMode===Slick.ValueFilterMode.GetLongestText){var g=d=0;for(l=u.startIndex;l<=u.endIndex;l++)((r=u.getRowVal(l))||"").length>d&&(d=r.length,g=l);r=u.getRowVal(g),u.maxLen=d,u.valueArr=[r],u.startIndex=u.endIndex=0}u.maxLen&&30e.maxWidth&&(a=e.maxWidth),(s.autosizeMode===Slick.ColAutosizeMode.ContentExpandOnly||e.editor&&e.editor.ControlFillsColumn)&&a!e.hidden)}function b(e,t,o){return o=o||new Slick.EventData(o,t),(t=t||{}).grid=C,e.notify(t,o,C)}function P(){return I.editorLock}function T(e){return it[e]}function $o(){if(De){let i=0,l=_o();y.forEach(function(t){for(let e=0;eI.frozenColumn?Ce:g)-o-e+"px",I.frozenColumn!=n&&(o+=N[n].width)),I.frozenColumn==n&&(o=0)}function Yo(o){let n=null;return y.every(function(e){var t=e.children.length;return ot.maxWidth&&(t.width=t.maxWidth)}}function on(e){b(C.onBeforeSetColumns,{previousColumns:N,newColumns:e,grid:C}),N=N=e,nn()}function nn(){tn(),en(),De&&(Do(),Lo(),vn(),Ho(),Ro(),Fo(),Bo(),En(),xo(),$o(),Qo(),Vn(),o)&&o.refreshSelections&&o.refreshSelections()}function ln(){I.autoHeight&&(I.leaveSpaceForNewRows=!1),I.forceFitColumns&&(I.autosizeColsMode=Slick.GridAutosizeColsMode.LegacyForceFit,console.log("forceFitColumns option is deprecated - use autosizeColsMode"))}function B(){return x.getLength?x.getLength():x&&x.length||0}function rn(){return B()+(I.enableAddRow&&(!at||st)?1:0)}function F(e){return x.getItem?x.getItem(e):x[e]}function an(e,t,o,n){n=!1!==n;I[e]!=o&&((I[e]=o)?n?W.slideDown(t,En):(U(t),En()):n?W.slideUp(t,En):(l(t),En()))}function sn(e,t){an("showColumnHeader",Le,e,t)}function dn(e){return I.rowHeight*e-a}function cn(e){return Math.floor((e+a)/I.rowHeight)}function un(e){e=Math.max(e,0),e=Math.min(e,V-W.height(w)+(xe||H()?fl.height:0));var t,o=a,e=(X=Math.min(G-1,Math.floor(e/O)),e-(a=Math.round(X*j)));if(a!=o)for(t in gn(Rn(e)),A){t=t?parseInt(t):0;W.setStyleSize("top",dn(t))}Ye!=e&&(K=Ye+o`),i&&e.push("[object Object]"!==Object.prototype.toString.call(s)?s:s.text),e.push(" "),A[t].cellRenderQueue.push(o),A[t].cellColSpans[o]=n}function gn(e){for(var t in A){var o=!0;z&&(I.frozenBottom&&R<=t||!I.frozenBottom&&t<=R)&&(o=!1),(t=parseInt(t,10))!==k&&(te.bottom)&&o&&pn(t)}I.enableAsyncPostRenderCleanup&&Wn()}function vn(){for(var e in s&&bi(),A)pn(e);I.enableAsyncPostRenderCleanup&&Wn()}function pn(e){var t=A[e];if(t){if(I.enableAsyncPostRenderCleanup&&S[e]){var o,n=t,i=S[e],l=e;for(o in Jt++,i)i.hasOwnProperty(o)&&Zt.push({actionType:"C",groupId:Jt,node:n.cellNodesByColumnIdx[0|o],columnIdx:0|o,rowIdx:l});Zt.push({actionType:"R",groupId:Jt,node:n.rowNode}),n.rowNode.forEach(function(e){e.remove()})}else t.rowNode.forEach(function(e){e.parentElement&&e.parentElement.removeChild(e)});delete A[e],delete S[e],$e--,to++}}function Cn(e){var t,o;if(e&&e.length){for(K=0,o=e.length,t=0;tL?fl.height:0),I.rowHeight*rn()+(-1==I.frozenColumn?e:0)):(e=I.showColumnHeader?W.toFloat(W.height(Le[0]))+Io(Le[0]):0,t=I.createPreHeaderPanel&&I.showPreHeaderPanel?I.preHeaderPanelHeight+Io(le):0,o=getComputedStyle(D),W.toFloat(o.height)-W.toFloat(o.paddingTop)-W.toFloat(o.paddingBottom)-e-Xe-Ke-Ue-t),Qe=Math.ceil(ve/I.rowHeight)}function kn(){L=parseFloat(W.innerSize(D,"width"))}function En(){var e;De&&(qe=je=Ge=0,kn(),xn(),z?je=I.frozenBottom?(Ge=ve-Oe-fl.height,Oe+fl.height):ve-(Ge=Oe):Ge=ve,Ge+=Xe+Ke+Ue,H()&&I.autoHeight&&(Ge+=fl.height),qe=Ge-Xe-Ke-Ue,I.autoHeight&&(H()&&(e=getComputedStyle(Ct),W.height(D,Ge+W.toFloat(e.height))),wt.style.position="relative"),W.setStyleSize(wt,"top",W.height(ft)||(I.showHeaderRow?I.headerRowHeight:0)+(I.showPreHeaderPanel?I.preHeaderPanelHeight:0)),W.height(wt,Ge),e=wt.offsetTop+Ge,I.autoHeight||W.height(h,qe),H()?(W.setStyleSize(gt,"top",W.height(ft)),W.height(gt,Ge),W.height(Dt,qe),z&&(W.setStyleSize(vt,"top",e),W.height(vt,je),W.setStyleSize(pt,"top",e),W.height(pt,je),W.height(Lt,je))):z&&(W.width(vt,"100%"),W.height(vt,je),W.setStyleSize(vt,"top",e)),z?(W.height(f,je),I.frozenBottom?(W.height(Ft,Oe),H()&&W.height(Vt,Oe)):(W.height(Tt,Oe),H()&&W.height(Bt,Oe))):W.height(Dt,qe),fl&&fl.width||(fl=yo()),I.autosizeColsMode===Slick.GridAutosizeColsMode.LegacyForceFit&&qo(),zn(),Vn(),Je=-1,Ln())}function zn(){if(De){var e,t=B(),o=rn(),n=0,o=(z&&!I.frozenBottom?W.height(Ft):W.height(Tt),n=z?B()-I.frozenRow:o+(I.leaveSpaceForNewRows?Qe-1:0),W.height(w)),i=ke,l=(ke=I.alwaysShowVerticalScroll||!I.autoHeight&&n*I.rowHeight>o,bi(),t-1);for(e in A)le.rightPx||rt[Math.min(N.length-1,o+n-1)]e.rightPx)break;null==(r=g.cellColSpans[c])&&(r=1,s&&"*"===(r=(l=s[N[c].id]||s[c])&&l.colspan||1)&&(r=u-c),rt[Math.min(u-1,c+r-1)]>e.leftPx)&&(wn(t,n,c,r,d),a++),c+=1I.frozenColumn?g.rowNode[1]:g.rowNode[0]).appendChild(f),g.cellNodesByColumnIdx[w]=f}function Nn(e){for(var t=[],o=[],n=[],i=!1,l=B(),r=e.top,a=e.bottom;r<=a;r++)if(!(A[r]||z&&I.frozenBottom&&r==B())){$e++,n.push(r),A[r]={rowNode:null,cellColSpans:[],cellNodesByColumnIdx:[],cellRenderQueue:[]},v=y=C=s=p=g=w=m=f=h=u=c=d=void 0;var s,d=t,c=o,u=r,h=e,f=l,m=F(u),f="slick-row"+(z&&u<=I.frozenRow?" frozen":"")+(u`;d.push(f),H()&&c.push(f);for(var v,p,C=0,y=N.length;Ch.leftPx){if(!s.alwaysRenderColumn&<[C]>h.rightPx)break;H()&&C>I.frozenColumn?wn(c,u,C,p,m):wn(d,u,C,p,m)}else(s.alwaysRenderColumn||H()&&C<=I.frozenColumn)&&wn(d,u,C,p,m);1"),H()&&c.push(""),M&&k===r&&(i=!0),eo++}if(n.length){for(var S=W.createDomElement("div",{innerHTML:hl(t.join(""))}),b=W.createDomElement("div",{innerHTML:hl(o.join(""))}),r=0,a=n.length;r=B()||t<0||t>=N.length)}function hi(e,t){for(var t=cn(t),o=0,n=0,i=0;ie.scrollTop&&t.tope.scrollLeft&&t.leftd+o+a?(un(t?n:i),Ln()):e*I.rowHeight=N.length)return null;for(;(t+=Ti(e,t))=t)return l;l=i}}function Gi(e,t,o){for(var n,i=rn();;){if(++e>=i)return null;for(n=t=0;t<=o;)t+=Ti(e,n=t);if(il(e,n))return{row:e,cell:n,posX:o}}}function ji(e,t,o){for(var n;;){if(--e<0)return null;for(n=t=0;t<=o;)t+=Ti(e,n=t);if(il(e,n))return{row:e,cell:n,posX:o}}}function qi(e,t,o){if(null==e&&null==t&&il(e=t=0,t))return{row:e,cell:t,posX:t};t=Vi(e,t);if(t)return t;var n,i=rn();for(e===i-1&&e--;++e=R||I.frozenBottom&&e.rowo?A[t].cellNodesByColumnIdx[o]:null}catch(e){return A[t].cellNodesByColumnIdx[o]}}return null}function il(e,t){return!(!I.enableCellNavigation||e>=rn()||e<0||t>=N.length||t<0||!N[t]||N[t].hidden||((e=x.getItemMetadata&&x.getItemMetadata(e))&&void 0!==e.focusable?!e.focusable:(e=e&&e.columns)&&e[N[t].id]&&void 0!==e[N[t].id].focusable?!e[N[t].id].focusable:e&&e[t]&&void 0!==e[t].focusable?!e[t].focusable:!N[t].focusable))}function ll(e,t){return!(e>=B()||e<0||t>=N.length||t<0||!N[t]||N[t].hidden||((e=x.getItemMetadata&&x.getItemMetadata(e))&&void 0!==e.selectable?!e.selectable:(e=e&&e.columns&&(e.columns[N[t].id]||e.columns[t]))&&void 0!==e.selectable?!e.selectable:!N[t].selectable))}function rl(e,t,o,n){var i;De&&il(e,t)&&P().commitCurrentEdit()&&(pi(e,t,!1),i=nl(e,t),t=N[t],t=!!(I.editable&&t&&t.editor&&I.suppressActiveCellChangeOnEdit),yi(i,o||e===B()||I.autoEdit,null,t,n),s||vi())}function al(){var e,t,o=F(k),n=N[E];if(s){if(s.isValueChanged())return(e=s.validate()).valid?(kB()||e<0||t>=N.length||t<0||I.enableCellNavigation&&(pi(e,t,!1),yi(nl(e,t),o,n,i))},setActiveRow:function(e,t,o){!De||e>B()||e<0||t>=N.length||t<0||(k=e,o)||pi(e,t||0,!1)},getActiveCellNode:function(){return M},getActiveCellPosition:Ri,resetActiveCell:gi,editActiveCell:xi,getCellEditor:function(){return s},getCellNode:nl,getCellNodeBox:function(e,t){if(!ui(e,t))return null;for(var o=mi(e),o=(e=dn(e)-o)+I.rowHeight-1,n=0,i=0;i':"")+""+o.title+" "):o.title},totalsFormatter:function(e,s,t,l,o,a){return l.groupTotalsFormatter&&l.groupTotalsFormatter(o,l,a)||""},includeHeaderTotals:!1},e);function t(e,s){var t,l=e.target,s=this.getDataItem(s.row);s&&s instanceof Slick.Group&&l.classList.contains(n.toggleCssClass)&&(t=o.getRenderedRange(),this.getData().setRefreshHints({ignoreDiffsBefore:t.top,ignoreDiffsAfter:t.bottom+1}),s.collapsed?this.getData().expandGroup(s.groupingKey):this.getData().collapseGroup(s.groupingKey),e.stopImmediatePropagation(),e.preventDefault()),s&&s instanceof Slick.Group&&l.classList.contains(n.checkboxSelectCssClass)&&(s.selectChecked=!s.selectChecked,l.classList.remove(s.selectChecked?"unchecked":"checked"),l.classList.add(s.selectChecked?"checked":"unchecked"),t=o.getData().mapItemsToRows(s.rows),(s.selectChecked?n.checkboxSelectPlugin.selectRows:n.checkboxSelectPlugin.deSelectRows)(t))}function l(e,s){var t,l;n.enableExpandCollapse&&e.which==Slick.keyCode.SPACE&&(t=this.getActiveCell())&&(t=this.getDataItem(t.row))&&t instanceof Slick.Group&&(l=o.getRenderedRange(),this.getData().setRefreshHints({ignoreDiffsBefore:l.top,ignoreDiffsAfter:l.bottom+1}),t.collapsed?this.getData().expandGroup(t.groupingKey):this.getData().collapseGroup(t.groupingKey),e.stopImmediatePropagation(),e.preventDefault())}return{init:function(e){(o=e).onClick.subscribe(t),o.onKeyDown.subscribe(l)},destroy:function(){o&&(o.onClick.unsubscribe(t),o.onKeyDown.unsubscribe(l))},getGroupRowMetadata:function(e){return e=e&&e.level,{selectable:!1,focusable:n.groupFocusable,cssClasses:n.groupCssClass+" slick-group-level-"+e,formatter:n.includeHeaderTotals&&n.totalsFormatter,columns:{0:{colspan:n.includeHeaderTotals?"1":"*",formatter:n.groupFormatter,editor:null}}}},getTotalsRowMetadata:function(e){return e=e&&e.group&&e.group.level,{selectable:!1,focusable:n.totalsFocusable,cssClasses:n.totalsCssClass+" slick-group-level-"+e,formatter:n.totalsFormatter,editor:null}},getOptions:function(){return n},setOptions:function(e){s.extend(!0,n,e)}}};
\ No newline at end of file
diff --git a/dist/slick.groupitemmetadataprovider.min.js.map b/dist/slick.groupitemmetadataprovider.min.js.map
deleted file mode 100644
index d0d059f8..00000000
--- a/dist/slick.groupitemmetadataprovider.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["Slick","Data","GroupItemMetadataProvider","inputOptions","utils","Utils","_grid","options","extend","checkboxSelect","checkboxSelectCssClass","checkboxSelectPlugin","groupCssClass","groupTitleCssClass","totalsCssClass","groupFocusable","totalsFocusable","toggleCssClass","toggleExpandedCssClass","toggleCollapsedCssClass","enableExpandCollapse","groupFormatter","row","cell","value","columnDef","item","grid","indentation","level","selectChecked","collapsed","title","totalsFormatter","groupTotalsFormatter","includeHeaderTotals","handleGridClick","e","args","rowIndexes","target","this","getDataItem","Group","classList","contains","range","getRenderedRange","getData","setRefreshHints","ignoreDiffsBefore","top","ignoreDiffsAfter","bottom","expandGroup","groupingKey","collapseGroup","stopImmediatePropagation","preventDefault","remove","add","mapItemsToRows","rows","selectRows","deSelectRows","handleGridKeyDown","which","keyCode","SPACE","activeCell","getActiveCell","init","onClick","subscribe","onKeyDown","destroy","unsubscribe","getGroupRowMetadata","groupLevel","selectable","focusable","cssClasses","formatter","columns","0","colspan","editor","getTotalsRowMetadata","group","getOptions","setOptions"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick.interactions.min.js b/dist/slick.interactions.min.js
deleted file mode 100644
index 0d74665b..00000000
--- a/dist/slick.interactions.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.interactions.js
- */
-Slick.Utils.extend(Slick,{Draggable:function(r){let{containerElement:e,onDragInit:a,onDragStart:n,onDrag:o,onDragEnd:i}=r,d,s,l,u,c,m;if(!(e=e||document)||"function"!=typeof e.addEventListener)throw new Error("[Slick.Draggable] You did not provide a valid container html element that will be used for dragging.");let v={dragSource:e,dragHandle:null};function h(e,t,n){"function"==typeof e&&e(t,n)}function t(e){d=e.target;var t,n=e.touches?e.touches[0]:e,o=n["target"];(!r.allowDragFrom||r.allowDragFrom&&d.matches(r.allowDragFrom))&&(v.dragHandle=d,t={left:window.pageXOffset||document.documentElement.scrollLeft||0,top:window.pageYOffset||document.documentElement.scrollTop||0},s=t.left+n.clientX,l=t.top+n.clientY,u=n.clientX-n.clientX,c=n.clientY-n.clientY,v=Object.assign(v,{deltaX:u,deltaY:c,startX:s,startY:l,target:o}),h(a,e,v),document.addEventListener("mousemove",E),document.addEventListener("touchmove",E),document.addEventListener("mouseup",f),document.addEventListener("touchend",f),document.addEventListener("touchcancel",f))}function E(e){var t=e.touches?e.touches[0]:e,t=(u=t.clientX-s,c=t.clientY-l,t)["target"];m||(v=Object.assign(v,{deltaX:u,deltaY:c,startX:s,startY:l,target:t}),h(n,e,v),m=!0),v=Object.assign(v,{deltaX:u,deltaY:c,startX:s,startY:l,target:t}),h(o,e,v)}function f(e){var t=e["target"];v=Object.assign(v,{target:t}),h(i,e,v),document.removeEventListener("mousemove",E),document.removeEventListener("touchmove",E),document.removeEventListener("mouseup",f),document.removeEventListener("touchend",f),document.removeEventListener("touchcancel",f),m=!1}return e&&(e.addEventListener("mousedown",t),e.addEventListener("touchstart",t)),{destroy:function(){e&&(e.removeEventListener("mousedown",t),e.removeEventListener("touchstart",t))}}},MouseWheel:function(e){let{element:t,onMouseWheel:a}=e;function n(e){var t=e||window.event;let n=0,o=0,r=0;t.wheelDelta&&(n=t.wheelDelta/120),t.detail&&(n=-t.detail/3),r=n,void 0!==t.axis&&t.axis===t.HORIZONTAL_AXIS&&(r=0,o=-1*n),void 0!==t.wheelDeltaY&&(r=t.wheelDeltaY/120),void 0!==t.wheelDeltaX&&(o=-1*t.wheelDeltaX/120),"function"==typeof a&&a(e,n,o,r)}return t.addEventListener("wheel",n),t.addEventListener("mousewheel",n),{destroy:function(){t.removeEventListener("wheel",n),t.removeEventListener("mousewheel",n)}}},Resizable:function(e){const{resizeableElement:n,resizeableHandleElement:o,onResizeStart:t,onResize:r,onResizeEnd:a}=e;if(o&&"function"==typeof o.addEventListener)return o.addEventListener("mousedown",d),o.addEventListener("touchstart",d),{destroy:function(){o&&"function"==typeof o.removeEventListener&&(o.removeEventListener("mousedown",d),o.removeEventListener("touchstart",d))}};throw new Error("[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.");function i(e,t){"function"==typeof e&&e(t,{resizeableElement:n,resizeableHandleElement:o})}function d(e){e.preventDefault();e=e.touches?e.changedTouches[0]:e;i(t,e),document.addEventListener("mousemove",s),document.addEventListener("mouseup",l),document.addEventListener("touchmove",s),document.addEventListener("touchend",l)}function s(e){e.preventDefault&&"touchmove"!==e.type&&e.preventDefault();e=e.touches?e.changedTouches[0]:e;"function"==typeof r&&(r(e,{resizeableElement:n,resizeableHandleElement:o}),r(e,{resizeableElement:n,resizeableHandleElement:o}))}function l(e){e=e.touches?e.changedTouches[0]:e;i(a,e),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",s),document.removeEventListener("touchend",l)}}});
\ No newline at end of file
diff --git a/dist/slick.interactions.min.js.map b/dist/slick.interactions.min.js.map
deleted file mode 100644
index fd07c2a6..00000000
--- a/dist/slick.interactions.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["filename"],"names":["Slick","Utils","extend","Draggable","options","let","containerElement","onDragInit","onDragStart","onDrag","onDragEnd","element","startX","startY","deltaX","deltaY","dragStarted","document","addEventListener","Error","originaldd","dragSource","dragHandle","executeDragCallbackWhenDefined","callback","e","dd","userPressed","event","target","winScrollPos","targetEvent","touches","allowDragFrom","matches","left","window","pageXOffset","documentElement","scrollLeft","top","pageYOffset","scrollTop","clientX","clientY","Object","assign","userMoved","userReleased","removeEventListener","destroy","MouseWheel","onMouseWheel","wheelHandler","orgEvent","delta","wheelDelta","detail","undefined","axis","HORIZONTAL_AXIS","wheelDeltaY","wheelDeltaX","Resizable","resizeableElement","resizeableHandleElement","onResizeStart","onResize","onResizeEnd","resizeStartHandler","executeResizeCallbackWhenDefined","preventDefault","changedTouches","resizingHandler","resizeEndHandler","type"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/slick.remotemodel-yahoo.min.js b/dist/slick.remotemodel-yahoo.min.js
deleted file mode 100644
index 6f78d590..00000000
--- a/dist/slick.remotemodel-yahoo.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * SlickGrid v4.0.1
- * (c) 2009-present Michael Leibman
- * homepage: http://github.com/mleibman/slickgrid
- * license: MIT
- * date: 2023-06-30
- * file: ./slick.remotemodel-yahoo.js
- */
-!function(v){v.extend(!0,window,{Slick:{Data:{RemoteModel:function(){var l=10,f={length:0},i=null,c=null,s=new Slick.Event,d=new Slick.Event;function r(e,o){if(c){c.abort();for(var t=c.fromPage;t<=c.toPage;t++)f[t*l]=void 0}e<0&&(e=0),0.slick-header-menubutton{display:inline-block}.slick-header-column .slick-header-menubutton{background-color:var(--alpine-header-bg-color,#f8f8f8);background-image:none;bottom:0;cursor:pointer;display:none;position:absolute;right:0;top:0;width:var(--alpine-header-menubutton-width,18px)}.slick-header-column .slick-header-menubutton .caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;display:inline-block;height:0;margin-left:4px;margin-top:7px;vertical-align:middle;width:0}.slick-header-column .slick-header-menubutton.filtered{color:var(--alpine-header-menubutton-filtered-color,#3490dc)}.slick-header-column.slick-header-column{align-items:var(--alpine-header-align-items,flex-start);border-color:var(--alpine-header-border-color,#dae1e7);border-style:solid;border-width:var(--alpine-header-border-width,0);display:var(--alpine-header-display,inline-flex);height:var(--alpine-header-column-height,calc(23px*var(--alpine-header-name-row-count, 1)));justify-content:var(--alpine-header-justify-content,flex-start);line-height:var(--alpine-header-column-line-height,23px);margin:0;overflow:hidden;padding:4px;position:relative;vertical-align:var(--alpine-header-vertical-align,top);white-space:pre-wrap}.slick-header-column .slick-sort-indicator,.slick-header-column .slick-sort-indicator-numbered{color:var(--alpine-sort-indicator-color,#3490dc);-webkit-user-select:none;-moz-user-select:none;user-select:none}.slick-header-column .slick-sort-indicator{background-image:none;border-left:4px solid transparent;border-right:4px solid transparent;display:inline-block;height:0;margin:var(--alpine-sort-indicator-margin,5px 0 0 3px);vertical-align:middle;width:0}.slick-header-column .slick-sort-indicator-asc{border-bottom:4px dashed}.slick-header-column .slick-sort-indicator-desc{border-top:4px dashed}.slick-header-column .slick-sort-indicator-numbered{font-size:var(--alpine-sort-numbered-font-size,10px)}.slick-header-columns{cursor:default;margin:0;overflow:hidden;padding:0;position:relative;white-space:nowrap}.slick-header-columns .slick-state-hover{background:var(--alpine-header-name-hover-bg-color,hsla(0,0%,74%,.267))}.slick-column-name,.slick-sort-indicator{display:inline-block;-webkit-user-select:none;-moz-user-select:none;user-select:none}.slick-column-name{display:var(--alpine-header-name-display,block);flex-grow:var(--alpine-header-name-flex-grow,0);overflow:var(--alpine-header-name-overflow,hidden);text-overflow:var(--alpine-header-name-text-overflow,ellipsis);white-space:nowrap}.slick-footerrow,.slick-headerrow{background-color:var(--alpine-header-footer-bg-color,#fff);position:relative}.slick-footerrow.slick-state-default,.slick-headerrow.slick-state-default{border-left:0;overflow:hidden;width:100%}.slick-footerrow-columns,.slick-headerrow-columns{cursor:default;overflow:hidden;position:relative;white-space:nowrap}.slick-headerrow-columns{background-color:var(--alpine-headerrow-bg-color,#f8fafc);border-bottom:1px solid var(--alpine-border-color,#dae1e7);text-align:center}.slick-footerrow-column,.slick-headerrow-column{cursor:default;padding:4px;position:absolute;vertical-align:middle;white-space:nowrap;z-index:1}.slick-footerrow-column{border-color:var(--alpine-footerrow-border-color,#dae1e7);border-radius:var(--alpine-footerrow-border-radius,0);border-style:solid;border-width:var(--alpine-footerrow-border-width,1px 1px 1px 0);float:left;font-size:var(--alpine-footerrow-font-size,12px);line-height:20px;margin:0;overflow:ellipsis}.slick-headerrow-column{box-sizing:border-box;height:100%;overflow:hidden}.slick-headerrow-column input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid transparent;box-sizing:border-box;color:var(--alpine-font-color,#181d1f);height:100%;width:100%}.slick-header-menu{background:var(--alpine-header-bg-color,#f8f8f8);border:1px solid var(--alpine-border-color,#dae1e7);border-bottom-left-radius:var(--alpine-border-radius,0);border-bottom-right-radius:var(--alpine-border-radius,0);box-shadow:0 2px 4px 0 rgba(0,0,0,.1);color:var(--alpine-font-color,#181d1f);cursor:default;display:inline-block;font-family:var(--alpine-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif);font-size:var(--alpine-font-size,13px);margin:0;min-width:175px;padding:4px!important;position:absolute;z-index:100000}.slick-header-menu label{font-weight:400}.slick-header-menu button{border:1px solid transparent;border-radius:.25rem;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:var(--alpine-font-size,13px);font-weight:400;line-height:1.428571429;margin:2px;outline:0;overflow:visible;padding:6px 14px;text-align:center;text-transform:none;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.slick-header-menu button,.slick-header-menu button:hover{background-color:transparent;color:var(--alpine-font-color,#181d1f)}.slick-header-menu button:hover{border-color:var(--alpine-border-color,#dae1e7)}.slick-header-menu button.active.focus,.slick-header-menu button.active:focus,.slick-header-menu button.active:hover,.slick-header-menu button:active.focus,.slick-header-menu button:active:focus,.slick-header-menu button:active:hover{background-color:transparent;border-color:var(--alpine-border-color,#dae1e7);color:var(--alpine-font-color,#181d1f)}.slick-header-menu input.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:var(--alpine-font-color,#181d1f);padding:.5rem .75rem;width:100%}.slick-header-menu .filter,.slick-header-menu input.input{border:1px solid var(--alpine-border-color,#dae1e7);border-radius:.25rem}.slick-header-menu .filter{background:var(--alpine-bg-color,#fff);height:200px;margin-bottom:5px;margin-top:5px;max-height:200px;max-width:300px;overflow:scroll;padding:4px;white-space:nowrap}.slick-header-menu .filter label{display:block;font-size:var(--alpine-font-size,13px)}.slick-header-menuitem-disabled{color:silver}.slick-header-menuitem{border:1px solid transparent;border-radius:.25rem;cursor:pointer;list-style:none;margin:0;padding:0}.slick-header-menuitem .slick-header-menuicon{background-position:50%;background-repeat:no-repeat;display:inline-block;height:16px;margin-right:4px;vertical-align:middle;width:16px}.slick-header-menuitem .slick-header-menuicon.sort-asc,.slick-header-menuitem .slick-header-menuicon.sort-desc{border-left:4px solid transparent;border-right:4px solid transparent;display:inline-block;height:0;margin-left:8px;margin-top:0;vertical-align:middle;width:0}.slick-header-menuitem .slick-header-menuicon.sort-asc{border-bottom:4px dashed}.slick-header-menuitem .slick-header-menuicon.sort-desc{border-top:4px dashed}.slick-header-menuitem:hover{border-color:var(--alpine-border-color,#dae1e7)}.slick-header-menucontent{display:inline-block;font-size:var(--alpine-font-size,13px);margin:5px;vertical-align:middle}.slick-pane{outline:0;overflow:hidden;position:absolute;width:100%}.slick-pane-header{display:block}.slick-pager{align-items:center;background-color:var(--alpine-pager-bg-color,#f8f8f8);border-color:var(--alpine-pager-border-color,#dae1e7);border-radius:var(--alpine-pager-border-radius,0);border-style:solid;border-width:var(--alpine-pager-border-width,0 1px 1px 1px);box-sizing:border-box;color:var(--alpine-font-color,#181d1f);display:inline-flex;font-family:var(--alpine-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif);font-size:var(--alpine-font-size,13px);height:var(--alpine-pager-height,40px);padding:4px;vertical-align:middle;width:100%}.slick-pager .sgi{cursor:pointer}.slick-pager .sgi.sgi-state-disabled,.slick-pager .slick-icon-state-disabled{cursor:var(--alpine-pager-button-cursor-disabled,default)}.slick-pager .slick-pager-nav{height:100%}.slick-pager .slick-pager-nav .slick-icon-container{margin:var(--alpine-pager-button-margin,0 2px)}.slick-pager .slick-pager-nav .sgi-container{align-items:center;display:inline-flex;height:100%}.slick-pager .slick-pager-settings,.slick-pager .slick-pager-status{display:inline-block;font-size:var(--alpine-font-size,13px);padding:var(--alpine-pager-padding,6px)}.slick-pager .slick-pager-settings{align-items:center;-moz-column-gap:1px;column-gap:1px;display:flex;float:right;margin-left:auto}.slick-pager .slick-pager-settings a{cursor:pointer;padding:0 2px 2px;text-decoration:underline}.percent-complete-bar{border-radius:3px;display:inline-block;height:6px}.slick-cell-menu,.slick-columnpicker,.slick-context-menu,.slick-gridmenu,.slick-header-menu{background-color:var(--alpine-menu-bg-color,#fbfbfb);border:var(--alpine-menu-border,1px solid #babfc7);border-radius:var(--alpine-menu-border-radius,2px);box-shadow:var(--alpine-menu-box-shadow,none);color:var(--alpine-menu-color,#181d1f);font-family:var(--alpine-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif);font-size:var(--alpine-font-size,13px)}.slick-cell-menu button.close,.slick-columnpicker button.close,.slick-context-menu button.close,.slick-gridmenu button.close,.slick-header-menu button.close{background:var(--alpine-menu-close-btn-background,transparent);border:var(--alpine-menu-close-btn-border,1px solid #babfc7);cursor:pointer}.slick-cell-menu,.slick-context-menu{box-sizing:content-box}.slick-cell.selected.editable{background-color:#fff;border-radius:var(--alpine-cell-editable-border-radius,3px)}.slick-cell.editable{box-shadow:var(--alpine-cell-editable-box-shadow,inset 0 0 0 2px #3490dc)}input.editor-checkbox,input.editor-percentcomplete,input.editor-text{border:0;height:100%;margin:0;outline:0;padding:0}input.editor-percentcomplete,input.editor-text{width:100%}input.editor-text{background:#fff}input.editor-percentcomplete{background:transparent;float:left}.editor-percentcomplete-picker{cursor:pointer;display:inline-block;overflow:visible;position:relative;z-index:1000}.editor-percentcomplete-picker .editor-percentcomplete-picker-icon{--alpine-percent-complete-picker-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z"/%3E%3C/svg%3E');background-color:currentColor;color:inherit;display:inline-block;font-size:18px;height:1em;-webkit-mask:var(--alpine-percent-complete-picker-icon-svg) no-repeat;mask:var(--alpine-percent-complete-picker-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%;width:1em}.editor-percentcomplete-picker:hover .editor-percentcomplete-helper{display:block}input[type=range].editor-percentcomplete-slider{background-color:#ccc;left:15px;position:absolute;top:125px;transform:rotate(270deg);transform-origin:left}.editor-percentcomplete-helper{display:none;height:140px;left:-9px;overflow:visible;padding-left:9px;position:absolute;top:-3px;width:120px}.editor-percentcomplete-wrapper{background:#f9f9f9;border:1px solid gray;height:98px;padding:20px 8px;position:relative;width:100%;width:120px}.editor-percentcomplete-buttons{float:right}.editor-percentcomplete-buttons button{margin-bottom:4px;width:80px}.editor-percentcomplete-slider{float:left}.editor-percentcomplete-helper:hover{display:block}select.editor-yesno{margin:0;vertical-align:middle;width:100%}.slick-composite-editor-modal,.slick-composite-editor-modal input,.slick-composite-editor-modal textarea{font-family:var(--alpine-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif)}.slick-large-editor-text{background:var(--alpine-large-editor-bg-color,#fff);border:var(--alpine-large-editor-border,2px solid #b0b0b0);border-radius:var(--alpine-large-editor-border-radius,8px);padding:5px;z-index:10000}.slick-large-editor-text button{margin-left:2px}.slick-large-editor-text button,.slick-large-editor-text textarea{color:var(--alpine-large-editor-color,#181d1f);font-family:var(--alpine-large-editor-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif);font-size:var(--alpine-large-editor-font-size,13px)}button.slick-btn{border:var(--alpine-button-border,1px solid #ccc);border-radius:var(--alpine-button-radius,2px);cursor:pointer;padding:var(--alpine-button-padding,2px 4px)}button.slick-btn.slick-btn-default{background-color:var(--alpine-button-bg-color,#fff)}button.slick-btn.slick-btn-primary{background-color:var(--alpine-button-primary-bg-color,#1f70b4);border-color:var(--alpine-button-primary-border-color,#1b609a);color:var(--alpine-button-primary-color,#fff)}
\ No newline at end of file
diff --git a/dist/styles/css/slick-default-theme.css b/dist/styles/css/slick-default-theme.css
new file mode 100644
index 00000000..d41299dd
--- /dev/null
+++ b/dist/styles/css/slick-default-theme.css
@@ -0,0 +1 @@
+.slick-header-columns{background-color:#ececec;border-bottom:1px solid silver}.slick-header-column{background-color:#ececec;border-right:1px solid silver}.slick-header-column-active,.slick-header-column:hover{background-color:#d9e8fb}.slick-headerrow{background:#fafafa}.slick-headerrow-column{background:#fafafa;border-bottom:0;height:100%}.slick-preheader-panel{border:1px solid #d3d3d3}.slick-row{background:#fff;border:0;line-height:20px;position:absolute}.slick-row.selected{background:#dfe8f6;z-index:10}.slick-cell{padding-left:4px;padding-right:4px}.slick-group{border-bottom:2px solid silver}.slick-group-toggle{background-color:currentColor;color:#454545;cursor:pointer;display:inline-block;font-size:15px;height:1em;margin-right:5px;width:1em}.slick-group .slick-cell{align-items:center;display:flex}.slick-group-toggle.expanded{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E')}.slick-group-toggle.collapsed,.slick-group-toggle.expanded{-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.slick-group-toggle.collapsed{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E')}.slick-group-totals{background:#fff;color:gray}.slick-group-select-checkbox{background-color:currentColor;color:#454545;cursor:pointer;display:inline-block;font-size:16px;height:1em;margin:3px 10px 0 2px;width:1em}.slick-group-select-checkbox.checked{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,5V19H5V5H19M10,17L6,13L7.41,11.58L10,14.17L16.59,7.58L18,9"/%3E%3C/svg%3E')}.slick-group-select-checkbox.checked,.slick-group-select-checkbox.unchecked{-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.slick-group-select-checkbox.unchecked{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z"/%3E%3C/svg%3E')}.slick-cell.selected{background-color:beige}.slick-cell.active{border-color:gray;border-style:solid}.slick-sortable-placeholder{background:#d9d9d9!important}.slick-row.odd{background:#fafafa}.slick-row.ui-state-active{background:#f5f7d7}.slick-row.loading{filter:alpha(opacity=50);opacity:.5}.slick-cell.invalid{-moz-animation-duration:.2s;-webkit-animation-duration:.2s;-moz-animation-name:slickgrid-invalid-hilite;-webkit-animation-name:slickgrid-invalid-hilite;border-color:red}
\ No newline at end of file
diff --git a/dist/styles/css/slick-icons.css b/dist/styles/css/slick-icons.css
new file mode 100644
index 00000000..7c0b0aad
--- /dev/null
+++ b/dist/styles/css/slick-icons.css
@@ -0,0 +1 @@
+.sgi-chevron-start{--sgi-chevron-start-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-chevron-start-icon-svg) no-repeat;mask:var(--sgi-chevron-start-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-chevron-left{--sgi-chevron-left-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M15.41 16.58 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.42Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-chevron-left-icon-svg) no-repeat;mask:var(--sgi-chevron-left-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-chevron-right{--sgi-chevron-right-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-chevron-right-icon-svg) no-repeat;mask:var(--sgi-chevron-right-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-chevron-end{--sgi-chevron-end-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M5.59 7.41 10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-chevron-end-icon-svg) no-repeat;mask:var(--sgi-chevron-end-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-cancel{--sgi-cancel-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-cancel-icon-svg) no-repeat;mask:var(--sgi-cancel-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-caret{--sgi-caret-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M7,10L12,15L17,10H7Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-caret-icon-svg) no-repeat;mask:var(--sgi-caret-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-check{--sgi-check-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-check-icon-svg) no-repeat;mask:var(--sgi-check-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-check-bold{--sgi-check-bold-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-check-bold-icon-svg) no-repeat;mask:var(--sgi-check-bold-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-close{--sgi-close-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-close-icon-svg) no-repeat;mask:var(--sgi-close-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-checkbox-outline{--sgi-checkbox-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,5V19H5V5H19M10,17L6,13L7.41,11.58L10,14.17L16.59,7.58L18,9"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-checkbox-outline-icon-svg) no-repeat;mask:var(--sgi-checkbox-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-checkbox-marked-outline{--sgi-checkbox-marked-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19H5V5H15V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V11H19M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-checkbox-marked-outline-icon-svg) no-repeat;mask:var(--sgi-checkbox-marked-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-checkbox-blank-outline{--sgi-checkbox-blank-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-checkbox-blank-outline-icon-svg) no-repeat;mask:var(--sgi-checkbox-blank-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-checkbox-intermediate{--sgi-checkbox-intermediate-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,19H5V5H19V19M17,17H7V7H17V17Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-checkbox-intermediate-icon-svg) no-repeat;mask:var(--sgi-checkbox-intermediate-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-coffee-outline{--sgi-coffee-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M2,21V19H20V21H2M20,8V5H18V8H20M20,3A2,2 0 0,1 22,5V8A2,2 0 0,1 20,10H18V13A4,4 0 0,1 14,17H8A4,4 0 0,1 4,13V3H20M16,5H6V13A2,2 0 0,0 8,15H14A2,2 0 0,0 16,13V5Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-coffee-outline-icon-svg) no-repeat;mask:var(--sgi-coffee-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-drag{--sgi-drag-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M7,19V17H9V19H7M11,19V17H13V19H11M15,19V17H17V19H15M7,15V13H9V15H7M11,15V13H13V15H11M15,15V13H17V15H15M7,11V9H9V11H7M11,11V9H13V11H11M15,11V9H17V11H15M7,7V5H9V7H7M11,7V5H13V7H11M15,7V5H17V7H15Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-drag-icon-svg) no-repeat;mask:var(--sgi-drag-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-drag-vertical{--sgi-drag-vertical-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M9,3H11V5H9V3M13,3H15V5H13V3M9,7H11V9H9V7M13,7H15V9H13V7M9,11H11V13H9V11M13,11H15V13H13V11M9,15H11V17H9V15M13,15H15V17H13V15M9,19H11V21H9V19M13,19H15V21H13V19Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-drag-vertical-icon-svg) no-repeat;mask:var(--sgi-drag-vertical-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-hashtag{--sgi-hashtag-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M5.41,21L6.12,17H2.12L2.47,15H6.47L7.53,9H3.53L3.88,7H7.88L8.59,3H10.59L9.88,7H15.88L16.59,3H18.59L17.88,7H21.88L21.53,9H17.53L16.47,15H20.47L20.12,17H16.12L15.41,21H13.41L14.12,17H8.12L7.41,21H5.41M9.53,9L8.47,15H14.47L15.53,9H9.53Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-hashtag-icon-svg) no-repeat;mask:var(--sgi-hashtag-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-help-circle-outline{--sgi-help-circle-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M11,18H13V16H11V18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,6A4,4 0 0,0 8,10H10A2,2 0 0,1 12,8A2,2 0 0,1 14,10C14,12 11,11.75 11,15H13C13,12.75 16,12.5 16,10A4,4 0 0,0 12,6Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-help-circle-outline-icon-svg) no-repeat;mask:var(--sgi-help-circle-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-information-outline{--sgi-information-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-information-outline-icon-svg) no-repeat;mask:var(--sgi-information-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-lightbulb{--sgi-lightbulb-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12 2a7 7 0 0 1 7 7c0 2.38-1.19 4.47-3 5.74V17a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-2.26C6.19 13.47 5 11.38 5 9a7 7 0 0 1 7-7M9 21v-1h6v1a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1m3-17a5 5 0 0 0-5 5c0 2.05 1.23 3.81 3 4.58V16h4v-2.42c1.77-.77 3-2.53 3-4.58a5 5 0 0 0-5-5Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-lightbulb-icon-svg) no-repeat;mask:var(--sgi-lightbulb-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-loading{--sgi-loading-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-loading-icon-svg) no-repeat;mask:var(--sgi-loading-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-menu{--sgi-menu-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-menu-icon-svg) no-repeat;mask:var(--sgi-menu-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-message-outline{--sgi-message-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2M20 16H5.2L4 17.2V4H20V16Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-message-outline-icon-svg) no-repeat;mask:var(--sgi-message-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-pencil-outline{--sgi-pencil-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-pencil-outline-icon-svg) no-repeat;mask:var(--sgi-pencil-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-minus-box-outline{--sgi-minus-box-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-minus-box-outline-icon-svg) no-repeat;mask:var(--sgi-minus-box-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-plus-box-outline{--sgi-plus-box-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-plus-box-outline-icon-svg) no-repeat;mask:var(--sgi-plus-box-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-search{--sgi-search-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-search-icon-svg) no-repeat;mask:var(--sgi-search-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-star{--sgi-star-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-star-icon-svg) no-repeat;mask:var(--sgi-star-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-star-outline{--sgi-star-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-star-outline-icon-svg) no-repeat;mask:var(--sgi-star-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-tag-outline{--sgi-tag-outline-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M21.41 11.58L12.41 2.58A2 2 0 0 0 11 2H4A2 2 0 0 0 2 4V11A2 2 0 0 0 2.59 12.42L11.59 21.42A2 2 0 0 0 13 22A2 2 0 0 0 14.41 21.41L21.41 14.41A2 2 0 0 0 22 13A2 2 0 0 0 21.41 11.58M13 20L4 11V4H11L20 13M6.5 5A1.5 1.5 0 1 1 5 6.5A1.5 1.5 0 0 1 6.5 5Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-tag-outline-icon-svg) no-repeat;mask:var(--sgi-tag-outline-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-undo{--sgi-undo-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-undo-icon-svg) no-repeat;mask:var(--sgi-undo-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi-user{--sgi-user-icon-svg:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1em" width="1em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"/%3E%3C/svg%3E');-webkit-mask:var(--sgi-user-icon-svg) no-repeat;mask:var(--sgi-user-icon-svg) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.sgi{background-color:currentColor;color:inherit;display:inline-block;font-size:18px;height:1em;width:1em}.sgi.sgi-state-disabled{opacity:.35}.sgi.sgi-10px{font-size:10px}.sgi.sgi-11px{font-size:11px}.sgi.sgi-12px{font-size:12px}.sgi.sgi-13px{font-size:13px}.sgi.sgi-14px{font-size:14px}.sgi.sgi-15px{font-size:15px}.sgi.sgi-16px{font-size:16px}.sgi.sgi-17px{font-size:17px}.sgi.sgi-18px{font-size:18px}.sgi.sgi-19px{font-size:19px}.sgi.sgi-20px{font-size:20px}.sgi.sgi-21px{font-size:21px}.sgi.sgi-22px{font-size:22px}.sgi.sgi-23px{font-size:23px}.sgi.sgi-24px{font-size:24px}.sgi.sgi-25px{font-size:25px}.sgi.sgi-26px{font-size:26px}.sgi.sgi-27px{font-size:27px}.sgi.sgi-28px{font-size:28px}.sgi.sgi-29px{font-size:29px}.sgi.sgi-30px{font-size:30px}.sgi.sgi-flip-h{transform:scaleX(-1)}.sgi.sgi-flip-v{transform:scaleY(-1)}.sgi.sgi-spin{align-items:center;animation:md-spin 2s linear infinite;display:inline-flex;justify-content:center}@keyframes md-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}
\ No newline at end of file
diff --git a/dist/styles/css/slick.cellmenu.css b/dist/styles/css/slick.cellmenu.css
new file mode 100644
index 00000000..a259d763
--- /dev/null
+++ b/dist/styles/css/slick.cellmenu.css
@@ -0,0 +1 @@
+.slick-cell-menu{background:#f0f0f0;border:1px solid #718bb7;box-shadow:2px 2px 2px silver;min-width:180px;overflow:auto;resize:both;z-index:2000}.slick-cell-menu-button{background-color:transparent;border:0;cursor:pointer;margin-top:5px;padding:0 2px;position:absolute;right:0;top:0;width:16px}.slick-cell-menu>.close{float:right}.slick-cell-menu .title{border-bottom:1px solid #d6d6d6;font-size:16px;margin-bottom:5px;width:calc(100% - 30px)}.slick-cell-menu li{background:none;list-style:none;margin:0;padding:0}.slick-cell-menu input{margin:4px}.slick-cell-menu li a{display:block;font-weight:700;padding:4px}.slick-cell-menu li a:hover{background:#fff}.slick-cell-menu-option-list{margin-bottom:10px}.slick-cell-menu{cursor:default;display:inline-block;margin:0;padding:6px;position:absolute}.slick-cell-menu-item{border:1px solid transparent;border-radius:3px;cursor:pointer;display:block;list-style:none;margin:0;padding:2px 4px}.slick-cell-menu-item:hover{background:#fff;border-color:silver}.slick-cell-menu-item-disabled{background:inherit!important;border-color:transparent!important;cursor:default}.slick-cell-menu-icon{background-position:50%;background-repeat:no-repeat;height:16px;margin-right:4px;width:16px}.slick-cell-menu-content,.slick-cell-menu-icon{display:inline-block;vertical-align:middle}.slick-cell-menu-item-disabled{color:silver}.slick-cell-menu-item-hidden,.slick-cell-menu-list li.hidden{display:none}.slick-cell-menu-item.slick-cell-menu-item-divider{background-color:#cecece;border:none;cursor:default;height:1px;margin:6px 2px;overflow:hidden;padding:0}.slick-cell-menu-item-divider.slick-cell-menu-item:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/styles/css/slick.columnpicker.css b/dist/styles/css/slick.columnpicker.css
new file mode 100644
index 00000000..043f7072
--- /dev/null
+++ b/dist/styles/css/slick.columnpicker.css
@@ -0,0 +1 @@
+.slick-columnpicker{background:#f0f0f0;border:1px solid #718bb7;box-shadow:2px 2px 2px silver;cursor:default;min-width:150px;overflow:auto;padding:6px;position:absolute;resize:both;z-index:20}.slick-columnpicker>.close{float:right}.slick-columnpicker .title{border-bottom:1px solid #d6d6d6;font-size:16px;margin-bottom:10px;width:60%}.slick-columnpicker li{background:none;list-style:none;margin:0;padding:0}.slick-columnpicker input{margin:4px}.slick-columnpicker li a{display:block;font-weight:700;padding:4px}.slick-columnpicker li a:hover{background:#fff}.slick-columnpicker-list li.hidden{display:none}
\ No newline at end of file
diff --git a/dist/styles/css/slick.contextmenu.css b/dist/styles/css/slick.contextmenu.css
new file mode 100644
index 00000000..ead410ec
--- /dev/null
+++ b/dist/styles/css/slick.contextmenu.css
@@ -0,0 +1 @@
+.slick-context-menu{background:#f0f0f0;border:1px solid #718bb7;box-shadow:2px 2px 2px silver;min-width:180px;overflow:auto;resize:both;z-index:2000}.slick-context-menu-button{background-color:transparent;border:0;cursor:pointer;margin-top:5px;padding:0 2px;position:absolute;right:0;top:0;width:16px}.slick-context-menu>.close{float:right}.slick-context-menu .title{border-bottom:1px solid #d6d6d6;font-size:16px;margin-bottom:5px;width:calc(100% - 30px)}.slick-context-menu li{background:none;list-style:none;margin:0;padding:0}.slick-context-menu input{margin:4px}.slick-context-menu li a{display:block;font-weight:700;padding:4px}.slick-context-menu li a:hover{background:#fff}.slick-context-menu-custom,.slick-context-menu-option-list{margin-bottom:10px}.slick-context-menu{cursor:default;display:inline-block;margin:0;padding:6px;position:absolute}.slick-context-menu-item{border:1px solid transparent;border-radius:3px;cursor:pointer;list-style:none;margin:0;padding:2px 4px}.slick-context-menu-item:hover{background:#fff;border-color:silver}.slick-context-menu-item-disabled{background:inherit!important;border-color:transparent!important;cursor:default}.slick-context-menu-icon{background-position:50%;background-repeat:no-repeat;height:16px;margin-right:4px;width:16px}.slick-context-menu-content,.slick-context-menu-icon{display:inline-block;vertical-align:middle}.slick-context-menu-item-disabled{color:silver}.slick-context-menu-item-hidden,.slick-context-menu-list li.hidden{display:none}.slick-context-menu-item.slick-context-menu-item-divider{background-color:#cecece;border:none;cursor:default;height:1px;margin:6px 2px;overflow:hidden;padding:0}.slick-context-menu-item-divider.slick-context-menu-item:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/styles/css/slick.customtooltip.css b/dist/styles/css/slick.customtooltip.css
new file mode 100644
index 00000000..cfac4f27
--- /dev/null
+++ b/dist/styles/css/slick.customtooltip.css
@@ -0,0 +1 @@
+.slick-custom-tooltip{background-color:#fff;border:2px solid #acacac;border-radius:4px;color:inherit;font-size:7.5pt;height:auto;overflow:inherit;padding:7px;position:absolute;text-overflow:ellipsis;white-space:normal;width:auto;z-index:9999}.slick-custom-tooltip.tooltip-arrow:after{border:transparent;border-style:solid;border-width:8px;content:"";left:0;position:absolute}.slick-custom-tooltip.tooltip-arrow.arrow-up:after{border-bottom-color:#bfbdbd;top:-16px}.slick-custom-tooltip.tooltip-arrow.arrow-down:after{border-top-color:#bfbdbd;top:100%}.slick-custom-tooltip.tooltip-arrow.arrow-left-align:after{margin-left:9px}.slick-custom-tooltip.tooltip-arrow.arrow-right-align:after{margin-left:calc(100% - 19px)}.slick-custom-tooltip.tooltip-arrow.arrow-center-align:after{margin-left:calc(50% - 8px)}
\ No newline at end of file
diff --git a/dist/styles/css/slick.draggablegrouping.css b/dist/styles/css/slick.draggablegrouping.css
new file mode 100644
index 00000000..bf7e44bd
--- /dev/null
+++ b/dist/styles/css/slick.draggablegrouping.css
@@ -0,0 +1 @@
+.slick-group-toggle-all{background-color:currentColor;color:#454545;cursor:pointer;display:inline-block;font-size:15px;height:1em;position:absolute;right:10px;width:1em}.slick-group-toggle-all.expanded{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M17,11V13H7V11H17Z"/%3E%3C/svg%3E')}.slick-group-toggle-all.collapsed,.slick-group-toggle-all.expanded{-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%}.slick-group-toggle-all.collapsed{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,19V5H5V19H19M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5C3,3.89 3.9,3 5,3H19M11,7H13V11H17V13H13V17H11V13H7V11H11V7Z"/%3E%3C/svg%3E')}.slick-column-groupable{display:inline-block;height:9px;margin-left:4px;width:9px}.slick-dropped-grouping{align-items:center;cursor:pointer;display:inline-flex;margin-right:5px;z-index:-1}.slick-groupby-remove{cursor:pointer;display:inline-flex;padding-right:5px}.slick-groupby-remove-image{--un-icon:url('data:image/svg+xml;utf8,%3Csvg viewBox="0 0 24 24" display="inline-block" height="1.2em" width="1.2em" vertical-align="text-bottom" xmlns="http://www.w3.org/2000/svg" %3E%3Cpath fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"/%3E%3C/svg%3E');background-color:currentColor;color:#f52f2f;display:inline-block;font-size:15px;height:1em;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask-size:100% 100%;width:1em}.slick-placeholder{font-size:11px;height:100%;width:100%}.slick-droppable-sortitem-hover{opacity:.5}.slick-dropzone{padding:4px}.slick-dropzone-hover{border:1px dashed #ff5f5f}.slick-dropzone-placeholder-hover{background-clip:border-box;background-color:#f3f3f3;color:#545454}
\ No newline at end of file
diff --git a/dist/styles/css/slick.grid.css b/dist/styles/css/slick.grid.css
new file mode 100644
index 00000000..e32f7b6e
--- /dev/null
+++ b/dist/styles/css/slick.grid.css
@@ -0,0 +1 @@
+.slick-footerrow.ui-state-default,.slick-group-header.ui-state-default,.slick-header.ui-state-default,.slick-headerrow.ui-state-default,.slick-top-panel-scroller.ui-state-default{border-left:0!important;overflow:auto;position:relative;width:100%}.slick-header.ui-state-default{border-top:1px solid #d3d3d3;overflow:inherit}.slick-footerrow::-webkit-scrollbar,.slick-header::-webkit-scrollbar,.slick-headerrow::-webkit-scrollbar{display:none}.slick-footerrow-columns,.slick-group-header-columns,.slick-header-columns,.slick-headerrow-columns{cursor:default;overflow:hidden;position:relative;white-space:nowrap}.slick-group-header-column.ui-state-default,.slick-header-column.ui-state-default{border-bottom:0!important;border-left:0!important;border-right:1px solid silver;border-top:0!important;box-sizing:content-box!important;display:inline-block;float:left;height:16px;line-height:16px;margin:0;overflow:hidden;padding:4px;position:relative;text-overflow:ellipsis;z-index:1}.slick-footerrow-column.ui-state-default{border:0;border-right:1px solid silver;float:left;line-height:20px;margin:0;padding:4px;text-overflow:ellipsis;vertical-align:middle}.slick-footerrow-column.ui-state-default,.slick-headerrow-column.ui-state-default{padding:4px}.slick-header-column-sorted{font-style:italic}.slick-sort-indicator{margin-top:6px}.slick-sort-indicator,.slick-sort-indicator-numbered{display:inline-block;float:left;height:5px;margin-left:4px;width:8px}.slick-sort-indicator-numbered{color:#6190cd;font-family:Arial;font-style:normal;font-weight:700;line-height:20px;margin-top:0}.slick-sort-indicator-asc{border-bottom:4px dashed;margin-bottom:8px}.slick-sort-indicator-asc,.slick-sort-indicator-desc{background-image:none;border-left:4px solid transparent;border-right:4px solid transparent;color:#3490dc;display:inline-block;height:0;margin-left:3px;margin-top:5px;vertical-align:middle;width:0}.slick-sort-indicator-desc{border-top:4px dashed;margin-bottom:5px}.slick-resizable-handle{cursor:col-resize;display:block;font-size:.1px;height:100%;position:absolute;right:-5px;top:0;width:9px;z-index:2}.slick-sortable-placeholder{background:silver}.grid-canvas{outline:0;position:relative}.slick-row.ui-state-active,.slick-row.ui-widget-content{border:0;position:absolute;width:100%}.slick-cell,.slick-footerrow-column,.slick-headerrow-column{border-right:1px solid transparent;border-color:transparent silver silver transparent;border-style:solid dotted solid solid;border-width:1px;cursor:default;margin:0;overflow:hidden;padding:1px 2px 2px 1px;position:absolute;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;z-index:1}.slick-cell,.slick-headerrow-column{border-bottom-color:silver}.slick-footerrow-column{border-top-color:silver}.slick-group-toggle{display:inline-block}.slick-cell.highlighted{background:#87cefa;background:rgba(0,0,255,.2);transition:all .5s}.slick-cell.flashing{border:1px solid red!important}.slick-cell.editable{background:#fff;border-color:#000;border-style:solid;overflow:visible;z-index:11}.slick-large-editor-text{background:#fff;border:2px solid gray;border-radius:10px;padding:5px;z-index:10000}.slick-cell:focus{outline:none}.slick-reorder-proxy{background:blue;cursor:move;display:inline-block;filter:alpha(opacity=15);opacity:.15}.slick-reorder-guide{background:blue;display:inline-block;filter:alpha(opacity=70);height:2px;opacity:.7}.slick-reorder-shadow-row{box-shadow:8px 2px 8px 4px rgba(0,0,0,.2),2px 2px 0 0 rgba(0,0,0,.19);position:absolute;z-index:999999}.slick-selection{border:2px dashed #000;position:absolute;z-index:10}.slick-pane{outline:0;overflow:hidden;position:absolute;width:100%}.slick-pane-header{display:block}.slick-header,.slick-headerrow,.slick-top-panel-scroller{overflow:hidden;position:relative}.slick-top-panel{width:10000px}.slick-viewport{outline:0;position:relative;width:100%}
\ No newline at end of file
diff --git a/dist/styles/css/slick.gridmenu.css b/dist/styles/css/slick.gridmenu.css
new file mode 100644
index 00000000..c5afd138
--- /dev/null
+++ b/dist/styles/css/slick.gridmenu.css
@@ -0,0 +1 @@
+.slick-gridmenu{background:#f0f0f0;border:1px solid #718bb7;box-shadow:2px 2px 2px silver;cursor:default;min-width:180px;overflow:auto;padding:6px;position:absolute;resize:both;z-index:2000}.slick-gridmenu-button{background-color:transparent;border:0;cursor:pointer;margin-top:5px;padding:0 2px;position:absolute;right:0;top:0;width:16px;z-index:1}.slick-gridmenu>.close{float:right}.slick-gridmenu .title{border-bottom:1px solid #d6d6d6;font-size:16px;margin-bottom:5px;width:calc(100% - 30px)}.slick-gridmenu li{background:none;list-style:none;margin:0;padding:0}.slick-gridmenu input{margin:4px}.slick-gridmenu li a{display:block;font-weight:700;padding:4px}.slick-gridmenu li a:hover{background:#fff}.slick-gridmenu-custom{margin-bottom:10px}.slick-gridmenu-{cursor:default;display:inline-block;margin:0;padding:2px;position:absolute}.slick-gridmenu-item{border:1px solid transparent;border-radius:3px;cursor:pointer;display:block;list-style:none;margin:0;padding:2px 4px}.slick-gridmenu-item:hover{background:#fff;border-color:silver}.slick-gridmenu-item-disabled{background:inherit!important;border-color:transparent!important;cursor:default}.slick-gridmenu-icon{background-position:50%;background-repeat:no-repeat;height:16px;margin-right:4px;width:16px}.slick-gridmenu-content,.slick-gridmenu-icon{display:inline-block;vertical-align:middle}.slick-gridmenu-item-disabled{color:silver}.slick-gridmenu-item-hidden,.slick-gridmenu-list li.hidden{display:none}.slick-gridmenu-item.slick-gridmenu-item-divider{background-color:#cecece;border:none;cursor:default;height:1px;margin:8px 2px;overflow:hidden;padding:0}.slick-gridmenu-item-divider.slick-gridmenu-item:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/styles/css/slick.headerbuttons.css b/dist/styles/css/slick.headerbuttons.css
new file mode 100644
index 00000000..9f9e4ef7
--- /dev/null
+++ b/dist/styles/css/slick.headerbuttons.css
@@ -0,0 +1 @@
+.slick-column-name,.slick-sort-indicator{display:inline-block;float:left;margin-bottom:100px}.slick-header-button{background-position:50%;background-repeat:no-repeat;cursor:pointer;display:inline-block;float:right;height:15px;margin:1px 1px 100px;vertical-align:top;width:15px}.slick-header-button-hidden{transition:width .2s;width:0}.slick-header-column:hover>.slick-header-button{width:15px}
\ No newline at end of file
diff --git a/dist/styles/css/slick.headermenu.css b/dist/styles/css/slick.headermenu.css
new file mode 100644
index 00000000..07155489
--- /dev/null
+++ b/dist/styles/css/slick.headermenu.css
@@ -0,0 +1 @@
+.slick-header-menubutton{background-image:none;border-left:thin ridge silver;bottom:0;cursor:pointer;display:none;position:absolute;right:0;top:0;width:14px}.slick-header-menubutton span.caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;display:inline-block;height:0;margin-left:4px;margin-top:7px;vertical-align:middle;width:0}.slick-header-column-active .slick-header-menubutton,.slick-header-column:hover>.slick-header-menubutton,.slick-header-menu{display:inline-block}.slick-header-menu{cursor:default;margin:0;padding:2px;position:absolute}.slick-header-menuitem{cursor:pointer;display:block;list-style:none;margin:0;padding:0}.slick-header-menuicon{background-position:50%;background-repeat:no-repeat;height:16px;margin-right:4px;width:16px}.slick-header-menucontent,.slick-header-menuicon{display:inline-block;vertical-align:middle}.slick-header-menuitem-disabled{color:silver}.slick-header-menuitem-hidden{display:none}.slick-header-menuitem.slick-header-menuitem-divider{background-color:#cecece;border:none;cursor:default;height:1px;margin:8px 2px;overflow:hidden;padding:0}.slick-header-menuitem-divider.slick-header-menuitem:hover{background-color:#cecece}
\ No newline at end of file
diff --git a/dist/styles/css/slick.pager.css b/dist/styles/css/slick.pager.css
new file mode 100644
index 00000000..735ee2dc
--- /dev/null
+++ b/dist/styles/css/slick.pager.css
@@ -0,0 +1 @@
+.slick-pager{background-color:#f8f8f8;border:1px solid gray;border-top:0;height:26px;vertical-align:middle;width:100%}.slick-pager .slick-pager-status{display:inline-block;padding:6px}.slick-pager .ui-icon-container{border-color:gray;display:inline-block;margin:0}.slick-pager .slick-pager-nav{display:inline-block;float:left;padding:2px}.slick-pager .slick-pager-settings{display:block;float:right;padding:2px}.slick-pager .slick-pager-settings *{vertical-align:middle}.slick-pager .slick-pager-settings a{cursor:pointer;padding:2px;text-decoration:underline}
\ No newline at end of file
diff --git a/dist/styles/css/slick.rowdetailview.css b/dist/styles/css/slick.rowdetailview.css
new file mode 100644
index 00000000..fcf09648
--- /dev/null
+++ b/dist/styles/css/slick.rowdetailview.css
@@ -0,0 +1 @@
+.detailView-toggle:not(.slick-cell){background-image:none;border-bottom:5px dashed;border-left:5px solid transparent;border-right:5px solid transparent;color:#6190cd;cursor:pointer;display:inline-block}.detailView-toggle.expand{height:0;transform:rotate(90deg);width:0}.detailView-toggle.collapse{height:0;transform:rotate(2700deg);width:0}.dynamic-cell-detail{background-color:#dae5e8;margin:0;overflow:auto;padding:0;position:absolute;width:100%;z-index:10000}.dynamic-cell-detail>:first-child{line-height:13px;vertical-align:middle}.dynamic-cell-detail>.detail-container{display:block!important;overflow:auto}
\ No newline at end of file
diff --git a/examples/example-0070-plugin-state.html b/examples/example-0070-plugin-state.html
index b763c735..d93962c8 100644
--- a/examples/example-0070-plugin-state.html
+++ b/examples/example-0070-plugin-state.html
@@ -4,28 +4,10 @@
SlickGrid example: Plugin: State
-
-
-
-
-
+
+
+
+
@@ -34,7 +16,10 @@
-
About
+
+ ⌂
+ About:
+
This example demonstrates using the Slick.State plugin persisting grid column width, order, visibility and sort order using Local Storage.
For this demo, we use Local Storage, but you could technically save this data into a database and reload at any time your previous session.
@@ -46,13 +31,14 @@
Options:
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+