@haiyue/ui 0.1.0 → 0.1.1

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 (66) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +166 -2
  3. package/dist/border-beam.d.ts +26 -0
  4. package/dist/border-beam.js +172 -0
  5. package/dist/button.d.ts +10 -0
  6. package/dist/button.js +85 -0
  7. package/dist/checkbox.d.ts +2 -2
  8. package/dist/checkbox.js +11 -11
  9. package/dist/context-menu.d.ts +6 -6
  10. package/dist/context-menu.js +11 -9
  11. package/dist/dialog.d.ts +5 -5
  12. package/dist/dialog.js +18 -18
  13. package/dist/drawer.d.ts +49 -0
  14. package/dist/drawer.js +377 -0
  15. package/dist/dropdown.d.ts +9 -9
  16. package/dist/dropdown.js +9 -9
  17. package/dist/history-controls.d.ts +40 -0
  18. package/dist/history-controls.js +123 -0
  19. package/dist/index.d.ts +34 -31
  20. package/dist/index.js +32 -85
  21. package/dist/input.d.ts +5 -5
  22. package/dist/input.js +13 -13
  23. package/dist/menu-shared.d.ts +4 -4
  24. package/dist/menu-shared.js +4 -4
  25. package/dist/notification.d.ts +55 -0
  26. package/dist/notification.js +357 -0
  27. package/dist/radio.d.ts +2 -2
  28. package/dist/radio.js +12 -12
  29. package/dist/range.d.ts +74 -0
  30. package/dist/range.js +393 -0
  31. package/dist/select.d.ts +6 -6
  32. package/dist/select.js +20 -20
  33. package/dist/split.d.ts +6 -6
  34. package/dist/split.js +14 -14
  35. package/dist/tabs.d.ts +6 -6
  36. package/dist/tabs.js +14 -14
  37. package/dist/tooltip.d.ts +4 -4
  38. package/dist/tooltip.js +9 -9
  39. package/dist/tree-model.d.ts +15 -7
  40. package/dist/tree-model.js +93 -80
  41. package/dist/tree-node.d.ts +3 -3
  42. package/dist/tree-node.js +3 -3
  43. package/dist/tree-types.d.ts +14 -14
  44. package/dist/tree.d.ts +9 -7
  45. package/dist/tree.js +68 -66
  46. package/dist/virtual-list.d.ts +61 -0
  47. package/dist/virtual-list.js +322 -0
  48. package/package.json +87 -11
  49. package/themes/haiyue-dark.css +46 -0
  50. package/themes/haiyue-light.css +46 -0
  51. package/src/checkbox.ts +0 -215
  52. package/src/context-menu.ts +0 -248
  53. package/src/dialog.ts +0 -195
  54. package/src/dropdown.ts +0 -249
  55. package/src/index.ts +0 -192
  56. package/src/input.ts +0 -150
  57. package/src/menu-shared.ts +0 -65
  58. package/src/radio.ts +0 -216
  59. package/src/select.ts +0 -271
  60. package/src/split.ts +0 -306
  61. package/src/tabs.ts +0 -182
  62. package/src/tooltip.ts +0 -321
  63. package/src/tree-model.ts +0 -305
  64. package/src/tree-node.ts +0 -67
  65. package/src/tree-types.ts +0 -47
  66. package/src/tree.ts +0 -1002
