@wrrdev/fenix-ui 1.0.5 → 1.0.7
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 +314 -314
- package/dist/.nojekyll +0 -0
- package/dist/components/accordion/accordion.d.ts +72 -0
- package/dist/components/accordion/accordion.d.ts.map +1 -0
- package/dist/components/accordion/accordion.js +277 -0
- package/dist/components/accordion/accordion.js.map +1 -0
- package/dist/components/accordion/index.d.ts +2 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/index.js +9 -0
- package/dist/components/accordion/index.js.map +1 -0
- package/dist/components/calendar/calendar.d.ts +2 -2
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/calendar.js +187 -89
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/dropdown.js +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/knob/index.d.ts +8 -0
- package/dist/components/knob/index.d.ts.map +1 -0
- package/dist/components/knob/index.js +7 -0
- package/dist/components/knob/index.js.map +1 -0
- package/dist/components/knob/knob.d.ts +51 -0
- package/dist/components/knob/knob.d.ts.map +1 -0
- package/dist/components/knob/knob.js +323 -0
- package/dist/components/knob/knob.js.map +1 -0
- package/dist/components/orderlist/index.d.ts +3 -0
- package/dist/components/orderlist/index.d.ts.map +1 -0
- package/dist/components/orderlist/index.js +7 -0
- package/dist/components/orderlist/index.js.map +1 -0
- package/dist/components/orderlist/orderlist.d.ts +78 -0
- package/dist/components/orderlist/orderlist.d.ts.map +1 -0
- package/dist/components/orderlist/orderlist.js +666 -0
- package/dist/components/orderlist/orderlist.js.map +1 -0
- package/dist/components/picklist/index.d.ts +3 -0
- package/dist/components/picklist/index.d.ts.map +1 -0
- package/dist/components/picklist/index.js +7 -0
- package/dist/components/picklist/index.js.map +1 -0
- package/dist/components/picklist/picklist.d.ts +102 -0
- package/dist/components/picklist/picklist.d.ts.map +1 -0
- package/dist/components/picklist/picklist.js +749 -0
- package/dist/components/picklist/picklist.js.map +1 -0
- package/dist/components/tooltip/directive.d.ts +31 -0
- package/dist/components/tooltip/directive.d.ts.map +1 -0
- package/dist/components/tooltip/directive.js +294 -0
- package/dist/components/tooltip/directive.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +2 -1
- package/dist/components/tooltip/index.d.ts.map +1 -1
- package/dist/components/tooltip/index.js +4 -1
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/core/presets.d.ts.map +1 -1
- package/dist/core/presets.js +48 -9
- package/dist/core/presets.js.map +1 -1
- package/dist/core/tokens.d.ts.map +1 -1
- package/dist/core/tokens.js +4 -4
- package/dist/core/tokens.js.map +1 -1
- package/dist/docs/app.d.ts +3 -25
- package/dist/docs/app.d.ts.map +1 -1
- package/dist/docs/componentes/accordion.doc.d.ts +8 -0
- package/dist/docs/componentes/accordion.doc.d.ts.map +1 -0
- package/dist/docs/componentes/alert.doc.d.ts +8 -0
- package/dist/docs/componentes/alert.doc.d.ts.map +1 -0
- package/dist/docs/componentes/autocomplete.doc.d.ts +8 -0
- package/dist/docs/componentes/autocomplete.doc.d.ts.map +1 -0
- package/dist/docs/componentes/badge.doc.d.ts +8 -0
- package/dist/docs/componentes/badge.doc.d.ts.map +1 -0
- package/dist/docs/componentes/button.doc.d.ts +8 -0
- package/dist/docs/componentes/button.doc.d.ts.map +1 -0
- package/dist/docs/componentes/calendar.doc.d.ts +8 -0
- package/dist/docs/componentes/calendar.doc.d.ts.map +1 -0
- package/dist/docs/componentes/checkbox.doc.d.ts +8 -0
- package/dist/docs/componentes/checkbox.doc.d.ts.map +1 -0
- package/dist/docs/componentes/datepicker.doc.d.ts +8 -0
- package/dist/docs/componentes/datepicker.doc.d.ts.map +1 -0
- package/dist/docs/componentes/dialog.doc.d.ts +8 -0
- package/dist/docs/componentes/dialog.doc.d.ts.map +1 -0
- package/dist/docs/componentes/drawer.doc.d.ts +8 -0
- package/dist/docs/componentes/drawer.doc.d.ts.map +1 -0
- package/dist/docs/componentes/dropdown.doc.d.ts +8 -0
- package/dist/docs/componentes/dropdown.doc.d.ts.map +1 -0
- package/dist/docs/componentes/floatlabel.doc.d.ts +8 -0
- package/dist/docs/componentes/floatlabel.doc.d.ts.map +1 -0
- package/dist/docs/componentes/index.d.ts +10 -0
- package/dist/docs/componentes/index.d.ts.map +1 -0
- package/dist/docs/componentes/input.doc.d.ts +8 -0
- package/dist/docs/componentes/input.doc.d.ts.map +1 -0
- package/dist/docs/componentes/knob.doc.d.ts +8 -0
- package/dist/docs/componentes/knob.doc.d.ts.map +1 -0
- package/dist/docs/componentes/multiselect.doc.d.ts +8 -0
- package/dist/docs/componentes/multiselect.doc.d.ts.map +1 -0
- package/dist/docs/componentes/orderlist.doc.d.ts +8 -0
- package/dist/docs/componentes/orderlist.doc.d.ts.map +1 -0
- package/dist/docs/componentes/pagination.doc.d.ts +8 -0
- package/dist/docs/componentes/pagination.doc.d.ts.map +1 -0
- package/dist/docs/componentes/picklist.doc.d.ts +8 -0
- package/dist/docs/componentes/picklist.doc.d.ts.map +1 -0
- package/dist/docs/componentes/progress.doc.d.ts +8 -0
- package/dist/docs/componentes/progress.doc.d.ts.map +1 -0
- package/dist/docs/componentes/radio.doc.d.ts +8 -0
- package/dist/docs/componentes/radio.doc.d.ts.map +1 -0
- package/dist/docs/componentes/select.doc.d.ts +8 -0
- package/dist/docs/componentes/select.doc.d.ts.map +1 -0
- package/dist/docs/componentes/skeleton.doc.d.ts +8 -0
- package/dist/docs/componentes/skeleton.doc.d.ts.map +1 -0
- package/dist/docs/componentes/spinner.doc.d.ts +8 -0
- package/dist/docs/componentes/spinner.doc.d.ts.map +1 -0
- package/dist/docs/componentes/switch.doc.d.ts +8 -0
- package/dist/docs/componentes/switch.doc.d.ts.map +1 -0
- package/dist/docs/componentes/table.doc.d.ts +8 -0
- package/dist/docs/componentes/table.doc.d.ts.map +1 -0
- package/dist/docs/componentes/tabs.doc.d.ts +8 -0
- package/dist/docs/componentes/tabs.doc.d.ts.map +1 -0
- package/dist/docs/componentes/textarea.doc.d.ts +8 -0
- package/dist/docs/componentes/textarea.doc.d.ts.map +1 -0
- package/dist/docs/componentes/toast.doc.d.ts +8 -0
- package/dist/docs/componentes/toast.doc.d.ts.map +1 -0
- package/dist/docs/componentes/tooltip.doc.d.ts +25 -0
- package/dist/docs/componentes/tooltip.doc.d.ts.map +1 -0
- package/dist/docs/shared.d.ts +9 -0
- package/dist/docs/shared.d.ts.map +1 -0
- package/dist/docs/types.d.ts +47 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/fenix-ui.umd.min.js +815 -157
- package/dist/fenix-ui2.esm.js +2522 -103
- package/dist/fenix-ui2.esm.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/package.json +212 -187
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxKnob = class _FxKnob extends FxElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this._isDragging = false;
|
|
8
|
+
this._startY = 0;
|
|
9
|
+
this._startValue = 0;
|
|
10
|
+
this._onMouseMove = (e) => {
|
|
11
|
+
if (!this._isDragging) return;
|
|
12
|
+
const deltaY = this._startY - e.clientY;
|
|
13
|
+
const sensitivity = (this.max - this.min) / 100;
|
|
14
|
+
this.emitChange(this._startValue + deltaY * sensitivity);
|
|
15
|
+
};
|
|
16
|
+
this._onMouseUp = () => {
|
|
17
|
+
this._isDragging = false;
|
|
18
|
+
document.removeEventListener("mousemove", this._onMouseMove);
|
|
19
|
+
document.removeEventListener("mouseup", this._onMouseUp);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static get observedAttributes() {
|
|
23
|
+
return [
|
|
24
|
+
"value",
|
|
25
|
+
"min",
|
|
26
|
+
"max",
|
|
27
|
+
"step",
|
|
28
|
+
"size",
|
|
29
|
+
"stroke-width",
|
|
30
|
+
"value-color",
|
|
31
|
+
"range-color",
|
|
32
|
+
"readonly",
|
|
33
|
+
"disabled",
|
|
34
|
+
"value-template"
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
get value() {
|
|
38
|
+
return this.clampValue(Number(this.getAttr("value", "0")) || 0);
|
|
39
|
+
}
|
|
40
|
+
set value(v) {
|
|
41
|
+
if (this.readonly || this.disabled) return;
|
|
42
|
+
const clamped = this.clampValue(v);
|
|
43
|
+
const current = this.clampValue(Number(this.getAttr("value", "0")) || 0);
|
|
44
|
+
if (clamped !== current) {
|
|
45
|
+
this.setAttribute("value", String(clamped));
|
|
46
|
+
this.dispatchEvent(
|
|
47
|
+
new CustomEvent("change", {
|
|
48
|
+
bubbles: true,
|
|
49
|
+
composed: true,
|
|
50
|
+
detail: { value: clamped }
|
|
51
|
+
})
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
get min() {
|
|
56
|
+
return Number(this.getAttr("min", "0")) || 0;
|
|
57
|
+
}
|
|
58
|
+
set min(v) {
|
|
59
|
+
this.setAttribute("min", String(v));
|
|
60
|
+
}
|
|
61
|
+
get max() {
|
|
62
|
+
return Number(this.getAttr("max", "100")) || 100;
|
|
63
|
+
}
|
|
64
|
+
set max(v) {
|
|
65
|
+
this.setAttribute("max", String(v));
|
|
66
|
+
}
|
|
67
|
+
get step() {
|
|
68
|
+
return Number(this.getAttr("step", "1")) || 1;
|
|
69
|
+
}
|
|
70
|
+
set step(v) {
|
|
71
|
+
this.setAttribute("step", String(v));
|
|
72
|
+
}
|
|
73
|
+
get size() {
|
|
74
|
+
const s = this.getAttr("size", "md");
|
|
75
|
+
return s === "sm" || s === "lg" ? s : "md";
|
|
76
|
+
}
|
|
77
|
+
set size(v) {
|
|
78
|
+
this.setAttribute("size", v);
|
|
79
|
+
}
|
|
80
|
+
get strokeWidth() {
|
|
81
|
+
return Number(this.getAttr("stroke-width", "8")) || 8;
|
|
82
|
+
}
|
|
83
|
+
set strokeWidth(v) {
|
|
84
|
+
this.setAttribute("stroke-width", String(v));
|
|
85
|
+
}
|
|
86
|
+
get valueColor() {
|
|
87
|
+
return this.getAttr("value-color", "");
|
|
88
|
+
}
|
|
89
|
+
set valueColor(v) {
|
|
90
|
+
this.setAttribute("value-color", v);
|
|
91
|
+
}
|
|
92
|
+
get rangeColor() {
|
|
93
|
+
return this.getAttr("range-color", "");
|
|
94
|
+
}
|
|
95
|
+
set rangeColor(v) {
|
|
96
|
+
this.setAttribute("range-color", v);
|
|
97
|
+
}
|
|
98
|
+
get readonly() {
|
|
99
|
+
return this.hasAttr("readonly");
|
|
100
|
+
}
|
|
101
|
+
set readonly(v) {
|
|
102
|
+
this.toggleAttr("readonly", Boolean(v));
|
|
103
|
+
}
|
|
104
|
+
get disabled() {
|
|
105
|
+
return this.hasAttr("disabled");
|
|
106
|
+
}
|
|
107
|
+
set disabled(v) {
|
|
108
|
+
this.toggleAttr("disabled", Boolean(v));
|
|
109
|
+
}
|
|
110
|
+
get valueTemplate() {
|
|
111
|
+
return this.getAttr("value-template", "{value}");
|
|
112
|
+
}
|
|
113
|
+
set valueTemplate(v) {
|
|
114
|
+
this.setAttribute("value-template", v);
|
|
115
|
+
}
|
|
116
|
+
render() {
|
|
117
|
+
const min = this.min;
|
|
118
|
+
const max = this.max;
|
|
119
|
+
const value = this.clampValue(this.value);
|
|
120
|
+
const range = max - min;
|
|
121
|
+
const pct = range > 0 ? (value - min) / range : 0;
|
|
122
|
+
const sizeNum = this.getSizeNum();
|
|
123
|
+
const strokeW = this.strokeWidth;
|
|
124
|
+
const radius = (sizeNum - strokeW) / 2;
|
|
125
|
+
const circumference = 2 * Math.PI * radius;
|
|
126
|
+
const offset = circumference * (1 - pct);
|
|
127
|
+
const valueColorStyle = this.valueColor ? `--_value-color: ${this.valueColor};` : "";
|
|
128
|
+
const rangeColorStyle = this.rangeColor ? `--_range-color: ${this.rangeColor};` : "";
|
|
129
|
+
const displayValue = this.valueTemplate.replace("{value}", String(Math.round(value)));
|
|
130
|
+
this.setTemplate(`
|
|
131
|
+
<div class="knob" part="knob" tabindex="${this.disabled ? "-1" : "0"}"
|
|
132
|
+
role="slider" aria-valuenow="${value}" aria-valuemin="${min}" aria-valuemax="${max}"
|
|
133
|
+
aria-readonly="${this.readonly}" aria-disabled="${this.disabled}"
|
|
134
|
+
style="${valueColorStyle}${rangeColorStyle}">
|
|
135
|
+
<svg viewBox="0 0 ${sizeNum} ${sizeNum}" part="svg">
|
|
136
|
+
<circle class="track" part="track"
|
|
137
|
+
cx="${sizeNum / 2}" cy="${sizeNum / 2}" r="${radius}" />
|
|
138
|
+
<circle class="value" part="value"
|
|
139
|
+
cx="${sizeNum / 2}" cy="${sizeNum / 2}" r="${radius}"
|
|
140
|
+
stroke-dasharray="${circumference}"
|
|
141
|
+
stroke-dashoffset="${offset}" />
|
|
142
|
+
</svg>
|
|
143
|
+
<div class="label" part="label">${displayValue}</div>
|
|
144
|
+
</div>
|
|
145
|
+
`);
|
|
146
|
+
this.attachListeners();
|
|
147
|
+
}
|
|
148
|
+
getSizeNum() {
|
|
149
|
+
const s = this.size;
|
|
150
|
+
if (s === "sm") return 60;
|
|
151
|
+
if (s === "lg") return 140;
|
|
152
|
+
return 100;
|
|
153
|
+
}
|
|
154
|
+
clampValue(v) {
|
|
155
|
+
const min = this.min;
|
|
156
|
+
const max = this.max;
|
|
157
|
+
const step = this.step;
|
|
158
|
+
let clamped = Math.min(max, Math.max(min, v));
|
|
159
|
+
if (step > 0) {
|
|
160
|
+
clamped = Math.round((clamped - min) / step) * step + min;
|
|
161
|
+
clamped = Math.min(max, Math.max(min, clamped));
|
|
162
|
+
}
|
|
163
|
+
return clamped;
|
|
164
|
+
}
|
|
165
|
+
emitChange(newValue) {
|
|
166
|
+
const clamped = this.clampValue(newValue);
|
|
167
|
+
if (clamped !== this.value) {
|
|
168
|
+
this.value = clamped;
|
|
169
|
+
this.dispatchEvent(
|
|
170
|
+
new CustomEvent("change", {
|
|
171
|
+
bubbles: true,
|
|
172
|
+
composed: true,
|
|
173
|
+
detail: { value: clamped }
|
|
174
|
+
})
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
attachListeners() {
|
|
179
|
+
const knob = this.root.querySelector(".knob");
|
|
180
|
+
if (!knob) return;
|
|
181
|
+
knob.addEventListener("mousedown", (e) => {
|
|
182
|
+
if (this.readonly || this.disabled) return;
|
|
183
|
+
e.preventDefault();
|
|
184
|
+
this._isDragging = true;
|
|
185
|
+
this._startY = e.clientY;
|
|
186
|
+
this._startValue = this.value;
|
|
187
|
+
knob.focus();
|
|
188
|
+
document.addEventListener("mousemove", this._onMouseMove);
|
|
189
|
+
document.addEventListener("mouseup", this._onMouseUp);
|
|
190
|
+
});
|
|
191
|
+
knob.addEventListener("touchstart", (e) => {
|
|
192
|
+
if (this.readonly || this.disabled) return;
|
|
193
|
+
e.preventDefault();
|
|
194
|
+
this._isDragging = true;
|
|
195
|
+
this._startY = e.touches[0].clientY;
|
|
196
|
+
this._startValue = this.value;
|
|
197
|
+
knob.focus();
|
|
198
|
+
}, { passive: false });
|
|
199
|
+
knob.addEventListener("touchmove", (e) => {
|
|
200
|
+
if (!this._isDragging || this.readonly || this.disabled) return;
|
|
201
|
+
e.preventDefault();
|
|
202
|
+
const deltaY = this._startY - e.touches[0].clientY;
|
|
203
|
+
const sensitivity = (this.max - this.min) / 100;
|
|
204
|
+
this.emitChange(this._startValue + deltaY * sensitivity);
|
|
205
|
+
}, { passive: false });
|
|
206
|
+
knob.addEventListener("touchend", () => {
|
|
207
|
+
this._isDragging = false;
|
|
208
|
+
});
|
|
209
|
+
knob.addEventListener("keydown", (e) => {
|
|
210
|
+
if (this.readonly || this.disabled) return;
|
|
211
|
+
const step = this.step;
|
|
212
|
+
switch (e.key) {
|
|
213
|
+
case "ArrowUp":
|
|
214
|
+
case "ArrowRight":
|
|
215
|
+
e.preventDefault();
|
|
216
|
+
this.emitChange(this.value + step);
|
|
217
|
+
break;
|
|
218
|
+
case "ArrowDown":
|
|
219
|
+
case "ArrowLeft":
|
|
220
|
+
e.preventDefault();
|
|
221
|
+
this.emitChange(this.value - step);
|
|
222
|
+
break;
|
|
223
|
+
case "Home":
|
|
224
|
+
e.preventDefault();
|
|
225
|
+
this.emitChange(this.min);
|
|
226
|
+
break;
|
|
227
|
+
case "End":
|
|
228
|
+
e.preventDefault();
|
|
229
|
+
this.emitChange(this.max);
|
|
230
|
+
break;
|
|
231
|
+
case "PageUp":
|
|
232
|
+
e.preventDefault();
|
|
233
|
+
this.emitChange(this.value + step * 10);
|
|
234
|
+
break;
|
|
235
|
+
case "PageDown":
|
|
236
|
+
e.preventDefault();
|
|
237
|
+
this.emitChange(this.value - step * 10);
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
disconnectedCallback() {
|
|
243
|
+
document.removeEventListener("mousemove", this._onMouseMove);
|
|
244
|
+
document.removeEventListener("mouseup", this._onMouseUp);
|
|
245
|
+
super.disconnectedCallback();
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
_FxKnob.styles = css`
|
|
249
|
+
:host {
|
|
250
|
+
display: inline-flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
justify-content: center;
|
|
253
|
+
font-family: var(--fx-font-family);
|
|
254
|
+
font-size: var(--fx-font-size);
|
|
255
|
+
--_size: 100px;
|
|
256
|
+
--_stroke-width: 8px;
|
|
257
|
+
--_value-color: var(--fx-color-primary);
|
|
258
|
+
--_range-color: var(--fx-border-default);
|
|
259
|
+
}
|
|
260
|
+
:host([size='sm']) { --_size: 60px; }
|
|
261
|
+
:host([size='lg']) { --_size: 140px; }
|
|
262
|
+
.knob {
|
|
263
|
+
position: relative;
|
|
264
|
+
width: var(--_size);
|
|
265
|
+
height: var(--_size);
|
|
266
|
+
cursor: pointer;
|
|
267
|
+
user-select: none;
|
|
268
|
+
touch-action: none;
|
|
269
|
+
}
|
|
270
|
+
:host([readonly]) .knob,
|
|
271
|
+
:host([disabled]) .knob {
|
|
272
|
+
cursor: default;
|
|
273
|
+
pointer-events: none;
|
|
274
|
+
}
|
|
275
|
+
:host([disabled]) .knob {
|
|
276
|
+
opacity: 0.55;
|
|
277
|
+
}
|
|
278
|
+
svg {
|
|
279
|
+
width: 100%;
|
|
280
|
+
height: 100%;
|
|
281
|
+
transform: rotate(-90deg);
|
|
282
|
+
}
|
|
283
|
+
.track {
|
|
284
|
+
fill: none;
|
|
285
|
+
stroke: var(--_range-color);
|
|
286
|
+
stroke-width: var(--_stroke-width);
|
|
287
|
+
}
|
|
288
|
+
.value {
|
|
289
|
+
fill: none;
|
|
290
|
+
stroke: var(--_value-color);
|
|
291
|
+
stroke-width: var(--_stroke-width);
|
|
292
|
+
stroke-linecap: round;
|
|
293
|
+
transition: stroke-dashoffset var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
294
|
+
}
|
|
295
|
+
.label {
|
|
296
|
+
position: absolute;
|
|
297
|
+
inset: 0;
|
|
298
|
+
display: flex;
|
|
299
|
+
align-items: center;
|
|
300
|
+
justify-content: center;
|
|
301
|
+
font-weight: 600;
|
|
302
|
+
color: var(--fx-text-default);
|
|
303
|
+
pointer-events: none;
|
|
304
|
+
}
|
|
305
|
+
:host([size='sm']) .label { font-size: 11px; }
|
|
306
|
+
:host([size='md']) .label { font-size: 14px; }
|
|
307
|
+
:host([size='lg']) .label { font-size: 18px; }
|
|
308
|
+
.knob:focus-visible {
|
|
309
|
+
outline: none;
|
|
310
|
+
}
|
|
311
|
+
.knob:focus-visible svg {
|
|
312
|
+
filter: drop-shadow(var(--fx-effect-focus-ring, 0 0 0 3px color-mix(in srgb, var(--fx-color-primary) 22%, transparent)));
|
|
313
|
+
}
|
|
314
|
+
`;
|
|
315
|
+
let FxKnob = _FxKnob;
|
|
316
|
+
function defineFxKnob() {
|
|
317
|
+
return defineElement("fx-knob", FxKnob);
|
|
318
|
+
}
|
|
319
|
+
export {
|
|
320
|
+
FxKnob,
|
|
321
|
+
defineFxKnob
|
|
322
|
+
};
|
|
323
|
+
//# sourceMappingURL=knob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knob.js","sources":["../../../src/components/knob/knob.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\r\nimport { css } from '../../core/css';\r\nimport { defineElement } from '../../core/define';\r\n\r\n/**\r\n * <fx-knob> - Controle giratorio circular para ajuste de valor.\r\n *\r\n * Similar ao Knob do PrimeVue, permite ajustar um valor arrastando o mouse\r\n * ou usando as setas do teclado. Exibe um arco de progresso circular com\r\n * o valor central configuravel via valueTemplate.\r\n *\r\n * Atributos: value, min, max, step, size, strokeWidth, valueColor, rangeColor,\r\n * readonly, disabled, valueTemplate.\r\n * Evento: `change` (composed, detail: { value }).\r\n */\r\nexport class FxKnob extends FxElement {\r\n static override styles = css`\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-family: var(--fx-font-family);\r\n font-size: var(--fx-font-size);\r\n --_size: 100px;\r\n --_stroke-width: 8px;\r\n --_value-color: var(--fx-color-primary);\r\n --_range-color: var(--fx-border-default);\r\n }\r\n :host([size='sm']) { --_size: 60px; }\r\n :host([size='lg']) { --_size: 140px; }\r\n .knob {\r\n position: relative;\r\n width: var(--_size);\r\n height: var(--_size);\r\n cursor: pointer;\r\n user-select: none;\r\n touch-action: none;\r\n }\r\n :host([readonly]) .knob,\r\n :host([disabled]) .knob {\r\n cursor: default;\r\n pointer-events: none;\r\n }\r\n :host([disabled]) .knob {\r\n opacity: 0.55;\r\n }\r\n svg {\r\n width: 100%;\r\n height: 100%;\r\n transform: rotate(-90deg);\r\n }\r\n .track {\r\n fill: none;\r\n stroke: var(--_range-color);\r\n stroke-width: var(--_stroke-width);\r\n }\r\n .value {\r\n fill: none;\r\n stroke: var(--_value-color);\r\n stroke-width: var(--_stroke-width);\r\n stroke-linecap: round;\r\n transition: stroke-dashoffset var(--fx-motion-duration-fast) var(--fx-motion-easing);\r\n }\r\n .label {\r\n position: absolute;\r\n inset: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-weight: 600;\r\n color: var(--fx-text-default);\r\n pointer-events: none;\r\n }\r\n :host([size='sm']) .label { font-size: 11px; }\r\n :host([size='md']) .label { font-size: 14px; }\r\n :host([size='lg']) .label { font-size: 18px; }\r\n .knob:focus-visible {\r\n outline: none;\r\n }\r\n .knob:focus-visible svg {\r\n filter: drop-shadow(var(--fx-effect-focus-ring, 0 0 0 3px color-mix(in srgb, var(--fx-color-primary) 22%, transparent)));\r\n }\r\n `;\r\n\r\n static override get observedAttributes(): string[] {\r\n return [\r\n 'value',\r\n 'min',\r\n 'max',\r\n 'step',\r\n 'size',\r\n 'stroke-width',\r\n 'value-color',\r\n 'range-color',\r\n 'readonly',\r\n 'disabled',\r\n 'value-template',\r\n ];\r\n }\r\n\r\n get value(): number {\r\n return this.clampValue(Number(this.getAttr('value', '0')) || 0);\r\n }\r\n set value(v: number) {\r\n if (this.readonly || this.disabled) return;\r\n const clamped = this.clampValue(v);\r\n const current = this.clampValue(Number(this.getAttr('value', '0')) || 0);\r\n if (clamped !== current) {\r\n this.setAttribute('value', String(clamped));\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { value: clamped },\r\n }),\r\n );\r\n }\r\n }\r\n\r\n get min(): number {\r\n return Number(this.getAttr('min', '0')) || 0;\r\n }\r\n set min(v: number) {\r\n this.setAttribute('min', String(v));\r\n }\r\n\r\n get max(): number {\r\n return Number(this.getAttr('max', '100')) || 100;\r\n }\r\n set max(v: number) {\r\n this.setAttribute('max', String(v));\r\n }\r\n\r\n get step(): number {\r\n return Number(this.getAttr('step', '1')) || 1;\r\n }\r\n set step(v: number) {\r\n this.setAttribute('step', String(v));\r\n }\r\n\r\n get size(): string {\r\n const s = this.getAttr('size', 'md');\r\n return s === 'sm' || s === 'lg' ? s : 'md';\r\n }\r\n set size(v: string) {\r\n this.setAttribute('size', v);\r\n }\r\n\r\n get strokeWidth(): number {\r\n return Number(this.getAttr('stroke-width', '8')) || 8;\r\n }\r\n set strokeWidth(v: number) {\r\n this.setAttribute('stroke-width', String(v));\r\n }\r\n\r\n get valueColor(): string {\r\n return this.getAttr('value-color', '');\r\n }\r\n set valueColor(v: string) {\r\n this.setAttribute('value-color', v);\r\n }\r\n\r\n get rangeColor(): string {\r\n return this.getAttr('range-color', '');\r\n }\r\n set rangeColor(v: string) {\r\n this.setAttribute('range-color', v);\r\n }\r\n\r\n get readonly(): boolean {\r\n return this.hasAttr('readonly');\r\n }\r\n set readonly(v: boolean) {\r\n this.toggleAttr('readonly', Boolean(v));\r\n }\r\n\r\n get disabled(): boolean {\r\n return this.hasAttr('disabled');\r\n }\r\n set disabled(v: boolean) {\r\n this.toggleAttr('disabled', Boolean(v));\r\n }\r\n\r\n get valueTemplate(): string {\r\n return this.getAttr('value-template', '{value}');\r\n }\r\n set valueTemplate(v: string) {\r\n this.setAttribute('value-template', v);\r\n }\r\n\r\n private _isDragging = false;\r\n private _startY = 0;\r\n private _startValue = 0;\r\n\r\n protected override render(): void {\r\n const min = this.min;\r\n const max = this.max;\r\n const value = this.clampValue(this.value);\r\n const range = max - min;\r\n const pct = range > 0 ? (value - min) / range : 0;\r\n\r\n const sizeNum = this.getSizeNum();\r\n const strokeW = this.strokeWidth;\r\n const radius = (sizeNum - strokeW) / 2;\r\n const circumference = 2 * Math.PI * radius;\r\n const offset = circumference * (1 - pct);\r\n\r\n const valueColorStyle = this.valueColor ? `--_value-color: ${this.valueColor};` : '';\r\n const rangeColorStyle = this.rangeColor ? `--_range-color: ${this.rangeColor};` : '';\r\n\r\n const displayValue = this.valueTemplate.replace('{value}', String(Math.round(value)));\r\n\r\n this.setTemplate(`\r\n <div class=\"knob\" part=\"knob\" tabindex=\"${this.disabled ? '-1' : '0'}\"\r\n role=\"slider\" aria-valuenow=\"${value}\" aria-valuemin=\"${min}\" aria-valuemax=\"${max}\"\r\n aria-readonly=\"${this.readonly}\" aria-disabled=\"${this.disabled}\"\r\n style=\"${valueColorStyle}${rangeColorStyle}\">\r\n <svg viewBox=\"0 0 ${sizeNum} ${sizeNum}\" part=\"svg\">\r\n <circle class=\"track\" part=\"track\"\r\n cx=\"${sizeNum / 2}\" cy=\"${sizeNum / 2}\" r=\"${radius}\" />\r\n <circle class=\"value\" part=\"value\"\r\n cx=\"${sizeNum / 2}\" cy=\"${sizeNum / 2}\" r=\"${radius}\"\r\n stroke-dasharray=\"${circumference}\"\r\n stroke-dashoffset=\"${offset}\" />\r\n </svg>\r\n <div class=\"label\" part=\"label\">${displayValue}</div>\r\n </div>\r\n `);\r\n\r\n this.attachListeners();\r\n }\r\n\r\n private getSizeNum(): number {\r\n const s = this.size;\r\n if (s === 'sm') return 60;\r\n if (s === 'lg') return 140;\r\n return 100;\r\n }\r\n\r\n private clampValue(v: number): number {\r\n const min = this.min;\r\n const max = this.max;\r\n const step = this.step;\r\n let clamped = Math.min(max, Math.max(min, v));\r\n if (step > 0) {\r\n clamped = Math.round((clamped - min) / step) * step + min;\r\n clamped = Math.min(max, Math.max(min, clamped));\r\n }\r\n return clamped;\r\n }\r\n\r\n private emitChange(newValue: number): void {\r\n const clamped = this.clampValue(newValue);\r\n if (clamped !== this.value) {\r\n this.value = clamped;\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n bubbles: true,\r\n composed: true,\r\n detail: { value: clamped },\r\n }),\r\n );\r\n }\r\n }\r\n\r\n private attachListeners(): void {\r\n const knob = this.root.querySelector<HTMLElement>('.knob');\r\n if (!knob) return;\r\n\r\n knob.addEventListener('mousedown', (e: MouseEvent) => {\r\n if (this.readonly || this.disabled) return;\r\n e.preventDefault();\r\n this._isDragging = true;\r\n this._startY = e.clientY;\r\n this._startValue = this.value;\r\n knob.focus();\r\n document.addEventListener('mousemove', this._onMouseMove);\r\n document.addEventListener('mouseup', this._onMouseUp);\r\n });\r\n\r\n knob.addEventListener('touchstart', (e: TouchEvent) => {\r\n if (this.readonly || this.disabled) return;\r\n e.preventDefault();\r\n this._isDragging = true;\r\n this._startY = e.touches[0].clientY;\r\n this._startValue = this.value;\r\n knob.focus();\r\n }, { passive: false });\r\n\r\n knob.addEventListener('touchmove', (e: TouchEvent) => {\r\n if (!this._isDragging || this.readonly || this.disabled) return;\r\n e.preventDefault();\r\n const deltaY = this._startY - e.touches[0].clientY;\r\n const sensitivity = (this.max - this.min) / 100;\r\n this.emitChange(this._startValue + deltaY * sensitivity);\r\n }, { passive: false });\r\n\r\n knob.addEventListener('touchend', () => {\r\n this._isDragging = false;\r\n });\r\n\r\n knob.addEventListener('keydown', (e: KeyboardEvent) => {\r\n if (this.readonly || this.disabled) return;\r\n const step = this.step;\r\n switch (e.key) {\r\n case 'ArrowUp':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n this.emitChange(this.value + step);\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n this.emitChange(this.value - step);\r\n break;\r\n case 'Home':\r\n e.preventDefault();\r\n this.emitChange(this.min);\r\n break;\r\n case 'End':\r\n e.preventDefault();\r\n this.emitChange(this.max);\r\n break;\r\n case 'PageUp':\r\n e.preventDefault();\r\n this.emitChange(this.value + step * 10);\r\n break;\r\n case 'PageDown':\r\n e.preventDefault();\r\n this.emitChange(this.value - step * 10);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n private _onMouseMove = (e: MouseEvent): void => {\r\n if (!this._isDragging) return;\r\n const deltaY = this._startY - e.clientY;\r\n const sensitivity = (this.max - this.min) / 100;\r\n this.emitChange(this._startValue + deltaY * sensitivity);\r\n };\r\n\r\n private _onMouseUp = (): void => {\r\n this._isDragging = false;\r\n document.removeEventListener('mousemove', this._onMouseMove);\r\n document.removeEventListener('mouseup', this._onMouseUp);\r\n };\r\n\r\n protected override disconnectedCallback(): void {\r\n document.removeEventListener('mousemove', this._onMouseMove);\r\n document.removeEventListener('mouseup', this._onMouseUp);\r\n super.disconnectedCallback();\r\n }\r\n}\r\n\r\nexport function defineFxKnob(): typeof FxKnob {\r\n return defineElement('fx-knob', FxKnob);\r\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/orderlist/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/orderlist/index.ts"],"sourcesContent":["import { defineFxOrderList } from './orderlist';\n\n// Reexporta a classe para uso programático (ex.: instanceof, herança).\nexport { FxOrderList } from './orderlist';\nexport type { OrderListItem } from './orderlist';\n\n// Auto-registro: basta importar o subpath `@wrrdev/fenix-ui/orderlist`\n// para que o componente seja definido no CustomElementRegistry.\ndefineFxOrderList();\n\n"],"names":[],"mappings":";;AAQA,kBAAA;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
export interface OrderListItem {
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* <fx-orderlist> - Componente para ordenar uma colecao de itens.
|
|
7
|
+
*
|
|
8
|
+
* Permite reordenar itens arrastando ou usando botoes de controle.
|
|
9
|
+
* Suporta filtro, selecao, checkbox e templates customizados.
|
|
10
|
+
*
|
|
11
|
+
* Atributos: data, data-key, filter, filter-by, filter-placeholder, breakpoint,
|
|
12
|
+
* dragdrop, selection-mode, striped, show-select-all.
|
|
13
|
+
* Evento: `reorder` (composed, detail: { items }).
|
|
14
|
+
* Evento: `selection-change` (composed, detail: { selection }).
|
|
15
|
+
*/
|
|
16
|
+
export declare class FxOrderList extends FxElement {
|
|
17
|
+
static styles: string;
|
|
18
|
+
static get observedAttributes(): string[];
|
|
19
|
+
set data(value: OrderListItem[]);
|
|
20
|
+
get data(): OrderListItem[];
|
|
21
|
+
private _data;
|
|
22
|
+
private _filteredData;
|
|
23
|
+
set selection(value: OrderListItem[]);
|
|
24
|
+
get selection(): OrderListItem[];
|
|
25
|
+
private _selection;
|
|
26
|
+
get dataKey(): string;
|
|
27
|
+
set dataKey(v: string);
|
|
28
|
+
get filter(): boolean;
|
|
29
|
+
set filter(v: boolean);
|
|
30
|
+
get filterBy(): string;
|
|
31
|
+
set filterBy(v: string);
|
|
32
|
+
get filterPlaceholder(): string;
|
|
33
|
+
set filterPlaceholder(v: string);
|
|
34
|
+
get breakpoint(): string;
|
|
35
|
+
set breakpoint(v: string);
|
|
36
|
+
get dragdrop(): boolean;
|
|
37
|
+
set dragdrop(v: boolean);
|
|
38
|
+
get striped(): boolean;
|
|
39
|
+
set striped(v: boolean);
|
|
40
|
+
get selectionMode(): string;
|
|
41
|
+
set selectionMode(v: string);
|
|
42
|
+
get showSelectAll(): boolean;
|
|
43
|
+
set showSelectAll(v: boolean);
|
|
44
|
+
get filterValue(): string;
|
|
45
|
+
set filterValue(v: string);
|
|
46
|
+
private _filterValue;
|
|
47
|
+
private _draggedIndex;
|
|
48
|
+
private _listenersAttached;
|
|
49
|
+
private _optionTemplate;
|
|
50
|
+
setOptionTemplate(template: (item: OrderListItem) => string): void;
|
|
51
|
+
protected connectedCallback(): void;
|
|
52
|
+
protected attributeChangedCallback(): void;
|
|
53
|
+
private _parseDataAttribute;
|
|
54
|
+
private _applyFilter;
|
|
55
|
+
private _getDisplayData;
|
|
56
|
+
private _getItemKey;
|
|
57
|
+
private _getItemLabel;
|
|
58
|
+
private _isSelected;
|
|
59
|
+
private _moveItem;
|
|
60
|
+
private _getActualIndex;
|
|
61
|
+
private _emitReorder;
|
|
62
|
+
private _emitSelectionChange;
|
|
63
|
+
private _toggleSelection;
|
|
64
|
+
private _selectAll;
|
|
65
|
+
private _deselectAll;
|
|
66
|
+
private _toggleSelectAll;
|
|
67
|
+
protected render(): void;
|
|
68
|
+
private _attachListeners;
|
|
69
|
+
private _attachItemListeners;
|
|
70
|
+
private _updateListDisplay;
|
|
71
|
+
private _handleMoveAction;
|
|
72
|
+
private _moveSelectedToStart;
|
|
73
|
+
private _moveSelectedToEnd;
|
|
74
|
+
private _moveSelectedByOne;
|
|
75
|
+
private _updateControlsState;
|
|
76
|
+
}
|
|
77
|
+
export declare function defineFxOrderList(): typeof FxOrderList;
|
|
78
|
+
//# sourceMappingURL=orderlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderlist.d.ts","sourceRoot":"","sources":["../../../src/components/orderlist/orderlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,OAAgB,MAAM,SA4ElB;IAEJ,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAc7C;IAEL,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,EAI9B;IACD,IAAI,IAAI,IAAI,aAAa,EAAE,CAE1B;IACD,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,aAAa,CAAgC;IAErD,IAAI,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,EAGnC;IACD,IAAI,SAAS,IAAI,aAAa,EAAE,CAE/B;IACC,OAAO,CAAC,UAAU,CAAuB;IAE3C,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,EAEpB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IACC,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAErB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IACD,IAAI,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAE9B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,MAAM,EAEvB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IACC,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAG1B;IACD,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,EAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IACC,IAAI,aAAa,CAAC,CAAC,EAAE,OAAO,EAE7B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAIxB;IACD,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAkD;IAEzE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,GAAG,IAAI;cAK/C,iBAAiB,IAAI,IAAI;cAKzB,wBAAwB,IAAI,IAAI;IAOnD,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,gBAAgB;cASL,MAAM,IAAI,IAAI;IAsFjC,OAAO,CAAC,gBAAgB;IAqExB,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,kBAAkB;IA+C1B,OAAO,CAAC,oBAAoB;CA2B7B;AAMD,wBAAgB,iBAAiB,IAAI,OAAO,WAAW,CAEtD"}
|