@aquera/nile-elements 0.1.57-beta-1.8 → 0.1.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/demo/index.html +26 -10
- package/demo/index.js +0 -83
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +281 -275
- package/dist/nile-slider/index.cjs.js +2 -0
- package/dist/nile-slider/index.cjs.js.map +1 -0
- package/dist/nile-slider/index.esm.js +1 -0
- package/dist/nile-slider/nile-slider.cjs.js +2 -0
- package/dist/nile-slider/nile-slider.cjs.js.map +1 -0
- package/dist/nile-slider/nile-slider.css.cjs.js +2 -0
- package/dist/nile-slider/nile-slider.css.cjs.js.map +1 -0
- package/dist/nile-slider/nile-slider.css.esm.js +106 -0
- package/dist/nile-slider/nile-slider.esm.js +27 -0
- package/dist/nile-slider/nile-slider.template.cjs.js +2 -0
- package/dist/nile-slider/nile-slider.template.cjs.js.map +1 -0
- package/dist/nile-slider/nile-slider.template.esm.js +59 -0
- package/dist/nile-slider/types/nile-slider.enums.cjs.js +2 -0
- package/dist/nile-slider/types/nile-slider.enums.cjs.js.map +1 -0
- package/dist/nile-slider/types/nile-slider.enums.esm.js +1 -0
- package/dist/nile-slider/types/nile-slider.types.cjs.js +2 -0
- package/dist/nile-slider/types/nile-slider.types.cjs.js.map +1 -0
- package/dist/nile-slider/types/nile-slider.types.esm.js +1 -0
- package/dist/nile-slider/utils/nile-slider.utils.cjs.js +2 -0
- package/dist/nile-slider/utils/nile-slider.utils.cjs.js.map +1 -0
- package/dist/nile-slider/utils/nile-slider.utils.esm.js +1 -0
- package/dist/nile-table-body/index.cjs.js +1 -1
- package/dist/nile-table-body/index.esm.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
- package/dist/nile-table-body/nile-table-body.css.cjs.js +1 -1
- package/dist/nile-table-body/nile-table-body.css.cjs.js.map +1 -1
- package/dist/nile-table-body/nile-table-body.css.esm.js +2 -5
- package/dist/nile-table-body/nile-table-body.esm.js +2 -3
- package/dist/nile-table-cell-item/index.cjs.js +1 -1
- package/dist/nile-table-cell-item/index.esm.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.css.esm.js +3 -22
- package/dist/nile-table-cell-item/nile-table-cell-item.esm.js +3 -8
- package/dist/nile-table-header-item/index.cjs.js +1 -1
- package/dist/nile-table-header-item/index.esm.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.cjs.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.cjs.js.map +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js.map +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.css.esm.js +2 -6
- package/dist/nile-table-header-item/nile-table-header-item.esm.js +32 -64
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-slider/index.d.ts +1 -0
- package/dist/src/nile-slider/index.js +2 -0
- package/dist/src/nile-slider/index.js.map +1 -0
- package/dist/src/nile-slider/nile-slider.css.d.ts +6 -0
- package/dist/src/nile-slider/nile-slider.css.js +118 -0
- package/dist/src/nile-slider/nile-slider.css.js.map +1 -0
- package/dist/src/nile-slider/nile-slider.d.ts +48 -0
- package/dist/src/nile-slider/nile-slider.js +217 -0
- package/dist/src/nile-slider/nile-slider.js.map +1 -0
- package/dist/src/nile-slider/nile-slider.template.d.ts +5 -0
- package/dist/src/nile-slider/nile-slider.template.js +73 -0
- package/dist/src/nile-slider/nile-slider.template.js.map +1 -0
- package/dist/src/nile-slider/types/nile-slider.enums.d.ts +10 -0
- package/dist/src/nile-slider/types/nile-slider.enums.js +2 -0
- package/dist/src/nile-slider/types/nile-slider.enums.js.map +1 -0
- package/dist/src/nile-slider/types/nile-slider.types.d.ts +1 -0
- package/dist/src/nile-slider/types/nile-slider.types.js +2 -0
- package/dist/src/nile-slider/types/nile-slider.types.js.map +1 -0
- package/dist/src/nile-slider/utils/nile-slider.utils.d.ts +11 -0
- package/dist/src/nile-slider/utils/nile-slider.utils.js +99 -0
- package/dist/src/nile-slider/utils/nile-slider.utils.js.map +1 -0
- package/dist/src/nile-table-body/nile-table-body.css.js +0 -4
- package/dist/src/nile-table-body/nile-table-body.css.js.map +1 -1
- package/dist/src/nile-table-body/nile-table-body.d.ts +0 -2
- package/dist/src/nile-table-body/nile-table-body.js +0 -11
- package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js +1 -21
- package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js.map +1 -1
- package/dist/src/nile-table-cell-item/nile-table-cell-item.d.ts +0 -3
- package/dist/src/nile-table-cell-item/nile-table-cell-item.js +8 -27
- package/dist/src/nile-table-cell-item/nile-table-cell-item.js.map +1 -1
- package/dist/src/nile-table-header-item/nile-table-header-item.css.js +0 -5
- package/dist/src/nile-table-header-item/nile-table-header-item.css.js.map +1 -1
- package/dist/src/nile-table-header-item/nile-table-header-item.d.ts +0 -3
- package/dist/src/nile-table-header-item/nile-table-header-item.js +35 -86
- package/dist/src/nile-table-header-item/nile-table-header-item.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/index.ts +2 -1
- package/src/nile-slider/index.ts +1 -0
- package/src/nile-slider/nile-slider.css.ts +119 -0
- package/src/nile-slider/nile-slider.template.ts +77 -0
- package/src/nile-slider/nile-slider.ts +215 -0
- package/src/nile-slider/types/nile-slider.enums.ts +10 -0
- package/src/nile-slider/types/nile-slider.types.ts +13 -0
- package/src/nile-slider/utils/nile-slider.utils.ts +136 -0
- package/src/nile-table-body/nile-table-body.css.ts +0 -4
- package/src/nile-table-body/nile-table-body.ts +0 -10
- package/src/nile-table-cell-item/nile-table-cell-item.css.ts +1 -21
- package/src/nile-table-cell-item/nile-table-cell-item.ts +5 -22
- package/src/nile-table-header-item/nile-table-header-item.css.ts +0 -5
- package/src/nile-table-header-item/nile-table-header-item.ts +45 -94
- package/vscode-html-custom-data.json +138 -59
- package/dist/internal/resizable-table-helper.cjs.js +0 -2
- package/dist/internal/resizable-table-helper.cjs.js.map +0 -1
- package/dist/internal/resizable-table-helper.esm.js +0 -1
- package/dist/internal/resizable-table-styles.cjs.js +0 -2
- package/dist/internal/resizable-table-styles.cjs.js.map +0 -1
- package/dist/internal/resizable-table-styles.esm.js +0 -120
- package/dist/src/internal/resizable-table-helper.d.ts +0 -59
- package/dist/src/internal/resizable-table-helper.js +0 -111
- package/dist/src/internal/resizable-table-helper.js.map +0 -1
- package/dist/src/internal/resizable-table-styles.d.ts +0 -16
- package/dist/src/internal/resizable-table-styles.js +0 -137
- package/dist/src/internal/resizable-table-styles.js.map +0 -1
- package/src/internal/resizable-table-helper.ts +0 -151
- package/src/internal/resizable-table-styles.ts +0 -144
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"description": "Webcomponent nile-elements following open-wc recommendations",
|
4
4
|
"license": "MIT",
|
5
5
|
"author": "nile-elements",
|
6
|
-
"version": "0.1.57
|
6
|
+
"version": "0.1.57",
|
7
7
|
"main": "dist/src/index.js",
|
8
8
|
"type": "module",
|
9
9
|
"module": "dist/src/index.js",
|
@@ -86,7 +86,8 @@
|
|
86
86
|
"./nile-inline-edit": "./dist/src/nile-inline-edit/index.js",
|
87
87
|
"./nile-tour": "./dist/src/nile-tour/index.js",
|
88
88
|
"./nile-table": "./dist/src/nile-table/index.js",
|
89
|
-
"./nile-pagination": "./dist/src/nile-pagination/index.js"
|
89
|
+
"./nile-pagination": "./dist/src/nile-pagination/index.js",
|
90
|
+
"./nile-slider": "./dist/src/nile-slider/index.js"
|
90
91
|
},
|
91
92
|
"scripts": {
|
92
93
|
"analyze": "cem analyze --litelement",
|
@@ -190,5 +191,4 @@
|
|
190
191
|
"prettier --write"
|
191
192
|
]
|
192
193
|
}
|
193
|
-
}
|
194
|
-
|
194
|
+
}
|
package/src/index.ts
CHANGED
@@ -77,4 +77,5 @@ export { NileToolbar } from './nile-toolbar';
|
|
77
77
|
export { NileInlineEdit } from './nile-inline-edit';
|
78
78
|
export { NileTable } from './nile-table';
|
79
79
|
export { NileFilterChip } from './nile-filter-chip';
|
80
|
-
export {NilePagination } from './nile-pagination';
|
80
|
+
export {NilePagination } from './nile-pagination';
|
81
|
+
export { NileSlider } from './nile-slider';
|
@@ -0,0 +1 @@
|
|
1
|
+
export { NileSlider } from './nile-slider';
|
@@ -0,0 +1,119 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright Aquera Inc 2025
|
3
|
+
*
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
import { css } from 'lit';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Slider CSS
|
11
|
+
*/
|
12
|
+
export const styles = css`
|
13
|
+
:host {
|
14
|
+
display: block;
|
15
|
+
}
|
16
|
+
|
17
|
+
.container {
|
18
|
+
display: flex;
|
19
|
+
justify-content: center;
|
20
|
+
align-items: center;
|
21
|
+
gap: 10px;
|
22
|
+
height: 100px;
|
23
|
+
}
|
24
|
+
|
25
|
+
.align-item-center {
|
26
|
+
align-items: center;
|
27
|
+
}
|
28
|
+
|
29
|
+
slot.span {
|
30
|
+
font-size: var(--nile-font-size-micro);
|
31
|
+
margin-top: 14px;
|
32
|
+
}
|
33
|
+
|
34
|
+
.range-container {
|
35
|
+
display: flex;
|
36
|
+
flex-direction: column;
|
37
|
+
gap: var(--nile-spacing-sm);
|
38
|
+
}
|
39
|
+
|
40
|
+
.column-reverse {
|
41
|
+
flex-direction: column-reverse;
|
42
|
+
}
|
43
|
+
|
44
|
+
.label-container {
|
45
|
+
display: flex;
|
46
|
+
justify-content: space-between;
|
47
|
+
}
|
48
|
+
|
49
|
+
.label-container span {
|
50
|
+
margin: var(--nile-spacing-none);
|
51
|
+
padding: var(--nile-spacing-none);
|
52
|
+
font-size: var(--nile-font-size-micro);
|
53
|
+
}
|
54
|
+
|
55
|
+
.range {
|
56
|
+
position: relative;
|
57
|
+
width: 228px;
|
58
|
+
height: 4px;
|
59
|
+
background-color: var(--nile-colors-neutral-400);
|
60
|
+
user-select: none;
|
61
|
+
border-radius: var(--nile-radius-radius-3xl);
|
62
|
+
}
|
63
|
+
|
64
|
+
.range:hover {
|
65
|
+
cursor: pointer;
|
66
|
+
}
|
67
|
+
|
68
|
+
.range-completed {
|
69
|
+
position: absolute;
|
70
|
+
height: 100%;
|
71
|
+
width: 0%;
|
72
|
+
background-color: var(--nile-colors-primary-600);
|
73
|
+
top: 0px;
|
74
|
+
left: 0px;
|
75
|
+
z-index: 98;
|
76
|
+
border-radius: var(--nile-radius-radius-3xl);
|
77
|
+
}
|
78
|
+
|
79
|
+
.range-button {
|
80
|
+
height: 12px;
|
81
|
+
width: 12px;
|
82
|
+
background-color: var(--nile-colors-primary-600);
|
83
|
+
position: absolute;
|
84
|
+
top: 50%;
|
85
|
+
transform: translate(-50%, -50%);
|
86
|
+
border-radius: var(--nile-radius-radius-3xl);
|
87
|
+
left: 0;
|
88
|
+
z-index: 100;
|
89
|
+
box-shadow: rgba(0, 82, 145, 0.1) 0px 1px 2px 0px, rgba(0, 94, 166, 0.15) 0px 0px 0px 2px;
|
90
|
+
transition: box-shadow var(--nile-transition-duration-default) ease;
|
91
|
+
}
|
92
|
+
|
93
|
+
.range-button:hover, .range-button-two:hover {
|
94
|
+
cursor: pointer;
|
95
|
+
background-color: var(--nile-colors-primary-700);
|
96
|
+
}
|
97
|
+
|
98
|
+
.range-button:active, .range-button-two:active {
|
99
|
+
transition: box-shadow var(--nile-transition-duration-default) ease;
|
100
|
+
background-color: var(--nile-colors-primary-700);
|
101
|
+
box-shadow: rgba(0, 82, 145, 0.1) 0px 1px 2px 0px, rgba(0, 94, 166, 0.15) 0px 0px 0px 4px;
|
102
|
+
}
|
103
|
+
|
104
|
+
.range-button-two {
|
105
|
+
height: 12px;
|
106
|
+
width: 12px;
|
107
|
+
background-color: var(--nile-colors-primary-600);
|
108
|
+
position: absolute;
|
109
|
+
top: 50%;
|
110
|
+
transform: translate(-50%, -50%);
|
111
|
+
border-radius: var(--nile-radius-radius-3xl);
|
112
|
+
left: 100%;
|
113
|
+
z-index: 100;
|
114
|
+
box-shadow: rgba(0, 82, 145, 0.1) 0px 1px 2px 0px, rgba(0, 94, 166, 0.15) 0px 0px 0px 2px;
|
115
|
+
transition: box-shadow var(--nile-transition-duration-default) ease;
|
116
|
+
}
|
117
|
+
`;
|
118
|
+
|
119
|
+
export default [styles];
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import { TemplateResult, html } from 'lit';
|
2
|
+
import NileSlider from './nile-slider';
|
3
|
+
import { classMap } from 'lit/directives/class-map.js';
|
4
|
+
|
5
|
+
export const rangeSlider = (nileSlider: NileSlider): TemplateResult => {
|
6
|
+
return html`
|
7
|
+
<div>
|
8
|
+
<nile-tooltip
|
9
|
+
content=${nileSlider.rangeOneValue}
|
10
|
+
placement=${nileSlider.tooltipPosition}
|
11
|
+
>
|
12
|
+
<div
|
13
|
+
id="range-one"
|
14
|
+
class="range-button"
|
15
|
+
part="range-button"
|
16
|
+
role="slider"
|
17
|
+
tabindex="0"
|
18
|
+
aria-valuemin=${nileSlider.minValue}
|
19
|
+
aria-valuemax=${nileSlider.maxValue}
|
20
|
+
aria-valuenow=${nileSlider.rangeOneValue}
|
21
|
+
aria-label="Minimum value"
|
22
|
+
></div>
|
23
|
+
</nile-tooltip>
|
24
|
+
<nile-tooltip
|
25
|
+
content=${nileSlider.rangeTwoValue}
|
26
|
+
placement=${nileSlider.tooltipPosition}
|
27
|
+
>
|
28
|
+
<div
|
29
|
+
id="range-two"
|
30
|
+
class="range-button-two"
|
31
|
+
part="range-button-two"
|
32
|
+
role="slider"
|
33
|
+
tabindex="0"
|
34
|
+
aria-valuemin=${nileSlider.minValue}
|
35
|
+
aria-valuemax=${nileSlider.maxValue}
|
36
|
+
aria-valuenow=${nileSlider.rangeTwoValue}
|
37
|
+
aria-label="Maximum value"
|
38
|
+
></div>
|
39
|
+
</nile-tooltip>
|
40
|
+
</div>
|
41
|
+
`;
|
42
|
+
};
|
43
|
+
|
44
|
+
export const singleSlider = (nileSlider: NileSlider): TemplateResult => {
|
45
|
+
return html`
|
46
|
+
<div>
|
47
|
+
<nile-tooltip
|
48
|
+
content=${nileSlider.value}
|
49
|
+
placement=${nileSlider.tooltipPosition}
|
50
|
+
>
|
51
|
+
<div
|
52
|
+
class=${classMap({
|
53
|
+
'range-button': true,
|
54
|
+
'range-button-active': nileSlider.activeThumb === 'one',
|
55
|
+
})}
|
56
|
+
part="range-button"
|
57
|
+
role="slider"
|
58
|
+
tabindex="0"
|
59
|
+
aria-valuemin=${nileSlider.minValue}
|
60
|
+
aria-valuemax=${nileSlider.maxValue}
|
61
|
+
aria-valuenow=${nileSlider.value}
|
62
|
+
aria-label=${nileSlider.ariaLabel || "Slider value"}
|
63
|
+
></div>
|
64
|
+
</nile-tooltip>
|
65
|
+
</div>
|
66
|
+
`;
|
67
|
+
};
|
68
|
+
|
69
|
+
|
70
|
+
export const lableContaier = (nileSlider: NileSlider): TemplateResult => {
|
71
|
+
return html`
|
72
|
+
<div part="label-container" class="label-container">
|
73
|
+
<span id="label-start">${nileSlider.labelStart}</span>
|
74
|
+
<span id="label-end">${nileSlider.labelEnd}</span>
|
75
|
+
</div>
|
76
|
+
`;
|
77
|
+
};
|
@@ -0,0 +1,215 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright Aquera Inc 2025
|
3
|
+
*
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
|
8
|
+
import { styles } from './nile-slider.css';
|
9
|
+
import NileElement from '../internal/nile-element';
|
10
|
+
import { classMap } from 'lit/directives/class-map.js';
|
11
|
+
import { html, CSSResultArray, TemplateResult } from 'lit';
|
12
|
+
import { customElement, property } from 'lit/decorators.js';
|
13
|
+
import { TooltipPosition } from './types/nile-slider.types';
|
14
|
+
import { NileSliderEvents } from './types/nile-slider.enums';
|
15
|
+
import { rangeSlider, singleSlider, lableContaier } from './nile-slider.template';
|
16
|
+
import {
|
17
|
+
handleSingleSlider,
|
18
|
+
handleRangeOne,
|
19
|
+
handleRangeTwo,
|
20
|
+
getHtmlElements,
|
21
|
+
removeMoveListeners,
|
22
|
+
valueToPercent,
|
23
|
+
handleTwoThumbClick,
|
24
|
+
addMoveListeners
|
25
|
+
} from './utils/nile-slider.utils'
|
26
|
+
|
27
|
+
/**
|
28
|
+
* Nile slider component.
|
29
|
+
*
|
30
|
+
* @tag nile-slider
|
31
|
+
*/
|
32
|
+
@customElement('nile-slider')
|
33
|
+
export class NileSlider extends NileElement {
|
34
|
+
public static get styles(): CSSResultArray {
|
35
|
+
return [styles];
|
36
|
+
}
|
37
|
+
|
38
|
+
@property({ type: Number }) minValue: number = 0;
|
39
|
+
@property({ type: Number }) value: number = this.minValue;
|
40
|
+
@property({ type: Number }) maxValue: number = 100;
|
41
|
+
@property({ type: Number }) rangeOneValue: number = this.minValue;
|
42
|
+
@property({ type: Number }) rangeTwoValue: number = this.maxValue;
|
43
|
+
@property({ type: Boolean}) showLabel: boolean = false;
|
44
|
+
@property({ type: String }) labelStart: string = "";
|
45
|
+
@property({ type: String }) labelEnd: string = "";
|
46
|
+
@property({ type: Boolean}) rangeSlider: boolean = false;
|
47
|
+
@property({ type: String }) labelPosition: string = "top";
|
48
|
+
@property({ type: String }) tooltipPosition: TooltipPosition = "top";
|
49
|
+
|
50
|
+
public buttonOne!: HTMLElement;
|
51
|
+
public buttonTwo!: HTMLElement;
|
52
|
+
public range!: HTMLElement;
|
53
|
+
public completed!: HTMLElement;
|
54
|
+
public activeThumb: 'one' | 'two' | null = null;
|
55
|
+
|
56
|
+
connectedCallback(): void {
|
57
|
+
super.connectedCallback();
|
58
|
+
this.emit(NileSliderEvents.NILE_INIT);
|
59
|
+
|
60
|
+
if(this.rangeSlider) {
|
61
|
+
this.checkRangeValidity();
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
firstUpdated(changedProps: Map<string, any>): void {
|
66
|
+
getHtmlElements(this);
|
67
|
+
|
68
|
+
if (!this.rangeSlider && changedProps.has('value')) {
|
69
|
+
this.value = this.checkValueValidity(this.value, this.minValue, this.maxValue);
|
70
|
+
const percent = valueToPercent(this.value, this);
|
71
|
+
|
72
|
+
this.buttonOne.style.left = `${percent}%`;
|
73
|
+
this.completed.style.width = `${percent}%`;
|
74
|
+
} else if (this.rangeSlider) {
|
75
|
+
|
76
|
+
const percentOne = valueToPercent(this.rangeOneValue, this);
|
77
|
+
const percentTwo = valueToPercent(this.rangeTwoValue, this);
|
78
|
+
|
79
|
+
if (this.buttonOne) this.buttonOne.style.left = `${percentOne}%`;
|
80
|
+
if (this.buttonTwo) this.buttonTwo.style.left = `${percentTwo}%`;
|
81
|
+
|
82
|
+
const left = Math.min(percentOne, percentTwo);
|
83
|
+
const width = Math.abs(percentTwo - percentOne);
|
84
|
+
|
85
|
+
this.completed.style.left = `${left}%`;
|
86
|
+
this.completed.style.width = `${width}%`;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
checkValueValidity(value: number, min: number, max: number): number {
|
91
|
+
if(max - min <= 1) {
|
92
|
+
return Math.max(min, Math.min(value, max));
|
93
|
+
}
|
94
|
+
return Math.floor(Math.max(min, Math.min(value, max)));
|
95
|
+
}
|
96
|
+
|
97
|
+
checkRangeValidity(): void {
|
98
|
+
if(this.rangeTwoValue > this.maxValue) {
|
99
|
+
this.rangeTwoValue = this.maxValue;
|
100
|
+
} else if(this.rangeTwoValue < this.rangeOneValue) {
|
101
|
+
this.rangeTwoValue = this.rangeOneValue;
|
102
|
+
}
|
103
|
+
|
104
|
+
if(this.rangeOneValue < this.minValue) {
|
105
|
+
this.rangeOneValue = this.minValue;
|
106
|
+
} else if(this.rangeOneValue > this.rangeTwoValue) {
|
107
|
+
this.rangeOneValue = this.rangeTwoValue;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
public onMouseMove = (e: MouseEvent): void => {
|
112
|
+
const rect = this.range.getBoundingClientRect();
|
113
|
+
|
114
|
+
if (!this.rangeSlider) {
|
115
|
+
handleSingleSlider(e, rect, this);
|
116
|
+
} else {
|
117
|
+
if (this.activeThumb === 'one') {
|
118
|
+
handleRangeOne(e, rect, this);
|
119
|
+
} else if (this.activeThumb === 'two') {
|
120
|
+
handleRangeTwo(e, rect, this);
|
121
|
+
}
|
122
|
+
|
123
|
+
const start = valueToPercent(this.rangeOneValue, this);
|
124
|
+
const end = valueToPercent(this.rangeTwoValue, this);
|
125
|
+
const left = Math.min(start, end);
|
126
|
+
const width = Math.abs(end - start);
|
127
|
+
|
128
|
+
if(this.rangeTwoValue >= this.rangeOneValue) {
|
129
|
+
this.completed.style.left = `${left}%`;
|
130
|
+
this.completed.style.width = `${width}%`;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
};
|
134
|
+
|
135
|
+
public onMouseUp = (): void => {
|
136
|
+
if(!this.rangeSlider) this.emit(NileSliderEvents.NILE_CHANGE_END, { value: this.value });
|
137
|
+
else {
|
138
|
+
this.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE_END, { value: this.rangeOneValue });
|
139
|
+
this.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE_END, { value: this.rangeTwoValue });
|
140
|
+
}
|
141
|
+
this.activeThumb = null;
|
142
|
+
removeMoveListeners(this);
|
143
|
+
};
|
144
|
+
|
145
|
+
public onMouseDown = (e: MouseEvent): void => {
|
146
|
+
const rect = this.range.getBoundingClientRect();
|
147
|
+
const clickX = e.clientX - rect.left;
|
148
|
+
const percent = (clickX / rect.width) * 100;
|
149
|
+
const value = this.minValue + (percent / 100) * (this.maxValue - this.minValue);
|
150
|
+
|
151
|
+
if (!this.rangeSlider) {
|
152
|
+
handleSingleSlider(e, rect, this);
|
153
|
+
this.activeThumb = 'one';
|
154
|
+
addMoveListeners(this);
|
155
|
+
} else {
|
156
|
+
handleTwoThumbClick(value, this);
|
157
|
+
const distToOne = Math.abs(value - this.rangeOneValue);
|
158
|
+
const distToTwo = Math.abs(value - this.rangeTwoValue);
|
159
|
+
this.activeThumb = distToOne <= distToTwo ? 'one' : 'two';
|
160
|
+
addMoveListeners(this);
|
161
|
+
}
|
162
|
+
};
|
163
|
+
|
164
|
+
public render(): TemplateResult {
|
165
|
+
const hasLabels = this.showLabel;
|
166
|
+
const ariaLabelledby = hasLabels ? 'label-start label-end' : undefined;
|
167
|
+
|
168
|
+
return html`
|
169
|
+
<div
|
170
|
+
part="base"
|
171
|
+
class=${classMap({
|
172
|
+
'container': true,
|
173
|
+
'align-item-center': !hasLabels
|
174
|
+
})}
|
175
|
+
>
|
176
|
+
<slot class="span" name="prefix"></slot>
|
177
|
+
|
178
|
+
<div
|
179
|
+
part="range-container"
|
180
|
+
class=${classMap({
|
181
|
+
'range-container': true,
|
182
|
+
'column-reverse': this.labelPosition === 'bottom'
|
183
|
+
})}
|
184
|
+
>
|
185
|
+
${hasLabels ? lableContaier(this) : html``}
|
186
|
+
|
187
|
+
<div
|
188
|
+
class="range"
|
189
|
+
part="range"
|
190
|
+
role="group"
|
191
|
+
aria-labelledby=${ariaLabelledby}
|
192
|
+
>
|
193
|
+
<span class="range-completed" part="range-completed"></span>
|
194
|
+
${this.rangeSlider ? rangeSlider(this) : singleSlider(this)}
|
195
|
+
</div>
|
196
|
+
</div>
|
197
|
+
|
198
|
+
<slot class="span" name="suffix"></slot>
|
199
|
+
</div>
|
200
|
+
`;
|
201
|
+
}
|
202
|
+
|
203
|
+
disconnectedCallback(): void {
|
204
|
+
super.disconnectedCallback();
|
205
|
+
this.emit(NileSliderEvents.NILE_DESTROY);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
export default NileSlider;
|
210
|
+
|
211
|
+
declare global {
|
212
|
+
interface HTMLElementTagNameMap {
|
213
|
+
'nile-slider': NileSlider;
|
214
|
+
}
|
215
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export const enum NileSliderEvents {
|
2
|
+
NILE_INIT = "nile-init",
|
3
|
+
NILE_CHANGE = "nile-change",
|
4
|
+
NILE_CHANGE_END = "nile-change-end",
|
5
|
+
NILE_BUTTON_FIRST_CHANGE = "nile-button-first-change",
|
6
|
+
NILE_BUTTON_LAST_CHANGE = "nile-button-last-change",
|
7
|
+
NILE_BUTTON_FIRST_CHANGE_END = "nile-button-first-change-end",
|
8
|
+
NILE_BUTTON_LAST_CHANGE_END = "nile-button-last-change-end",
|
9
|
+
NILE_DESTROY = "nile-destroy",
|
10
|
+
}
|
@@ -0,0 +1,136 @@
|
|
1
|
+
import NileSlider from '../nile-slider';
|
2
|
+
import { NileSliderEvents } from '../types/nile-slider.enums';
|
3
|
+
|
4
|
+
export const getClampedPercent = (
|
5
|
+
rect: DOMRect,
|
6
|
+
x: number,
|
7
|
+
): number => {
|
8
|
+
const clampedX = Math.max(0, Math.min(x, rect.width));
|
9
|
+
const percent = (clampedX / rect.width) * 100;
|
10
|
+
return percent;
|
11
|
+
};
|
12
|
+
|
13
|
+
export const percentToValue = (percent: number, nileSlider: NileSlider): number => {
|
14
|
+
const value = nileSlider.minValue + (percent / 100) * (nileSlider.maxValue - nileSlider.minValue);
|
15
|
+
if(nileSlider.maxValue - nileSlider.minValue < 1) {
|
16
|
+
return parseFloat(value.toFixed(2));
|
17
|
+
} else {
|
18
|
+
return Math.floor(value);
|
19
|
+
}
|
20
|
+
};
|
21
|
+
|
22
|
+
export const valueToPercent = (value: number, nileSlider: NileSlider): number => {
|
23
|
+
return ((value - nileSlider.minValue) / (nileSlider.maxValue - nileSlider.minValue)) * 100;
|
24
|
+
};
|
25
|
+
|
26
|
+
export const handleSingleSlider = (
|
27
|
+
e: MouseEvent,
|
28
|
+
rect: DOMRect,
|
29
|
+
nileSlider: NileSlider
|
30
|
+
): void => {
|
31
|
+
const x = e.clientX - rect.left;
|
32
|
+
const percent = getClampedPercent(rect, x);
|
33
|
+
nileSlider.value = percentToValue(percent, nileSlider);
|
34
|
+
nileSlider.emit(NileSliderEvents.NILE_CHANGE, { value: nileSlider.value });
|
35
|
+
nileSlider.buttonOne.style.left = `${percent}%`;
|
36
|
+
nileSlider.completed.style.width = `${percent}%`;
|
37
|
+
};
|
38
|
+
|
39
|
+
export const handleRangeOne = (
|
40
|
+
e: MouseEvent,
|
41
|
+
rect: DOMRect,
|
42
|
+
nileSlider: NileSlider
|
43
|
+
): void => {
|
44
|
+
const x = e.clientX - rect.left;
|
45
|
+
const percent = getClampedPercent(rect, x);
|
46
|
+
nileSlider.rangeOneValue = percentToValue(percent, nileSlider);
|
47
|
+
nileSlider.rangeOneValue = Math.min(nileSlider.rangeOneValue, nileSlider.rangeTwoValue);
|
48
|
+
nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {
|
49
|
+
value: nileSlider.rangeOneValue,
|
50
|
+
});
|
51
|
+
if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {
|
52
|
+
nileSlider.buttonOne.style.left = `${percent}%`;
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
export const handleRangeTwo = (
|
57
|
+
e: MouseEvent,
|
58
|
+
rect: DOMRect,
|
59
|
+
nileSlider: NileSlider
|
60
|
+
): void => {
|
61
|
+
const x = e.clientX - rect.left;
|
62
|
+
const percent = getClampedPercent(rect, x);
|
63
|
+
nileSlider.rangeTwoValue = percentToValue(percent, nileSlider);
|
64
|
+
nileSlider.rangeTwoValue = Math.max(nileSlider.rangeTwoValue, nileSlider.rangeOneValue);
|
65
|
+
nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {
|
66
|
+
value: nileSlider.rangeTwoValue,
|
67
|
+
});
|
68
|
+
|
69
|
+
if (nileSlider.rangeTwoValue > nileSlider.rangeOneValue) {
|
70
|
+
nileSlider.buttonTwo.style.left = `${percent}%`;
|
71
|
+
}
|
72
|
+
};
|
73
|
+
|
74
|
+
export const getHtmlElements = (nileSlider: NileSlider) => {
|
75
|
+
nileSlider.range = nileSlider.renderRoot.querySelector('.range') as HTMLElement;
|
76
|
+
nileSlider.buttonOne = nileSlider.renderRoot.querySelector('.range-button') as HTMLElement;
|
77
|
+
nileSlider.buttonTwo = nileSlider.renderRoot.querySelector('.range-button-two') as HTMLElement;
|
78
|
+
nileSlider.completed = nileSlider.renderRoot.querySelector('.range-completed') as HTMLElement;
|
79
|
+
|
80
|
+
nileSlider.range.addEventListener('mousedown', nileSlider.onMouseDown);
|
81
|
+
|
82
|
+
nileSlider.buttonOne?.addEventListener('mousedown', () => {
|
83
|
+
nileSlider.activeThumb = 'one';
|
84
|
+
addMoveListeners(nileSlider);
|
85
|
+
});
|
86
|
+
|
87
|
+
nileSlider.buttonTwo?.addEventListener('mousedown', () => {
|
88
|
+
nileSlider.activeThumb = 'two';
|
89
|
+
addMoveListeners(nileSlider);
|
90
|
+
});
|
91
|
+
};
|
92
|
+
|
93
|
+
export const addMoveListeners = (nileSlider: NileSlider): void => {
|
94
|
+
window.addEventListener('mousemove', nileSlider.onMouseMove);
|
95
|
+
window.addEventListener('mouseup', nileSlider.onMouseUp);
|
96
|
+
};
|
97
|
+
|
98
|
+
export const removeMoveListeners = (nileSlider: NileSlider): void => {
|
99
|
+
window.removeEventListener('mousemove', nileSlider.onMouseMove);
|
100
|
+
window.removeEventListener('mouseup', nileSlider.onMouseUp);
|
101
|
+
};
|
102
|
+
|
103
|
+
export const handleTwoThumbClick = (
|
104
|
+
value: number,
|
105
|
+
nileSlider: NileSlider
|
106
|
+
): void => {
|
107
|
+
const distToOne = Math.abs(value - nileSlider.rangeOneValue);
|
108
|
+
const distToTwo = Math.abs(value - nileSlider.rangeTwoValue);
|
109
|
+
|
110
|
+
if (distToOne <= distToTwo) {
|
111
|
+
const clamped = Math.min(value, nileSlider.rangeTwoValue);
|
112
|
+
nileSlider.rangeOneValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);
|
113
|
+
} else {
|
114
|
+
const clamped = Math.max(value, nileSlider.rangeOneValue);
|
115
|
+
nileSlider.rangeTwoValue = nileSlider.checkValueValidity(clamped, nileSlider.minValue, nileSlider.maxValue);
|
116
|
+
}
|
117
|
+
|
118
|
+
const percentOne = valueToPercent(nileSlider.rangeOneValue, nileSlider);
|
119
|
+
const percentTwo = valueToPercent(nileSlider.rangeTwoValue, nileSlider);
|
120
|
+
|
121
|
+
nileSlider.buttonOne.style.left = `${percentOne}%`;
|
122
|
+
nileSlider.buttonTwo.style.left = `${percentTwo}%`;
|
123
|
+
|
124
|
+
const left = Math.min(percentOne, percentTwo);
|
125
|
+
const width = Math.abs(percentTwo - percentOne);
|
126
|
+
|
127
|
+
nileSlider.completed.style.left = `${left}%`;
|
128
|
+
nileSlider.completed.style.width = `${width}%`;
|
129
|
+
|
130
|
+
nileSlider.emit(NileSliderEvents.NILE_BUTTON_FIRST_CHANGE, {
|
131
|
+
value: nileSlider.rangeOneValue,
|
132
|
+
});
|
133
|
+
nileSlider.emit(NileSliderEvents.NILE_BUTTON_LAST_CHANGE, {
|
134
|
+
value: nileSlider.rangeTwoValue,
|
135
|
+
});
|
136
|
+
};
|
@@ -6,7 +6,6 @@
|
|
6
6
|
*/
|
7
7
|
|
8
8
|
import { css } from 'lit';
|
9
|
-
import { tableLayoutStyles } from '../internal/resizable-table-styles';
|
10
9
|
|
11
10
|
/**
|
12
11
|
* TableBody CSS
|
@@ -49,9 +48,6 @@ export const styles = css`
|
|
49
48
|
slot::slotted(nile-table-row:last-child) {
|
50
49
|
border-bottom: 0px;
|
51
50
|
}
|
52
|
-
|
53
|
-
/* Import resizable styles */
|
54
|
-
${tableLayoutStyles}
|
55
51
|
`;
|
56
52
|
|
57
53
|
export default [styles];
|
@@ -24,7 +24,6 @@ import {
|
|
24
24
|
import { styles } from './nile-table-body.css';
|
25
25
|
import NileElement from '../internal/nile-element';
|
26
26
|
import { getInnerHTML } from '../slot';
|
27
|
-
import { hasResizableColumns } from '../internal/resizable-table-helper';
|
28
27
|
|
29
28
|
/**
|
30
29
|
* nile-table-body component.
|
@@ -47,7 +46,6 @@ export class NileTableBody extends NileElement {
|
|
47
46
|
@state() private header_rows_data: any[] = [];
|
48
47
|
@state() private sort__index: number;
|
49
48
|
@state() private search__index: number;
|
50
|
-
@state() private hasResizableColumns = false;
|
51
49
|
|
52
50
|
public static get styles(): CSSResultArray {
|
53
51
|
return [styles];
|
@@ -69,10 +67,6 @@ export class NileTableBody extends NileElement {
|
|
69
67
|
return this.header_rows_data.indexOf(index__value);
|
70
68
|
}
|
71
69
|
|
72
|
-
private checkForResizableColumns() {
|
73
|
-
this.hasResizableColumns = hasResizableColumns(this);
|
74
|
-
}
|
75
|
-
|
76
70
|
handleSlotchange(e: any) {
|
77
71
|
let row_data: any = [];
|
78
72
|
this._childNodes.forEach((child: any) => {
|
@@ -94,9 +88,6 @@ export class NileTableBody extends NileElement {
|
|
94
88
|
row_data = [];
|
95
89
|
}
|
96
90
|
});
|
97
|
-
|
98
|
-
// Check for resizable columns after slot change
|
99
|
-
this.checkForResizableColumns();
|
100
91
|
}
|
101
92
|
|
102
93
|
private handleSort(e: any) {
|
@@ -124,7 +115,6 @@ export class NileTableBody extends NileElement {
|
|
124
115
|
@slotchange=${this.handleSlotchange}
|
125
116
|
@nile-click-sort=${this.handleSort}
|
126
117
|
class="nile__table__body"
|
127
|
-
?resizable=${this.hasResizableColumns}
|
128
118
|
@nile-search=${this.handleSearch}
|
129
119
|
></slot>
|
130
120
|
</div>
|