@@ -0,0 +1,357 @@
1
+ const DEFAULT_DURATION = 4.5;
2
+ const DEFAULT_PLACEMENT = 'topRight';
3
+ const EXIT_DURATION = 170;
4
+ const PLACEMENTS = [
5
+ 'topLeft',
6
+ 'top',
7
+ 'topRight',
8
+ 'bottomLeft',
9
+ 'bottom',
10
+ 'bottomRight',
11
+ ];
12
+ function isPlacement(value) {
13
+ return typeof value === 'string' && PLACEMENTS.includes(value);
14
+ }
15
+ function isType(value) {
16
+ return value === 'success' || value === 'info' || value === 'warning' || value === 'error';
17
+ }
18
+ const NOTIFICATION_STYLES = `
19
+ :host {
20
+ position: fixed;
21
+ z-index: var(--hy-notification-z-index, 1100);
22
+ inset: 0;
23
+ display: block;
24
+ pointer-events: none;
25
+ color: var(--hy-text-color, #e8effa);
26
+ font: 13px/1.45 system-ui, sans-serif;
27
+ }
28
+ .container {
29
+ position: fixed;
30
+ width: min(var(--hy-notification-width, 384px), calc(100vw - 32px));
31
+ min-height: 88px;
32
+ pointer-events: none;
33
+ perspective: 1000px;
34
+ transform-style: preserve-3d;
35
+ }
36
+ .container[data-placement="topLeft"] { top: var(--hy-notification-offset, 24px); left: var(--hy-notification-offset, 24px); }
37
+ .container[data-placement="top"] { top: var(--hy-notification-offset, 24px); left: 50%; transform: translateX(-50%); }
38
+ .container[data-placement="topRight"] { top: var(--hy-notification-offset, 24px); right: var(--hy-notification-offset, 24px); }
39
+ .container[data-placement="bottomLeft"] { bottom: var(--hy-notification-offset, 24px); left: var(--hy-notification-offset, 24px); }
40
+ .container[data-placement="bottom"] { bottom: var(--hy-notification-offset, 24px); left: 50%; transform: translateX(-50%); }
41
+ .container[data-placement="bottomRight"] { right: var(--hy-notification-offset, 24px); bottom: var(--hy-notification-offset, 24px); }
42
+ .notice {
43
+ --_tone: var(--hy-info-color, #58a6ff);
44
+ --_soft: color-mix(in srgb, var(--_tone) 16%, transparent);
45
+ position: absolute;
46
+ z-index: calc(100 - var(--_depth));
47
+ inset: 0 0 auto;
48
+ display: grid;
49
+ grid-template-columns: 34px minmax(0, 1fr) 28px;
50
+ gap: 11px;
51
+ min-height: 82px;
52
+ padding: 15px 13px 15px 15px;
53
+ overflow: hidden;
54
+ border: 1px solid color-mix(in srgb, var(--_tone) 30%, var(--hy-border-color, #303746));
55
+ border-radius: var(--hy-notification-radius, 9px);
56
+ pointer-events: auto;
57
+ color: var(--hy-text-color, #e8effa);
58
+ background: var(--hy-notification-bg-color, var(--hy-surface-elevated-color, #171e2a));
59
+ box-shadow: 0 14px 38px var(--hy-notification-shadow-color, rgba(0, 0, 0, 0.34));
60
+ transform: translate3d(0, calc(var(--_depth) * 10px), calc(var(--_depth) * -24px)) scale(calc(1 - var(--_depth) * 0.035));
61
+ transform-origin: top center;
62
+ transition: margin 180ms ease, opacity 160ms ease, transform 180ms cubic-bezier(0.22, 1, 0.36, 1);
63
+ animation: hy-notification-enter 180ms cubic-bezier(0.22, 1, 0.36, 1);
64
+ box-sizing: border-box;
65
+ }
66
+ .container[data-edge="bottom"] .notice {
67
+ inset: auto 0 0;
68
+ transform: translate3d(0, calc(var(--_depth) * -10px), calc(var(--_depth) * -24px)) scale(calc(1 - var(--_depth) * 0.035));
69
+ transform-origin: bottom center;
70
+ }
71
+ .container:hover .notice,
72
+ .container:focus-within .notice {
73
+ transform: translate3d(0, calc(var(--_order) * 94px), 0) scale(1);
74
+ }
75
+ .container[data-edge="bottom"]:hover .notice,
76
+ .container[data-edge="bottom"]:focus-within .notice {
77
+ transform: translate3d(0, calc(var(--_order) * -94px), 0) scale(1);
78
+ }
79
+ .notice[data-type="success"] { --_tone: var(--hy-success-color, #55c98a); }
80
+ .notice[data-type="info"] { --_tone: var(--hy-info-color, var(--hy-accent-color, #58a6ff)); }
81
+ .notice[data-type="warning"] { --_tone: var(--hy-warning-color, #e7b75a); }
82
+ .notice[data-type="error"] { --_tone: var(--hy-error-color, #ef6b78); }
83
+ .notice.closing {
84
+ opacity: 0;
85
+ pointer-events: none;
86
+ transform: translate3d(18px, calc(var(--_depth) * 10px), -40px) scale(0.94);
87
+ }
88
+ .container[data-edge="bottom"] .notice.closing {
89
+ transform: translate3d(18px, calc(var(--_depth) * -10px), -40px) scale(0.94);
90
+ }
91
+ .icon {
92
+ display: grid;
93
+ width: 32px;
94
+ height: 32px;
95
+ border-radius: 50%;
96
+ place-items: center;
97
+ color: var(--_tone);
98
+ background: var(--_soft);
99
+ }
100
+ .icon svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2.2; }
101
+ .content { min-width: 0; padding-top: 1px; }
102
+ .message { margin: 0; color: inherit; font-size: 13px; font-weight: 680; overflow-wrap: anywhere; }
103
+ .description { margin: 4px 0 0; color: var(--hy-secondary-text-color, #9aa8ba); font-size: 11px; overflow-wrap: anywhere; }
104
+ .close {
105
+ display: grid;
106
+ width: 26px;
107
+ height: 26px;
108
+ padding: 0;
109
+ border: 0;
110
+ border-radius: 5px;
111
+ place-items: center;
112
+ color: var(--hy-secondary-text-color, #8492a6);
113
+ background: transparent;
114
+ cursor: pointer;
115
+ font: 18px/1 system-ui, sans-serif;
116
+ }
117
+ .close:hover { color: inherit; background: var(--hy-hover-bg-color, #242d3b); }
118
+ .close:focus-visible { outline: 2px solid var(--hy-focus-border-color, #79a8ff); outline-offset: 1px; }
119
+ .progress {
120
+ position: absolute;
121
+ right: 0;
122
+ bottom: 0;
123
+ left: 0;
124
+ height: var(--hy-notification-progress-height, 3px);
125
+ transform: scaleX(1);
126
+ transform-origin: left;
127
+ background: var(--_tone);
128
+ animation: hy-notification-progress linear forwards;
129
+ }
130
+ @keyframes hy-notification-progress { to { transform: scaleX(0); } }
131
+ @keyframes hy-notification-enter {
132
+ from { opacity: 0; filter: blur(3px); }
133
+ to { opacity: 1; filter: blur(0); }
134
+ }
135
+ @media (max-width: 520px) {
136
+ .container { right: 16px !important; left: 16px !important; width: auto; transform: none !important; }
137
+ }
138
+ @media (prefers-reduced-motion: reduce) {
139
+ .notice { animation-duration: 1ms; transition-duration: 1ms; }
140
+ }
141
+ `;
142
+ /** Imperative notification center with independently timed, stacked notices. */
143
+ export class HYNotification extends HTMLElement {
144
+ _containers = new Map();
145
+ _notices = new Map();
146
+ _sequence = 0;
147
+ static get observedAttributes() {
148
+ return ['placement', 'duration'];
149
+ }
150
+ constructor() {
151
+ super();
152
+ const root = this.attachShadow({ mode: 'open' });
153
+ const style = document.createElement('style');
154
+ style.textContent = NOTIFICATION_STYLES;
155
+ root.append(style);
156
+ for (const placement of PLACEMENTS) {
157
+ const container = document.createElement('div');
158
+ container.className = 'container';
159
+ container.dataset.placement = placement;
160
+ container.dataset.edge = placement.startsWith('bottom') ? 'bottom' : 'top';
161
+ root.append(container);
162
+ this._containers.set(placement, container);
163
+ }
164
+ }
165
+ connectedCallback() {
166
+ this._syncPlacementAttribute();
167
+ }
168
+ disconnectedCallback() {
169
+ for (const notice of this._notices.values())
170
+ this._removeNotice(notice, false);
171
+ this._notices.clear();
172
+ for (const container of this._containers.values())
173
+ container.replaceChildren();
174
+ }
175
+ attributeChangedCallback(name) {
176
+ if (name === 'placement')
177
+ this._syncPlacementAttribute();
178
+ if (name === 'duration' && this.hasAttribute('duration') && !Number.isFinite(Number(this.getAttribute('duration')))) {
179
+ this.setAttribute('duration', String(DEFAULT_DURATION));
180
+ }
181
+ }
182
+ get placement() {
183
+ const value = this.getAttribute('placement');
184
+ return isPlacement(value) ? value : DEFAULT_PLACEMENT;
185
+ }
186
+ set placement(value) {
187
+ this.setAttribute('placement', isPlacement(value) ? value : DEFAULT_PLACEMENT);
188
+ }
189
+ get duration() {
190
+ const value = Number(this.getAttribute('duration'));
191
+ return Number.isFinite(value) && value >= 0 ? value : DEFAULT_DURATION;
192
+ }
193
+ set duration(value) {
194
+ const normalized = Number.isFinite(Number(value)) && Number(value) >= 0 ? Number(value) : DEFAULT_DURATION;
195
+ this.setAttribute('duration', String(normalized));
196
+ }
197
+ get showProgress() { return this.hasAttribute('show-progress'); }
198
+ set showProgress(value) { this.toggleAttribute('show-progress', Boolean(value)); }
199
+ get size() { return this._notices.size; }
200
+ open(options) {
201
+ const key = options.key ? String(options.key) : `hy-notification-${++this._sequence}`;
202
+ const existing = this._notices.get(key);
203
+ if (existing)
204
+ this._removeNotice(existing, false);
205
+ const type = isType(options.type) ? options.type : 'info';
206
+ const placement = isPlacement(options.placement) ? options.placement : this.placement;
207
+ const duration = Number.isFinite(Number(options.duration)) && Number(options.duration) >= 0
208
+ ? Number(options.duration)
209
+ : this.duration;
210
+ const showProgress = options.showProgress ?? this.showProgress;
211
+ const element = this._createNotice(key, type, options.message, options.description, duration, showProgress);
212
+ const notice = {
213
+ key,
214
+ type,
215
+ placement,
216
+ element,
217
+ timer: null,
218
+ exitTimer: null,
219
+ closing: false,
220
+ };
221
+ this._notices.set(key, notice);
222
+ this._containers.get(placement)?.prepend(element);
223
+ this._updateStack(placement);
224
+ if (duration > 0) {
225
+ notice.timer = window.setTimeout(() => this._closeNotice(notice, 'timeout'), duration * 1000);
226
+ }
227
+ this.dispatchEvent(new CustomEvent('notification-open', {
228
+ detail: { key, type, placement },
229
+ bubbles: true,
230
+ composed: true,
231
+ }));
232
+ return key;
233
+ }
234
+ success(options) { return this._openTyped('success', options); }
235
+ info(options) { return this._openTyped('info', options); }
236
+ warning(options) { return this._openTyped('warning', options); }
237
+ error(options) { return this._openTyped('error', options); }
238
+ close(key) {
239
+ const notice = this._notices.get(String(key));
240
+ if (notice)
241
+ this._closeNotice(notice, 'programmatic');
242
+ }
243
+ destroy() {
244
+ for (const notice of [...this._notices.values()])
245
+ this._removeNotice(notice, true, 'programmatic');
246
+ }
247
+ _openTyped(type, options) {
248
+ return this.open(typeof options === 'string' ? { type, message: options } : { ...options, type });
249
+ }
250
+ _createNotice(key, type, message, description, duration, showProgress) {
251
+ const notice = document.createElement('article');
252
+ notice.className = 'notice';
253
+ notice.dataset.key = key;
254
+ notice.dataset.type = type;
255
+ notice.part.add('notice');
256
+ notice.setAttribute('role', type === 'error' || type === 'warning' ? 'alert' : 'status');
257
+ const icon = document.createElement('span');
258
+ icon.className = 'icon';
259
+ icon.part.add('icon');
260
+ icon.setAttribute('aria-hidden', 'true');
261
+ icon.append(this._createIcon(type));
262
+ const content = document.createElement('div');
263
+ content.className = 'content';
264
+ const title = document.createElement('p');
265
+ title.className = 'message';
266
+ title.textContent = String(message ?? '');
267
+ content.append(title);
268
+ if (description) {
269
+ const text = document.createElement('p');
270
+ text.className = 'description';
271
+ text.textContent = String(description);
272
+ content.append(text);
273
+ }
274
+ const close = document.createElement('button');
275
+ close.className = 'close';
276
+ close.type = 'button';
277
+ close.setAttribute('aria-label', `Close ${type} notification`);
278
+ close.textContent = '×';
279
+ close.addEventListener('click', () => {
280
+ const record = this._notices.get(key);
281
+ if (record)
282
+ this._closeNotice(record, 'action');
283
+ });
284
+ notice.append(icon, content, close);
285
+ if (showProgress && duration > 0) {
286
+ const progress = document.createElement('span');
287
+ progress.className = 'progress';
288
+ progress.part.add('progress');
289
+ progress.setAttribute('aria-hidden', 'true');
290
+ progress.style.animationDuration = `${duration}s`;
291
+ notice.append(progress);
292
+ }
293
+ return notice;
294
+ }
295
+ _createIcon(type) {
296
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
297
+ svg.setAttribute('viewBox', '0 0 24 24');
298
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
299
+ path.setAttribute('d', {
300
+ success: 'M5 12.5 9.2 17 19 7',
301
+ info: 'M12 10v7M12 7h.01',
302
+ warning: 'M12 6v8M12 18h.01',
303
+ error: 'm7.5 7.5 9 9m0-9-9 9',
304
+ }[type]);
305
+ svg.append(path);
306
+ return svg;
307
+ }
308
+ _closeNotice(notice, reason) {
309
+ if (notice.closing || this._notices.get(notice.key) !== notice)
310
+ return;
311
+ notice.closing = true;
312
+ if (notice.timer !== null)
313
+ window.clearTimeout(notice.timer);
314
+ notice.timer = null;
315
+ notice.element.classList.add('closing');
316
+ notice.exitTimer = window.setTimeout(() => this._removeNotice(notice, true, reason), EXIT_DURATION);
317
+ }
318
+ _removeNotice(notice, emit, reason = 'programmatic') {
319
+ if (notice.timer !== null)
320
+ window.clearTimeout(notice.timer);
321
+ if (notice.exitTimer !== null)
322
+ window.clearTimeout(notice.exitTimer);
323
+ notice.timer = null;
324
+ notice.exitTimer = null;
325
+ notice.element.remove();
326
+ if (this._notices.get(notice.key) === notice)
327
+ this._notices.delete(notice.key);
328
+ this._updateStack(notice.placement);
329
+ if (!emit)
330
+ return;
331
+ this.dispatchEvent(new CustomEvent('notification-close', {
332
+ detail: { key: notice.key, type: notice.type, placement: notice.placement, reason },
333
+ bubbles: true,
334
+ composed: true,
335
+ }));
336
+ }
337
+ _updateStack(placement) {
338
+ const container = this._containers.get(placement);
339
+ if (!container)
340
+ return;
341
+ const notices = [...container.querySelectorAll('.notice')];
342
+ notices.forEach((notice, index) => {
343
+ notice.style.setProperty('--_order', String(index));
344
+ notice.style.setProperty('--_depth', String(Math.min(index, 6)));
345
+ });
346
+ }
347
+ _syncPlacementAttribute() {
348
+ const value = this.getAttribute('placement');
349
+ if (value !== null && !isPlacement(value))
350
+ this.setAttribute('placement', DEFAULT_PLACEMENT);
351
+ }
352
+ }
353
+ export function defineNotificationComponents() {
354
+ if (!customElements.get('hy-notification'))
355
+ customElements.define('hy-notification', HYNotification);
356
+ }
357
+ //# sourceMappingURL=notification.js.map
package/dist/radio.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export interface GERadioChangeDetail {
1
+ export interface HYRadioChangeDetail {
2
2
  checked: boolean;
3
3
  value: string;
4
4
  name: string;
5
5
  }
6
- export declare class GERadio extends HTMLElement {
6
+ export declare class HYRadio extends HTMLElement {
7
7
  private readonly _input;
8
8
  private readonly _marker;
9
9
  private readonly _label;
package/dist/radio.js CHANGED
@@ -1,4 +1,4 @@
1
- export class GERadio extends HTMLElement {
1
+ export class HYRadio extends HTMLElement {
2
2
  _input = document.createElement('input');
3
3
  _marker = document.createElement('span');
4
4
  _label = document.createElement('span');
@@ -15,7 +15,7 @@ export class GERadio extends HTMLElement {
15
15
  display: inline-block;
16
16
  width: max-content;
17
17
  min-width: 0;
18
- color: var(--ge-radio-text-color, var(--ge-text-color, #d8e2f2));
18
+ color: var(--hy-radio-text-color, var(--hy-text-color, #d8e2f2));
19
19
  font: 12px system-ui, sans-serif;
20
20
  }
21
21
  :host([disabled]) {
@@ -51,19 +51,19 @@ export class GERadio extends HTMLElement {
51
51
  flex: 0 0 14px;
52
52
  display: inline-grid;
53
53
  place-items: center;
54
- border: 1px solid var(--ge-radio-border-color, var(--ge-border-color, #303746));
54
+ border: 1px solid var(--hy-radio-border-color, var(--hy-border-color, #303746));
55
55
  border-radius: 50%;
56
- background: var(--ge-radio-bg-color, var(--ge-input-bg-color, #121822));
57
- color: var(--ge-radio-dot-color, var(--ge-selected-text-color, #ffffff));
56
+ background: var(--hy-radio-bg-color, var(--hy-input-bg-color, #121822));
57
+ color: var(--hy-radio-dot-color, var(--hy-selected-text-color, #ffffff));
58
58
  transition: background 0.12s ease, border-color 0.12s ease, box-shadow 0.12s ease;
59
59
  }
60
60
  input:focus-visible + .marker {
61
- border-color: var(--ge-focus-border-color, #3d6fa8);
62
- box-shadow: 0 0 0 2px var(--ge-focus-ring-color, rgba(61, 111, 168, 0.28));
61
+ border-color: var(--hy-focus-border-color, #3d6fa8);
62
+ box-shadow: 0 0 0 2px var(--hy-focus-ring-color, rgba(61, 111, 168, 0.28));
63
63
  }
64
64
  input:checked + .marker {
65
- border-color: var(--ge-radio-checked-border-color, var(--ge-accent-color, #3d6fa8));
66
- background: var(--ge-radio-checked-bg-color, var(--ge-accent-strong-color, #255a91));
65
+ border-color: var(--hy-radio-checked-border-color, var(--hy-accent-color, #3d6fa8));
66
+ background: var(--hy-radio-checked-bg-color, var(--hy-accent-strong-color, #255a91));
67
67
  }
68
68
  .marker::after {
69
69
  content: "";
@@ -183,7 +183,7 @@ export class GERadio extends HTMLElement {
183
183
  return;
184
184
  const root = this.getRootNode();
185
185
  const peers = root instanceof Document || root instanceof ShadowRoot
186
- ? root.querySelectorAll(`ge-radio[name="${cssEscape(this.name)}"]`)
186
+ ? root.querySelectorAll(`hy-radio[name="${cssEscape(this.name)}"]`)
187
187
  : [];
188
188
  for (const peer of peers) {
189
189
  if (peer === this || peer.disabled)
@@ -198,8 +198,8 @@ function cssEscape(value) {
198
198
  return value.replace(/["\\]/g, '\\$&');
199
199
  }
200
200
  export function defineRadioComponents() {
201
- if (!customElements.get('ge-radio')) {
202
- customElements.define('ge-radio', GERadio);
201
+ if (!customElements.get('hy-radio')) {
202
+ customElements.define('hy-radio', HYRadio);
203
203
  }
204
204
  }
205
205
  //# sourceMappingURL=radio.js.map
@@ -0,0 +1,74 @@
1
+ export type HYRangeHandle = 'single' | 'lower' | 'upper';
2
+ export type HYRangeValue = number | readonly [number, number];
3
+ export interface HYRangeChangeDetail {
4
+ readonly value: HYRangeValue;
5
+ readonly lowerValue: number;
6
+ readonly upperValue: number;
7
+ readonly handle: HYRangeHandle;
8
+ }
9
+ /** Accessible single-value or two-handle numeric range control. */
10
+ export declare class HYRange extends HTMLElement {
11
+ private readonly _stage;
12
+ private readonly _track;
13
+ private readonly _lowerHandle;
14
+ private readonly _upperHandle;
15
+ private readonly _lowerBubble;
16
+ private readonly _upperBubble;
17
+ private _activeHandle;
18
+ private _dragStartValue;
19
+ private _pointerId;
20
+ private _dragAbort;
21
+ private _connected;
22
+ static get observedAttributes(): string[];
23
+ constructor();
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ attributeChangedCallback(): void;
27
+ get min(): number;
28
+ set min(value: number);
29
+ get max(): number;
30
+ set max(value: number);
31
+ get step(): number;
32
+ set step(value: number);
33
+ get value(): number;
34
+ set value(value: number);
35
+ get range(): boolean;
36
+ set range(value: boolean);
37
+ get lowerValue(): number;
38
+ set lowerValue(value: number);
39
+ get upperValue(): number;
40
+ set upperValue(value: number);
41
+ get values(): readonly [number, number];
42
+ set values(value: readonly [number, number]);
43
+ get disabled(): boolean;
44
+ set disabled(value: boolean);
45
+ get showValue(): boolean;
46
+ set showValue(value: boolean);
47
+ focus(options?: FocusOptions): void;
48
+ private _configureHandle;
49
+ private _render;
50
+ private _upperHandleLabel;
51
+ private _syncHandle;
52
+ private _onPointerDown;
53
+ private _onPointerMove;
54
+ private _onPointerUp;
55
+ private _onKeyDown;
56
+ private _resolvePointerHandle;
57
+ private _resolveKeyboardHandle;
58
+ private _valueForHandle;
59
+ private _keyboardValue;
60
+ private _setFromPointer;
61
+ private _commitValue;
62
+ private _dispatchValueEvent;
63
+ private _nearestHandle;
64
+ private _valueFromClientX;
65
+ private _normalize;
66
+ private _precision;
67
+ private _rawLowerValue;
68
+ private _toPercent;
69
+ private _formatValue;
70
+ private _serializedValue;
71
+ private _setActiveHandle;
72
+ private _stopDrag;
73
+ }
74
+ export declare function defineRangeComponents(): void;