@aquera/nile-elements 0.1.58-beta-1.0 → 0.1.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +5 -4
  2. package/demo/index.html +25 -9
  3. package/demo/index.js +0 -83
  4. package/dist/index.cjs.js +1 -1
  5. package/dist/index.esm.js +1 -1
  6. package/dist/index.js +256 -101
  7. package/dist/nile-slider/index.cjs.js +2 -0
  8. package/dist/nile-slider/index.cjs.js.map +1 -0
  9. package/dist/nile-slider/index.esm.js +1 -0
  10. package/dist/nile-slider/nile-slider.cjs.js +2 -0
  11. package/dist/nile-slider/nile-slider.cjs.js.map +1 -0
  12. package/dist/nile-slider/nile-slider.css.cjs.js +2 -0
  13. package/dist/nile-slider/nile-slider.css.cjs.js.map +1 -0
  14. package/dist/nile-slider/nile-slider.css.esm.js +106 -0
  15. package/dist/nile-slider/nile-slider.esm.js +27 -0
  16. package/dist/nile-slider/nile-slider.template.cjs.js +2 -0
  17. package/dist/nile-slider/nile-slider.template.cjs.js.map +1 -0
  18. package/dist/nile-slider/nile-slider.template.esm.js +59 -0
  19. package/dist/nile-slider/types/nile-slider.enums.cjs.js +2 -0
  20. package/dist/nile-slider/types/nile-slider.enums.cjs.js.map +1 -0
  21. package/dist/nile-slider/types/nile-slider.enums.esm.js +1 -0
  22. package/dist/nile-slider/types/nile-slider.types.cjs.js +2 -0
  23. package/dist/nile-slider/types/nile-slider.types.cjs.js.map +1 -0
  24. package/dist/nile-slider/types/nile-slider.types.esm.js +1 -0
  25. package/dist/nile-slider/utils/nile-slider.utils.cjs.js +2 -0
  26. package/dist/nile-slider/utils/nile-slider.utils.cjs.js.map +1 -0
  27. package/dist/nile-slider/utils/nile-slider.utils.esm.js +1 -0
  28. package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
  29. package/dist/nile-table-body/nile-table-body.css.cjs.js +1 -1
  30. package/dist/nile-table-body/nile-table-body.css.cjs.js.map +1 -1
  31. package/dist/nile-table-body/nile-table-body.css.esm.js +0 -1
  32. package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js +1 -1
  33. package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js.map +1 -1
  34. package/dist/nile-table-cell-item/nile-table-cell-item.css.esm.js +0 -1
  35. package/dist/nile-table-header-item/nile-table-header-item.cjs.js +1 -1
  36. package/dist/nile-table-header-item/nile-table-header-item.cjs.js.map +1 -1
  37. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js +1 -1
  38. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js.map +1 -1
  39. package/dist/nile-table-header-item/nile-table-header-item.css.esm.js +0 -1
  40. package/dist/nile-table-header-item/nile-table-header-item.esm.js +33 -64
  41. package/dist/src/index.d.ts +1 -0
  42. package/dist/src/index.js +1 -0
  43. package/dist/src/index.js.map +1 -1
  44. package/dist/src/nile-slider/index.d.ts +1 -0
  45. package/dist/src/nile-slider/index.js +2 -0
  46. package/dist/src/nile-slider/index.js.map +1 -0
  47. package/dist/src/nile-slider/nile-slider.css.d.ts +6 -0
  48. package/dist/src/nile-slider/nile-slider.css.js +118 -0
  49. package/dist/src/nile-slider/nile-slider.css.js.map +1 -0
  50. package/dist/src/nile-slider/nile-slider.d.ts +48 -0
  51. package/dist/src/nile-slider/nile-slider.js +217 -0
  52. package/dist/src/nile-slider/nile-slider.js.map +1 -0
  53. package/dist/src/nile-slider/nile-slider.template.d.ts +5 -0
  54. package/dist/src/nile-slider/nile-slider.template.js +73 -0
  55. package/dist/src/nile-slider/nile-slider.template.js.map +1 -0
  56. package/dist/src/nile-slider/types/nile-slider.enums.d.ts +10 -0
  57. package/dist/src/nile-slider/types/nile-slider.enums.js +2 -0
  58. package/dist/src/nile-slider/types/nile-slider.enums.js.map +1 -0
  59. package/dist/src/nile-slider/types/nile-slider.types.d.ts +1 -0
  60. package/dist/src/nile-slider/types/nile-slider.types.js +2 -0
  61. package/dist/src/nile-slider/types/nile-slider.types.js.map +1 -0
  62. package/dist/src/nile-slider/utils/nile-slider.utils.d.ts +11 -0
  63. package/dist/src/nile-slider/utils/nile-slider.utils.js +99 -0
  64. package/dist/src/nile-slider/utils/nile-slider.utils.js.map +1 -0
  65. package/dist/src/nile-table-body/nile-table-body.css.js +0 -1
  66. package/dist/src/nile-table-body/nile-table-body.css.js.map +1 -1
  67. package/dist/src/nile-table-body/nile-table-body.js +0 -1
  68. package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
  69. package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js +0 -1
  70. package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js.map +1 -1
  71. package/dist/src/nile-table-header-item/nile-table-header-item.css.js +0 -1
  72. package/dist/src/nile-table-header-item/nile-table-header-item.css.js.map +1 -1
  73. package/dist/src/nile-table-header-item/nile-table-header-item.js +45 -89
  74. package/dist/src/nile-table-header-item/nile-table-header-item.js.map +1 -1
  75. package/dist/tsconfig.tsbuildinfo +1 -1
  76. package/package.json +3 -3
  77. package/src/index.ts +2 -1
  78. package/src/nile-slider/index.ts +1 -0
  79. package/src/nile-slider/nile-slider.css.ts +119 -0
  80. package/src/nile-slider/nile-slider.template.ts +77 -0
  81. package/src/nile-slider/nile-slider.ts +215 -0
  82. package/src/nile-slider/types/nile-slider.enums.ts +10 -0
  83. package/src/nile-slider/types/nile-slider.types.ts +13 -0
  84. package/src/nile-slider/utils/nile-slider.utils.ts +136 -0
  85. package/src/nile-table-body/nile-table-body.css.ts +0 -1
  86. package/src/nile-table-body/nile-table-body.ts +0 -1
  87. package/src/nile-table-cell-item/nile-table-cell-item.css.ts +0 -1
  88. package/src/nile-table-header-item/nile-table-header-item.css.ts +0 -1
  89. package/src/nile-table-header-item/nile-table-header-item.ts +45 -88
  90. package/vscode-html-custom-data.json +134 -44
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.58-beta-1.0",
6
+ "version": "0.1.58",
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",
@@ -191,4 +192,3 @@
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,13 @@
1
+ export type TooltipPosition =
2
+ | 'top'
3
+ | 'top-start'
4
+ | 'top-end'
5
+ | 'right'
6
+ | 'right-start'
7
+ | 'right-end'
8
+ | 'bottom'
9
+ | 'bottom-start'
10
+ | 'bottom-end'
11
+ | 'left'
12
+ | 'left-start'
13
+ | 'left-end';
@@ -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
+ };
@@ -50,7 +50,6 @@ export const styles = css`
50
50
  border-bottom: 0px;
51
51
  }
52
52
 
53
- /* Import resizable styles */
54
53
  ${tableLayoutStyles}
55
54
  `;
56
55
 
@@ -95,7 +95,6 @@ export class NileTableBody extends NileElement {
95
95
  }
96
96
  });
97
97
 
98
- // Check for resizable columns after slot change
99
98
  this.checkForResizableColumns();
100
99
  }
101
100
 
@@ -52,7 +52,6 @@ export const styles = css`
52
52
  display: block;
53
53
  }
54
54
 
55
- /* Import resizable styles */
56
55
  ${resizableHostStyles}
57
56
  ${resizerStyles}
58
57
  ${resizableSlotStyles}
@@ -71,7 +71,6 @@ export const styles = css`
71
71
  opacity: 0.3;
72
72
  }
73
73
 
74
- /* Import resizable styles */
75
74
  ${resizableHeaderStyles}
76
75
  ${headerResizerStyles}
77
76
  `;