@wrrdev/fenix-ui 1.0.6 → 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 -196
|
@@ -21,7 +21,18 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
21
21
|
this.pickEnd = null;
|
|
22
22
|
}
|
|
23
23
|
static get observedAttributes() {
|
|
24
|
-
return [
|
|
24
|
+
return [
|
|
25
|
+
"value",
|
|
26
|
+
"start",
|
|
27
|
+
"end",
|
|
28
|
+
"min",
|
|
29
|
+
"max",
|
|
30
|
+
"range",
|
|
31
|
+
"mode",
|
|
32
|
+
"values",
|
|
33
|
+
"locale",
|
|
34
|
+
"disabled"
|
|
35
|
+
];
|
|
25
36
|
}
|
|
26
37
|
/** Modo de seleção: 'single' | 'range' | 'multiple'. */
|
|
27
38
|
get mode() {
|
|
@@ -89,7 +100,11 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
89
100
|
return key(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
90
101
|
}
|
|
91
102
|
keyToDate(k) {
|
|
92
|
-
return new Date(
|
|
103
|
+
return new Date(
|
|
104
|
+
Math.floor(k / 1e4),
|
|
105
|
+
Math.floor(k / 100) % 100 - 1,
|
|
106
|
+
k % 100
|
|
107
|
+
);
|
|
93
108
|
}
|
|
94
109
|
iso(k) {
|
|
95
110
|
const d = this.keyToDate(k);
|
|
@@ -98,7 +113,9 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
98
113
|
}
|
|
99
114
|
/** Seleção atual para pintura (chaves). */
|
|
100
115
|
selection() {
|
|
101
|
-
const multi = new Set(
|
|
116
|
+
const multi = new Set(
|
|
117
|
+
this.values.map((iso) => parseBound(iso)?.lo ?? 0).filter(Boolean)
|
|
118
|
+
);
|
|
102
119
|
if (this.mode === "range") {
|
|
103
120
|
let s = this.pickStart;
|
|
104
121
|
let e = this.pickEnd;
|
|
@@ -122,13 +139,31 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
122
139
|
};
|
|
123
140
|
this.setAttribute("start", detail.start);
|
|
124
141
|
this.setAttribute("end", detail.end);
|
|
125
|
-
this.dispatchEvent(
|
|
142
|
+
this.dispatchEvent(
|
|
143
|
+
new CustomEvent("change", {
|
|
144
|
+
bubbles: true,
|
|
145
|
+
composed: true,
|
|
146
|
+
detail
|
|
147
|
+
})
|
|
148
|
+
);
|
|
126
149
|
} else if (this.mode === "multiple") {
|
|
127
150
|
const values = this.values;
|
|
128
|
-
this.dispatchEvent(
|
|
151
|
+
this.dispatchEvent(
|
|
152
|
+
new CustomEvent("change", {
|
|
153
|
+
bubbles: true,
|
|
154
|
+
composed: true,
|
|
155
|
+
detail: { values }
|
|
156
|
+
})
|
|
157
|
+
);
|
|
129
158
|
} else {
|
|
130
159
|
const value = this.getAttr("value");
|
|
131
|
-
this.dispatchEvent(
|
|
160
|
+
this.dispatchEvent(
|
|
161
|
+
new CustomEvent("change", {
|
|
162
|
+
bubbles: true,
|
|
163
|
+
composed: true,
|
|
164
|
+
detail: { value }
|
|
165
|
+
})
|
|
166
|
+
);
|
|
132
167
|
}
|
|
133
168
|
}
|
|
134
169
|
pickDay(k) {
|
|
@@ -141,7 +176,8 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
141
176
|
this.render();
|
|
142
177
|
return;
|
|
143
178
|
}
|
|
144
|
-
if (k < this.pickStart)
|
|
179
|
+
if (k < this.pickStart)
|
|
180
|
+
[this.pickStart, this.pickEnd] = [k, this.pickStart];
|
|
145
181
|
else this.pickEnd = k;
|
|
146
182
|
this.emit();
|
|
147
183
|
} else if (this.mode === "multiple") {
|
|
@@ -173,7 +209,10 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
173
209
|
const sel = this.selection();
|
|
174
210
|
const loc = this.locale();
|
|
175
211
|
const titles = {
|
|
176
|
-
days: this.fmt(
|
|
212
|
+
days: this.fmt(
|
|
213
|
+
{ month: "long", year: "numeric" },
|
|
214
|
+
new Date(this.cursor.y, this.cursor.m, 1)
|
|
215
|
+
),
|
|
177
216
|
months: String(this.cursor.y),
|
|
178
217
|
years: `${Math.floor(this.cursor.y / 12) * 12} – ${Math.floor(this.cursor.y / 12) * 12 + 11}`
|
|
179
218
|
};
|
|
@@ -207,7 +246,10 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
207
246
|
<div class="grid ${this.view}">${cells}</div>
|
|
208
247
|
`);
|
|
209
248
|
this.root.querySelectorAll("[data-nav]").forEach(
|
|
210
|
-
(b) => b.addEventListener(
|
|
249
|
+
(b) => b.addEventListener(
|
|
250
|
+
"click",
|
|
251
|
+
() => this.navigate(Number(b.dataset.nav))
|
|
252
|
+
)
|
|
211
253
|
);
|
|
212
254
|
const gotoBtn = this.root.querySelector("[data-goto]");
|
|
213
255
|
gotoBtn?.addEventListener("click", () => {
|
|
@@ -215,7 +257,10 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
215
257
|
this.render();
|
|
216
258
|
});
|
|
217
259
|
this.root.querySelectorAll("[data-day]").forEach(
|
|
218
|
-
(b) => b.addEventListener(
|
|
260
|
+
(b) => b.addEventListener(
|
|
261
|
+
"click",
|
|
262
|
+
() => this.pickDay(Number(b.dataset.day))
|
|
263
|
+
)
|
|
219
264
|
);
|
|
220
265
|
this.root.querySelectorAll("[data-month]").forEach(
|
|
221
266
|
(b) => b.addEventListener("click", () => {
|
|
@@ -246,95 +291,148 @@ const _FxCalendar = class _FxCalendar extends FxElement {
|
|
|
246
291
|
const k = key(y, m + 1, d);
|
|
247
292
|
const isSel = sel.single === k || sel.start === k || sel.end === k || sel.multi.has(k);
|
|
248
293
|
const inRange = sel.start !== null && sel.end !== null && k > sel.start && k < sel.end;
|
|
249
|
-
const cls = [
|
|
294
|
+
const cls = [
|
|
295
|
+
"cell",
|
|
296
|
+
isSel ? "sel" : "",
|
|
297
|
+
inRange ? "in-range" : "",
|
|
298
|
+
k === todayK ? "today" : ""
|
|
299
|
+
].filter(Boolean).join(" ");
|
|
250
300
|
html += `<button type="button" class="${cls}" data-day="${k}" ${this.dayDisabled(y, m, d) ? "disabled" : ""}>${d}</button>`;
|
|
251
301
|
}
|
|
252
302
|
return html;
|
|
253
303
|
}
|
|
254
304
|
};
|
|
255
305
|
_FxCalendar.styles = css`
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
306
|
+
:host {
|
|
307
|
+
display: inline-block;
|
|
308
|
+
font-family: var(--fx-font-family);
|
|
309
|
+
font-size: var(--fx-font-size);
|
|
310
|
+
color: var(--fx-text-default);
|
|
311
|
+
background: var(--fx-surface-background);
|
|
312
|
+
border: 1px solid var(--fx-border-default);
|
|
313
|
+
border-radius: var(--fx-radius-md);
|
|
314
|
+
box-shadow: var(--fx-shadow-sm);
|
|
315
|
+
padding: var(--fx-space-sm);
|
|
316
|
+
user-select: none;
|
|
317
|
+
}
|
|
318
|
+
:host([disabled]) {
|
|
319
|
+
opacity: 0.55;
|
|
320
|
+
pointer-events: none;
|
|
321
|
+
}
|
|
322
|
+
.head {
|
|
323
|
+
display: flex;
|
|
324
|
+
height: 48px;
|
|
325
|
+
align-items: center;
|
|
326
|
+
justify-content: space-between;
|
|
327
|
+
gap: var(--fx-space-xs);
|
|
328
|
+
margin-bottom: var(--fx-space-xs);
|
|
329
|
+
border-bottom: 1px solid var(--fx-border-default);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.title {
|
|
333
|
+
min-width: 24px;
|
|
334
|
+
border: none;
|
|
335
|
+
background: none;
|
|
336
|
+
color: var(--fx-text-default);
|
|
337
|
+
cursor: pointer;
|
|
338
|
+
font: inherit;
|
|
339
|
+
border-radius: var(--fx-radius-sm);
|
|
340
|
+
}
|
|
341
|
+
.nav {
|
|
270
342
|
display: flex;
|
|
271
343
|
align-items: center;
|
|
272
|
-
justify-content: space-between;
|
|
273
|
-
gap: var(--fx-space-xs);
|
|
274
|
-
margin-bottom: var(--fx-space-xs);
|
|
275
|
-
}
|
|
276
|
-
.nav,
|
|
277
|
-
.title {
|
|
278
|
-
border: none;
|
|
279
|
-
background: none;
|
|
280
|
-
color: var(--fx-text-default);
|
|
281
|
-
cursor: pointer;
|
|
282
|
-
font: inherit;
|
|
283
|
-
border-radius: var(--fx-radius-sm);
|
|
284
|
-
padding: var(--fx-space-3xs, 4px) var(--fx-space-xs);
|
|
285
|
-
}
|
|
286
|
-
.nav:hover, .title:hover { background: var(--fx-surface-surface-hover); }
|
|
287
|
-
.title { font-weight: var(--fx-font-weight); text-transform: capitalize; flex: 1; }
|
|
288
|
-
.grid {
|
|
289
|
-
display: grid;
|
|
290
|
-
grid-template-columns: repeat(7, 34px);
|
|
291
|
-
gap: 2px;
|
|
292
|
-
}
|
|
293
|
-
.grid.months, .grid.years { grid-template-columns: repeat(4, minmax(52px, 1fr)); }
|
|
294
|
-
.wd {
|
|
295
|
-
text-align: center;
|
|
296
|
-
color: var(--fx-text-muted);
|
|
297
|
-
font-size: calc(var(--fx-font-size) - 2px);
|
|
298
|
-
padding: var(--fx-space-3xs, 4px) 0;
|
|
299
|
-
text-transform: capitalize;
|
|
300
|
-
}
|
|
301
|
-
.cell {
|
|
302
|
-
position: relative;
|
|
303
|
-
border: none;
|
|
304
|
-
background: none;
|
|
305
|
-
font: inherit;
|
|
306
|
-
color: var(--fx-text-default);
|
|
307
|
-
height: 32px;
|
|
308
|
-
border-radius: var(--fx-radius-sm);
|
|
309
|
-
cursor: pointer;
|
|
310
|
-
display: inline-flex;
|
|
311
|
-
align-items: center;
|
|
312
344
|
justify-content: center;
|
|
345
|
+
font-size: 20px;
|
|
346
|
+
border: none;
|
|
347
|
+
background: none;
|
|
348
|
+
color: var(--fx-text-muted);
|
|
349
|
+
cursor: pointer;
|
|
350
|
+
border-radius: var(--fx-radius-sm);
|
|
313
351
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
352
|
+
.nav:hover,
|
|
353
|
+
.title:hover {
|
|
354
|
+
background: var(--fx-surface-surface-hover);
|
|
355
|
+
}
|
|
356
|
+
.title {
|
|
357
|
+
padding: var(--fx-space-3xs, 4px) var(--fx-space-xs);
|
|
358
|
+
font-weight: var(--fx-font-weight);
|
|
359
|
+
text-transform: capitalize;
|
|
360
|
+
flex: 1;
|
|
361
|
+
}
|
|
362
|
+
.grid {
|
|
363
|
+
display: grid;
|
|
364
|
+
grid-template-columns: repeat(7, 34px);
|
|
365
|
+
gap: 2px;
|
|
366
|
+
}
|
|
367
|
+
.grid.months,
|
|
368
|
+
.grid.years {
|
|
369
|
+
grid-template-columns: repeat(4, minmax(52px, 1fr));
|
|
370
|
+
}
|
|
371
|
+
.wd {
|
|
372
|
+
text-align: center;
|
|
373
|
+
color: var(--fx-text-muted);
|
|
374
|
+
font-size: calc(var(--fx-font-size) - 2px);
|
|
375
|
+
padding: var(--fx-space-3xs, 4px) 0;
|
|
376
|
+
text-transform: capitalize;
|
|
377
|
+
}
|
|
378
|
+
.cell {
|
|
379
|
+
position: relative;
|
|
380
|
+
border: none;
|
|
381
|
+
background: none;
|
|
382
|
+
font: inherit;
|
|
383
|
+
color: var(--fx-text-default);
|
|
384
|
+
height: 32px;
|
|
385
|
+
border-radius: var(--fx-radius-sm);
|
|
386
|
+
cursor: pointer;
|
|
387
|
+
display: inline-flex;
|
|
388
|
+
align-items: center;
|
|
389
|
+
justify-content: center;
|
|
390
|
+
}
|
|
391
|
+
.cell:hover {
|
|
392
|
+
background: color-mix(
|
|
393
|
+
in srgb,
|
|
394
|
+
var(--fx-color-primary) 12%,
|
|
395
|
+
transparent
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
.cell.muted {
|
|
399
|
+
color: var(--fx-text-disabled);
|
|
400
|
+
}
|
|
401
|
+
.cell.today::after {
|
|
402
|
+
content: "";
|
|
403
|
+
position: absolute;
|
|
404
|
+
bottom: 3px;
|
|
405
|
+
width: 4px;
|
|
406
|
+
height: 4px;
|
|
407
|
+
border-radius: var(--fx-radius-full);
|
|
408
|
+
background: var(--fx-color-primary);
|
|
409
|
+
}
|
|
410
|
+
.cell.sel {
|
|
411
|
+
background: var(--fx-color-primary);
|
|
412
|
+
color: #fff;
|
|
413
|
+
font-weight: var(--fx-font-weight);
|
|
414
|
+
}
|
|
415
|
+
.cell.sel::after {
|
|
416
|
+
background: #fff;
|
|
417
|
+
}
|
|
418
|
+
.cell.in-range {
|
|
419
|
+
background: color-mix(
|
|
420
|
+
in srgb,
|
|
421
|
+
var(--fx-color-primary) 16%,
|
|
422
|
+
transparent
|
|
423
|
+
);
|
|
424
|
+
border-radius: 0;
|
|
425
|
+
}
|
|
426
|
+
.grid.months .cell,
|
|
427
|
+
.grid.years .cell {
|
|
428
|
+
height: 40px;
|
|
429
|
+
}
|
|
430
|
+
.cell[disabled] {
|
|
431
|
+
opacity: 0.35;
|
|
432
|
+
cursor: not-allowed;
|
|
433
|
+
pointer-events: none;
|
|
434
|
+
}
|
|
435
|
+
`;
|
|
338
436
|
let FxCalendar = _FxCalendar;
|
|
339
437
|
function defineFxCalendar() {
|
|
340
438
|
return defineElement("fx-calendar", FxCalendar);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../../src/components/calendar/calendar.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-calendar> — Calendário simples ou por período (range).\n *\n * Atributos:\n * - value=\"YYYY-MM-DD\" → seleção simples\n * - range + start/end → seleção por período\n * - min/max=\"YYYY | YYYY-MM | YYYY-MM-DD\" → limites por ano, mês ou dia\n * - locale (padrão pt-BR), disabled\n *\n * Navegação : clique no cabeçalho (mês) → grade de meses;\n * clique no ano → grade de anos; ‹ › navegam conforme a visualização.\n *\n * Evento: `change` (composed):\n * - simples: detail { value }\n * - range: detail { start, end }\n */\n\ntype View = 'days' | 'months' | 'years';\ninterface Bound {\n lo: number;\n hi: number;\n}\n\nconst key = (y: number, m1: number, d: number): number => y * 10000 + m1 * 100 + d;\n\n/** Aceita \"YYYY\", \"YYYY-MM\" ou \"YYYY-MM-DD\" e devolve [menorChave, maiorChave]. */\nfunction parseBound(raw: string): Bound | null {\n const m = /^(\\d{4})(?:-(\\d{2}))?(?:-(\\d{2}))?$/.exec(raw.trim());\n if (!m) return null;\n const y = +m[1];\n const m1 = m[2] ? +m[2] : 1;\n const d = m[3] ? +m[3] : null;\n if (d !== null) return { lo: key(y, m1, d), hi: key(y, m1, d) };\n if (m[2]) return { lo: key(y, m1, 1), hi: key(y, m1, 31) };\n return { lo: key(y, 1, 1), hi: key(y, 12, 31) };\n}\n\nexport class FxCalendar extends FxElement {\n static override styles = css`\n :host {\n display: inline-block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n color: var(--fx-text-default);\n background: var(--fx-surface-background);\n border: 1px solid var(--fx-border-default);\n border-radius: var(--fx-radius-md);\n box-shadow: var(--fx-shadow-sm);\n padding: var(--fx-space-sm);\n user-select: none;\n }\n :host([disabled]) { opacity: 0.55; pointer-events: none; }\n .head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--fx-space-xs);\n margin-bottom: var(--fx-space-xs);\n }\n .nav,\n .title {\n border: none;\n background: none;\n color: var(--fx-text-default);\n cursor: pointer;\n font: inherit;\n border-radius: var(--fx-radius-sm);\n padding: var(--fx-space-3xs, 4px) var(--fx-space-xs);\n }\n .nav:hover, .title:hover { background: var(--fx-surface-surface-hover); }\n .title { font-weight: var(--fx-font-weight); text-transform: capitalize; flex: 1; }\n .grid {\n display: grid;\n grid-template-columns: repeat(7, 34px);\n gap: 2px;\n }\n .grid.months, .grid.years { grid-template-columns: repeat(4, minmax(52px, 1fr)); }\n .wd {\n text-align: center;\n color: var(--fx-text-muted);\n font-size: calc(var(--fx-font-size) - 2px);\n padding: var(--fx-space-3xs, 4px) 0;\n text-transform: capitalize;\n }\n .cell {\n position: relative;\n border: none;\n background: none;\n font: inherit;\n color: var(--fx-text-default);\n height: 32px;\n border-radius: var(--fx-radius-sm);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .cell:hover { background: color-mix(in srgb, var(--fx-color-primary) 12%, transparent); }\n .cell.muted { color: var(--fx-text-disabled); }\n .cell.today::after {\n content: '';\n position: absolute;\n bottom: 3px;\n width: 4px;\n height: 4px;\n border-radius: var(--fx-radius-full);\n background: var(--fx-color-primary);\n }\n .cell.sel {\n background: var(--fx-color-primary);\n color: #fff;\n font-weight: var(--fx-font-weight);\n }\n .cell.sel::after { background: #fff; }\n .cell.in-range {\n background: color-mix(in srgb, var(--fx-color-primary) 16%, transparent);\n border-radius: 0;\n }\n .grid.months .cell, .grid.years .cell { height: 40px; }\n .cell[disabled] { opacity: 0.35; cursor: not-allowed; pointer-events: none; }\n `;\n\n static override get observedAttributes(): string[] {\n return ['value', 'start', 'end', 'min', 'max', 'range', 'mode', 'values', 'locale', 'disabled'];\n }\n\n private view: View = 'days';\n private cursor = { y: new Date().getFullYear(), m: new Date().getMonth() };\n /** Período em construção (chaves numéricas). */\n private pickStart: number | null = null;\n private pickEnd: number | null = null;\n\n /** Modo de seleção: 'single' | 'range' | 'multiple'. */\n get mode(): 'single' | 'range' | 'multiple' {\n const m = this.getAttr('mode');\n if (m === 'range' || m === 'multiple') return m;\n return this.hasAttr('range') ? 'range' : 'single';\n }\n set mode(m: 'single' | 'range' | 'multiple') {\n this.setAttribute('mode', m);\n }\n\n get range(): boolean {\n return this.mode === 'range';\n }\n set range(value: boolean) {\n this.toggleAttr('range', Boolean(value));\n }\n\n /** Datas selecionadas no modo multiple (CSV no atributo). */\n get values(): string[] {\n const csv = this.getAttr('values');\n return csv ? csv.split(',').map((v) => v.trim()).filter(Boolean) : [];\n }\n set values(list: string[]) {\n this.setAttribute('values', list.join(','));\n }\n\n get value(): string {\n return this.getAttr('value');\n }\n set value(v: string) {\n this.setAttribute('value', v);\n }\n\n private bounds(): { min: Bound | null; max: Bound | null } {\n return {\n min: parseBound(this.getAttr('min', '')),\n max: parseBound(this.getAttr('max', '')),\n };\n }\n\n private locale(): string {\n return this.getAttr('locale', 'pt-BR');\n }\n\n private fmt(opts: Intl.DateTimeFormatOptions, d: Date): string {\n try {\n return new Intl.DateTimeFormat(this.locale(), opts).format(d);\n } catch {\n return new Intl.DateTimeFormat('pt-BR', opts).format(d);\n }\n }\n\n private dayDisabled(y: number, m: number, d: number): boolean {\n const { min, max } = this.bounds();\n const k = key(y, m + 1, d);\n return (min !== null && k < min.lo) || (max !== null && k > max.hi);\n }\n\n private monthDisabled(y: number, m1: number): boolean {\n const { min, max } = this.bounds();\n const lo = key(y, m1, 1);\n const hi = key(y, m1, 31);\n return (min !== null && hi < min.lo) || (max !== null && lo > max.hi);\n }\n\n private yearDisabled(y: number): boolean {\n const { min, max } = this.bounds();\n const lo = key(y, 1, 1);\n const hi = key(y, 12, 31);\n return (min !== null && hi < min.lo) || (max !== null && lo > max.hi);\n }\n\n private dayKeyOf(date: Date): number {\n return key(date.getFullYear(), date.getMonth() + 1, date.getDate());\n }\n\n private keyToDate(k: number): Date {\n return new Date(Math.floor(k / 10000), (Math.floor(k / 100) % 100) - 1, k % 100);\n }\n\n private iso(k: number): string {\n const d = this.keyToDate(k);\n const p = (n: number): string => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;\n }\n\n /** Seleção atual para pintura (chaves). */\n private selection(): {\n start: number | null;\n end: number | null;\n single: number | null;\n multi: Set<number>;\n } {\n const multi = new Set(this.values.map((iso) => parseBound(iso)?.lo ?? 0).filter(Boolean));\n if (this.mode === 'range') {\n let s = this.pickStart;\n let e = this.pickEnd;\n const attrS = parseBound(this.getAttr('start', ''));\n const attrE = parseBound(this.getAttr('end', ''));\n if (s === null && attrS) s = attrS.lo;\n if (e === null && attrE) e = attrE.lo;\n return { start: s, end: e, single: null, multi };\n }\n if (this.mode === 'multiple') {\n return { start: null, end: null, single: null, multi };\n }\n const v = parseBound(this.getAttr('value', ''));\n return { start: null, end: null, single: v ? v.lo : null, multi };\n }\n\n private emit(): void {\n if (this.mode === 'range') {\n const detail = {\n start: this.pickStart !== null ? this.iso(this.pickStart) : this.getAttr('start', ''),\n end: this.pickEnd !== null ? this.iso(this.pickEnd) : this.getAttr('end', ''),\n };\n this.setAttribute('start', detail.start);\n this.setAttribute('end', detail.end);\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail }));\n } else if (this.mode === 'multiple') {\n const values = this.values;\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: { values } }));\n } else {\n const value = this.getAttr('value');\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: { value } }));\n }\n }\n\n private pickDay(k: number): void {\n if (this.mode === 'range') {\n if (this.pickStart === null || this.pickEnd !== null) {\n this.pickStart = k;\n this.pickEnd = null;\n this.setAttribute('start', this.iso(k));\n this.removeAttribute('end');\n this.render();\n return; // emite só ao completar o período\n }\n if (k < this.pickStart) [this.pickStart, this.pickEnd] = [k, this.pickStart];\n else this.pickEnd = k;\n this.emit();\n } else if (this.mode === 'multiple') {\n const set = new Set(this.values);\n const iso = this.iso(k);\n if (set.has(iso)) set.delete(iso);\n else set.add(iso);\n this.values = [...set].sort();\n this.emit();\n } else {\n this.value = this.iso(k);\n this.emit();\n }\n this.render();\n }\n\n private navigate(dir: -1 | 1): void {\n if (this.view === 'days') {\n const d = new Date(this.cursor.y, this.cursor.m + dir, 1);\n this.cursor = { y: d.getFullYear(), m: d.getMonth() };\n } else if (this.view === 'months') {\n this.cursor.y += dir;\n } else {\n this.cursor.y += dir * 12;\n }\n this.render();\n }\n\n protected override render(): void {\n const todayK = this.dayKeyOf(new Date());\n const sel = this.selection();\n const loc = this.locale();\n\n const titles: Record<View, string> = {\n days: this.fmt({ month: 'long', year: 'numeric' }, new Date(this.cursor.y, this.cursor.m, 1)),\n months: String(this.cursor.y),\n years: `${Math.floor(this.cursor.y / 12) * 12} – ${Math.floor(this.cursor.y / 12) * 12 + 11}`,\n };\n\n let cells = '';\n if (this.view === 'days') {\n const wds = [...Array(7)].map((_, i) =>\n this.fmt({ weekday: 'short' }, new Date(2024, 8, 1 + i)), // 01/09/2024 foi domingo\n );\n cells =\n wds.map((w) => `<span class=\"wd\">${w}</span>`).join('') +\n this.daysHtml(todayK, sel, loc);\n } else if (this.view === 'months') {\n cells = [...Array(12)]\n .map((_, i) => {\n const dis = this.monthDisabled(this.cursor.y, i + 1);\n return `<button type=\"button\" class=\"cell\" data-month=\"${i}\" ${dis ? 'disabled' : ''}>${this.fmt({ month: 'short' }, new Date(this.cursor.y, i, 1))}</button>`;\n })\n .join('');\n } else {\n const base = Math.floor(this.cursor.y / 12) * 12;\n cells = [...Array(12)]\n .map((_, i) => {\n const y = base + i;\n const dis = this.yearDisabled(y);\n return `<button type=\"button\" class=\"cell\" data-year=\"${y}\" ${dis ? 'disabled' : ''}>${y}</button>`;\n })\n .join('');\n }\n\n const titleAction =\n this.view === 'days'\n ? `data-goto=\"months\"`\n : this.view === 'months'\n ? `data-goto=\"years\"`\n : '';\n\n this.setTemplate(`\n <div class=\"head\">\n <button type=\"button\" class=\"nav\" data-nav=\"-1\" aria-label=\"Anterior\">‹</button>\n <button type=\"button\" class=\"title\" part=\"title\" ${titleAction}>${titles[this.view]}</button>\n <button type=\"button\" class=\"nav\" data-nav=\"1\" aria-label=\"Próximo\">›</button>\n </div>\n <div class=\"grid ${this.view}\">${cells}</div>\n `);\n\n this.root.querySelectorAll<HTMLButtonElement>('[data-nav]').forEach((b) =>\n b.addEventListener('click', () => this.navigate(Number(b.dataset.nav) as -1 | 1)),\n );\n const gotoBtn = this.root.querySelector<HTMLElement>('[data-goto]');\n gotoBtn?.addEventListener('click', () => {\n this.view = gotoBtn.dataset.goto as View;\n this.render();\n });\n\n this.root.querySelectorAll<HTMLButtonElement>('[data-day]').forEach((b) =>\n b.addEventListener('click', () => this.pickDay(Number(b.dataset.day!))),\n );\n this.root.querySelectorAll<HTMLButtonElement>('[data-month]').forEach((b) =>\n b.addEventListener('click', () => {\n this.cursor.m = Number(b.dataset.month!);\n this.view = 'days';\n this.render();\n }),\n );\n this.root.querySelectorAll<HTMLButtonElement>('[data-year]').forEach((b) =>\n b.addEventListener('click', () => {\n this.cursor.y = Number(b.dataset.year!);\n this.view = 'months';\n this.render();\n }),\n );\n }\n\n /** Grade de dias com preenchimento do mês anterior. */\n private daysHtml(todayK: number, sel: ReturnType<FxCalendar['selection']>, _loc: string): string {\n const { y, m } = this.cursor;\n const first = new Date(y, m, 1).getDay(); // 0=domingo\n const total = new Date(y, m + 1, 0).getDate();\n const prevTotal = new Date(y, m, 0).getDate();\n\n let html = '';\n for (let i = first - 1; i >= 0; i--) {\n html += `<span class=\"cell muted\">${prevTotal - i}</span>`;\n }\n for (let d = 1; d <= total; d++) {\n const k = key(y, m + 1, d);\n const isSel =\n sel.single === k || sel.start === k || sel.end === k || sel.multi.has(k);\n const inRange =\n sel.start !== null && sel.end !== null && k > sel.start && k < sel.end;\n const cls = ['cell', isSel ? 'sel' : '', inRange ? 'in-range' : '', k === todayK ? 'today' : '']\n .filter(Boolean)\n .join(' ');\n html += `<button type=\"button\" class=\"${cls}\" data-day=\"${k}\" ${this.dayDisabled(y, m, d) ? 'disabled' : ''}>${d}</button>`;\n }\n return html;\n }\n}\n\nexport function defineFxCalendar(): typeof FxCalendar {\n return defineElement('fx-calendar', FxCalendar);\n}\n\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../../src/components/calendar/calendar.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-calendar> — Calendário simples ou por período (range).\n *\n * Atributos:\n * - value=\"YYYY-MM-DD\" → seleção simples\n * - range + start/end → seleção por período\n * - min/max=\"YYYY | YYYY-MM | YYYY-MM-DD\" → limites por ano, mês ou dia\n * - locale (padrão pt-BR), disabled\n *\n * Navegação : clique no cabeçalho (mês) → grade de meses;\n * clique no ano → grade de anos; ‹ › navegam conforme a visualização.\n *\n * Evento: `change` (composed):\n * - simples: detail { value }\n * - range: detail { start, end }\n */\n\ntype View = 'days' | 'months' | 'years';\ninterface Bound {\n lo: number;\n hi: number;\n}\n\nconst key = (y: number, m1: number, d: number): number => y * 10000 + m1 * 100 + d;\n\n/** Aceita \"YYYY\", \"YYYY-MM\" ou \"YYYY-MM-DD\" e devolve [menorChave, maiorChave]. */\nfunction parseBound(raw: string): Bound | null {\n const m = /^(\\d{4})(?:-(\\d{2}))?(?:-(\\d{2}))?$/.exec(raw.trim());\n if (!m) return null;\n const y = +m[1];\n const m1 = m[2] ? +m[2] : 1;\n const d = m[3] ? +m[3] : null;\n if (d !== null) return { lo: key(y, m1, d), hi: key(y, m1, d) };\n if (m[2]) return { lo: key(y, m1, 1), hi: key(y, m1, 31) };\n return { lo: key(y, 1, 1), hi: key(y, 12, 31) };\n}\n\nexport class FxCalendar extends FxElement {\n\tstatic override styles = css`\n\t\t:host {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-family: var(--fx-font-family);\n\t\t\tfont-size: var(--fx-font-size);\n\t\t\tcolor: var(--fx-text-default);\n\t\t\tbackground: var(--fx-surface-background);\n\t\t\tborder: 1px solid var(--fx-border-default);\n\t\t\tborder-radius: var(--fx-radius-md);\n\t\t\tbox-shadow: var(--fx-shadow-sm);\n\t\t\tpadding: var(--fx-space-sm);\n\t\t\tuser-select: none;\n\t\t}\n\t\t:host([disabled]) {\n\t\t\topacity: 0.55;\n\t\t\tpointer-events: none;\n\t\t}\n\t\t.head {\n\t\t\tdisplay: flex;\n\t\t\theight: 48px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tgap: var(--fx-space-xs);\n\t\t\tmargin-bottom: var(--fx-space-xs);\n\t\t\tborder-bottom: 1px solid var(--fx-border-default);\n\t\t}\n\n\t\t.title {\n\t\t\tmin-width: 24px;\n\t\t\tborder: none;\n\t\t\tbackground: none;\n\t\t\tcolor: var(--fx-text-default);\n\t\t\tcursor: pointer;\n\t\t\tfont: inherit;\n\t\t\tborder-radius: var(--fx-radius-sm);\n\t\t}\n .nav {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n border: none;\n\t\t\tbackground: none;\n\t\t\tcolor: var(--fx-text-muted);\n\t\t\tcursor: pointer;\n\t\t\tborder-radius: var(--fx-radius-sm);\n }\n\t\t.nav:hover,\n\t\t.title:hover {\n\t\t\tbackground: var(--fx-surface-surface-hover);\n\t\t}\n\t\t.title {\n \tpadding: var(--fx-space-3xs, 4px) var(--fx-space-xs);\n\t\t\tfont-weight: var(--fx-font-weight);\n\t\t\ttext-transform: capitalize;\n\t\t\tflex: 1;\n\t\t}\n\t\t.grid {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: repeat(7, 34px);\n\t\t\tgap: 2px;\n\t\t}\n\t\t.grid.months,\n\t\t.grid.years {\n\t\t\tgrid-template-columns: repeat(4, minmax(52px, 1fr));\n\t\t}\n\t\t.wd {\n\t\t\ttext-align: center;\n\t\t\tcolor: var(--fx-text-muted);\n\t\t\tfont-size: calc(var(--fx-font-size) - 2px);\n\t\t\tpadding: var(--fx-space-3xs, 4px) 0;\n\t\t\ttext-transform: capitalize;\n\t\t}\n\t\t.cell {\n\t\t\tposition: relative;\n\t\t\tborder: none;\n\t\t\tbackground: none;\n\t\t\tfont: inherit;\n\t\t\tcolor: var(--fx-text-default);\n\t\t\theight: 32px;\n\t\t\tborder-radius: var(--fx-radius-sm);\n\t\t\tcursor: pointer;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t}\n\t\t.cell:hover {\n\t\t\tbackground: color-mix(\n\t\t\t\tin srgb,\n\t\t\t\tvar(--fx-color-primary) 12%,\n\t\t\t\ttransparent\n\t\t\t);\n\t\t}\n\t\t.cell.muted {\n\t\t\tcolor: var(--fx-text-disabled);\n\t\t}\n\t\t.cell.today::after {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\tbottom: 3px;\n\t\t\twidth: 4px;\n\t\t\theight: 4px;\n\t\t\tborder-radius: var(--fx-radius-full);\n\t\t\tbackground: var(--fx-color-primary);\n\t\t}\n\t\t.cell.sel {\n\t\t\tbackground: var(--fx-color-primary);\n\t\t\tcolor: #fff;\n\t\t\tfont-weight: var(--fx-font-weight);\n\t\t}\n\t\t.cell.sel::after {\n\t\t\tbackground: #fff;\n\t\t}\n\t\t.cell.in-range {\n\t\t\tbackground: color-mix(\n\t\t\t\tin srgb,\n\t\t\t\tvar(--fx-color-primary) 16%,\n\t\t\t\ttransparent\n\t\t\t);\n\t\t\tborder-radius: 0;\n\t\t}\n\t\t.grid.months .cell,\n\t\t.grid.years .cell {\n\t\t\theight: 40px;\n\t\t}\n\t\t.cell[disabled] {\n\t\t\topacity: 0.35;\n\t\t\tcursor: not-allowed;\n\t\t\tpointer-events: none;\n\t\t}\n\t`;\n\n\tstatic override get observedAttributes(): string[] {\n\t\treturn [\n\t\t\t\"value\",\n\t\t\t\"start\",\n\t\t\t\"end\",\n\t\t\t\"min\",\n\t\t\t\"max\",\n\t\t\t\"range\",\n\t\t\t\"mode\",\n\t\t\t\"values\",\n\t\t\t\"locale\",\n\t\t\t\"disabled\",\n\t\t];\n\t}\n\n\tprivate view: View = \"days\";\n\tprivate cursor = { y: new Date().getFullYear(), m: new Date().getMonth() };\n\t/** Período em construção (chaves numéricas). */\n\tprivate pickStart: number | null = null;\n\tprivate pickEnd: number | null = null;\n\n\t/** Modo de seleção: 'single' | 'range' | 'multiple'. */\n\tget mode(): \"single\" | \"range\" | \"multiple\" {\n\t\tconst m = this.getAttr(\"mode\");\n\t\tif (m === \"range\" || m === \"multiple\") return m;\n\t\treturn this.hasAttr(\"range\") ? \"range\" : \"single\";\n\t}\n\tset mode(m: \"single\" | \"range\" | \"multiple\") {\n\t\tthis.setAttribute(\"mode\", m);\n\t}\n\n\tget range(): boolean {\n\t\treturn this.mode === \"range\";\n\t}\n\tset range(value: boolean) {\n\t\tthis.toggleAttr(\"range\", Boolean(value));\n\t}\n\n\t/** Datas selecionadas no modo multiple (CSV no atributo). */\n\tget values(): string[] {\n\t\tconst csv = this.getAttr(\"values\");\n\t\treturn csv\n\t\t\t? csv\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((v) => v.trim())\n\t\t\t\t\t.filter(Boolean)\n\t\t\t: [];\n\t}\n\tset values(list: string[]) {\n\t\tthis.setAttribute(\"values\", list.join(\",\"));\n\t}\n\n\tget value(): string {\n\t\treturn this.getAttr(\"value\");\n\t}\n\tset value(v: string) {\n\t\tthis.setAttribute(\"value\", v);\n\t}\n\n\tprivate bounds(): { min: Bound | null; max: Bound | null } {\n\t\treturn {\n\t\t\tmin: parseBound(this.getAttr(\"min\", \"\")),\n\t\t\tmax: parseBound(this.getAttr(\"max\", \"\")),\n\t\t};\n\t}\n\n\tprivate locale(): string {\n\t\treturn this.getAttr(\"locale\", \"pt-BR\");\n\t}\n\n\tprivate fmt(opts: Intl.DateTimeFormatOptions, d: Date): string {\n\t\ttry {\n\t\t\treturn new Intl.DateTimeFormat(this.locale(), opts).format(d);\n\t\t} catch {\n\t\t\treturn new Intl.DateTimeFormat(\"pt-BR\", opts).format(d);\n\t\t}\n\t}\n\n\tprivate dayDisabled(y: number, m: number, d: number): boolean {\n\t\tconst { min, max } = this.bounds();\n\t\tconst k = key(y, m + 1, d);\n\t\treturn (min !== null && k < min.lo) || (max !== null && k > max.hi);\n\t}\n\n\tprivate monthDisabled(y: number, m1: number): boolean {\n\t\tconst { min, max } = this.bounds();\n\t\tconst lo = key(y, m1, 1);\n\t\tconst hi = key(y, m1, 31);\n\t\treturn (min !== null && hi < min.lo) || (max !== null && lo > max.hi);\n\t}\n\n\tprivate yearDisabled(y: number): boolean {\n\t\tconst { min, max } = this.bounds();\n\t\tconst lo = key(y, 1, 1);\n\t\tconst hi = key(y, 12, 31);\n\t\treturn (min !== null && hi < min.lo) || (max !== null && lo > max.hi);\n\t}\n\n\tprivate dayKeyOf(date: Date): number {\n\t\treturn key(date.getFullYear(), date.getMonth() + 1, date.getDate());\n\t}\n\n\tprivate keyToDate(k: number): Date {\n\t\treturn new Date(\n\t\t\tMath.floor(k / 10000),\n\t\t\t(Math.floor(k / 100) % 100) - 1,\n\t\t\tk % 100,\n\t\t);\n\t}\n\n\tprivate iso(k: number): string {\n\t\tconst d = this.keyToDate(k);\n\t\tconst p = (n: number): string => String(n).padStart(2, \"0\");\n\t\treturn `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;\n\t}\n\n\t/** Seleção atual para pintura (chaves). */\n\tprivate selection(): {\n\t\tstart: number | null;\n\t\tend: number | null;\n\t\tsingle: number | null;\n\t\tmulti: Set<number>;\n\t} {\n\t\tconst multi = new Set(\n\t\t\tthis.values.map((iso) => parseBound(iso)?.lo ?? 0).filter(Boolean),\n\t\t);\n\t\tif (this.mode === \"range\") {\n\t\t\tlet s = this.pickStart;\n\t\t\tlet e = this.pickEnd;\n\t\t\tconst attrS = parseBound(this.getAttr(\"start\", \"\"));\n\t\t\tconst attrE = parseBound(this.getAttr(\"end\", \"\"));\n\t\t\tif (s === null && attrS) s = attrS.lo;\n\t\t\tif (e === null && attrE) e = attrE.lo;\n\t\t\treturn { start: s, end: e, single: null, multi };\n\t\t}\n\t\tif (this.mode === \"multiple\") {\n\t\t\treturn { start: null, end: null, single: null, multi };\n\t\t}\n\t\tconst v = parseBound(this.getAttr(\"value\", \"\"));\n\t\treturn { start: null, end: null, single: v ? v.lo : null, multi };\n\t}\n\n\tprivate emit(): void {\n\t\tif (this.mode === \"range\") {\n\t\t\tconst detail = {\n\t\t\t\tstart:\n\t\t\t\t\tthis.pickStart !== null\n\t\t\t\t\t\t? this.iso(this.pickStart)\n\t\t\t\t\t\t: this.getAttr(\"start\", \"\"),\n\t\t\t\tend:\n\t\t\t\t\tthis.pickEnd !== null\n\t\t\t\t\t\t? this.iso(this.pickEnd)\n\t\t\t\t\t\t: this.getAttr(\"end\", \"\"),\n\t\t\t};\n\t\t\tthis.setAttribute(\"start\", detail.start);\n\t\t\tthis.setAttribute(\"end\", detail.end);\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(\"change\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (this.mode === \"multiple\") {\n\t\t\tconst values = this.values;\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(\"change\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { values },\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tconst value = this.getAttr(\"value\");\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(\"change\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { value },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate pickDay(k: number): void {\n\t\tif (this.mode === \"range\") {\n\t\t\tif (this.pickStart === null || this.pickEnd !== null) {\n\t\t\t\tthis.pickStart = k;\n\t\t\t\tthis.pickEnd = null;\n\t\t\t\tthis.setAttribute(\"start\", this.iso(k));\n\t\t\t\tthis.removeAttribute(\"end\");\n\t\t\t\tthis.render();\n\t\t\t\treturn; // emite só ao completar o período\n\t\t\t}\n\t\t\tif (k < this.pickStart)\n\t\t\t\t[this.pickStart, this.pickEnd] = [k, this.pickStart];\n\t\t\telse this.pickEnd = k;\n\t\t\tthis.emit();\n\t\t} else if (this.mode === \"multiple\") {\n\t\t\tconst set = new Set(this.values);\n\t\t\tconst iso = this.iso(k);\n\t\t\tif (set.has(iso)) set.delete(iso);\n\t\t\telse set.add(iso);\n\t\t\tthis.values = [...set].sort();\n\t\t\tthis.emit();\n\t\t} else {\n\t\t\tthis.value = this.iso(k);\n\t\t\tthis.emit();\n\t\t}\n\t\tthis.render();\n\t}\n\n\tprivate navigate(dir: -1 | 1): void {\n\t\tif (this.view === \"days\") {\n\t\t\tconst d = new Date(this.cursor.y, this.cursor.m + dir, 1);\n\t\t\tthis.cursor = { y: d.getFullYear(), m: d.getMonth() };\n\t\t} else if (this.view === \"months\") {\n\t\t\tthis.cursor.y += dir;\n\t\t} else {\n\t\t\tthis.cursor.y += dir * 12;\n\t\t}\n\t\tthis.render();\n\t}\n\n\tprotected override render(): void {\n\t\tconst todayK = this.dayKeyOf(new Date());\n\t\tconst sel = this.selection();\n\t\tconst loc = this.locale();\n\n\t\tconst titles: Record<View, string> = {\n\t\t\tdays: this.fmt(\n\t\t\t\t{ month: \"long\", year: \"numeric\" },\n\t\t\t\tnew Date(this.cursor.y, this.cursor.m, 1),\n\t\t\t),\n\t\t\tmonths: String(this.cursor.y),\n\t\t\tyears: `${Math.floor(this.cursor.y / 12) * 12} – ${Math.floor(this.cursor.y / 12) * 12 + 11}`,\n\t\t};\n\n\t\tlet cells = \"\";\n\t\tif (this.view === \"days\") {\n\t\t\tconst wds = [...Array(7)].map(\n\t\t\t\t(_, i) => this.fmt({ weekday: \"short\" }, new Date(2024, 8, 1 + i)), // 01/09/2024 foi domingo\n\t\t\t);\n\t\t\tcells =\n\t\t\t\twds.map((w) => `<span class=\"wd\">${w}</span>`).join(\"\") +\n\t\t\t\tthis.daysHtml(todayK, sel, loc);\n\t\t} else if (this.view === \"months\") {\n\t\t\tcells = [...Array(12)]\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst dis = this.monthDisabled(this.cursor.y, i + 1);\n\t\t\t\t\treturn `<button type=\"button\" class=\"cell\" data-month=\"${i}\" ${dis ? \"disabled\" : \"\"}>${this.fmt({ month: \"short\" }, new Date(this.cursor.y, i, 1))}</button>`;\n\t\t\t\t})\n\t\t\t\t.join(\"\");\n\t\t} else {\n\t\t\tconst base = Math.floor(this.cursor.y / 12) * 12;\n\t\t\tcells = [...Array(12)]\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst y = base + i;\n\t\t\t\t\tconst dis = this.yearDisabled(y);\n\t\t\t\t\treturn `<button type=\"button\" class=\"cell\" data-year=\"${y}\" ${dis ? \"disabled\" : \"\"}>${y}</button>`;\n\t\t\t\t})\n\t\t\t\t.join(\"\");\n\t\t}\n\n\t\tconst titleAction =\n\t\t\tthis.view === \"days\"\n\t\t\t\t? `data-goto=\"months\"`\n\t\t\t\t: this.view === \"months\"\n\t\t\t\t\t? `data-goto=\"years\"`\n\t\t\t\t\t: \"\";\n\n\t\tthis.setTemplate(`\n <div class=\"head\">\n <button type=\"button\" class=\"nav\" data-nav=\"-1\" aria-label=\"Anterior\">‹</button>\n <button type=\"button\" class=\"title\" part=\"title\" ${titleAction}>${titles[this.view]}</button>\n <button type=\"button\" class=\"nav\" data-nav=\"1\" aria-label=\"Próximo\">›</button>\n </div>\n <div class=\"grid ${this.view}\">${cells}</div>\n `);\n\n\t\tthis.root\n\t\t\t.querySelectorAll<HTMLButtonElement>(\"[data-nav]\")\n\t\t\t.forEach((b) =>\n\t\t\t\tb.addEventListener(\"click\", () =>\n\t\t\t\t\tthis.navigate(Number(b.dataset.nav) as -1 | 1),\n\t\t\t\t),\n\t\t\t);\n\t\tconst gotoBtn = this.root.querySelector<HTMLElement>(\"[data-goto]\");\n\t\tgotoBtn?.addEventListener(\"click\", () => {\n\t\t\tthis.view = gotoBtn.dataset.goto as View;\n\t\t\tthis.render();\n\t\t});\n\n\t\tthis.root\n\t\t\t.querySelectorAll<HTMLButtonElement>(\"[data-day]\")\n\t\t\t.forEach((b) =>\n\t\t\t\tb.addEventListener(\"click\", () =>\n\t\t\t\t\tthis.pickDay(Number(b.dataset.day!)),\n\t\t\t\t),\n\t\t\t);\n\t\tthis.root\n\t\t\t.querySelectorAll<HTMLButtonElement>(\"[data-month]\")\n\t\t\t.forEach((b) =>\n\t\t\t\tb.addEventListener(\"click\", () => {\n\t\t\t\t\tthis.cursor.m = Number(b.dataset.month!);\n\t\t\t\t\tthis.view = \"days\";\n\t\t\t\t\tthis.render();\n\t\t\t\t}),\n\t\t\t);\n\t\tthis.root\n\t\t\t.querySelectorAll<HTMLButtonElement>(\"[data-year]\")\n\t\t\t.forEach((b) =>\n\t\t\t\tb.addEventListener(\"click\", () => {\n\t\t\t\t\tthis.cursor.y = Number(b.dataset.year!);\n\t\t\t\t\tthis.view = \"months\";\n\t\t\t\t\tthis.render();\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\t/** Grade de dias com preenchimento do mês anterior. */\n\tprivate daysHtml(\n\t\ttodayK: number,\n\t\tsel: ReturnType<FxCalendar[\"selection\"]>,\n\t\t_loc: string,\n\t): string {\n\t\tconst { y, m } = this.cursor;\n\t\tconst first = new Date(y, m, 1).getDay(); // 0=domingo\n\t\tconst total = new Date(y, m + 1, 0).getDate();\n\t\tconst prevTotal = new Date(y, m, 0).getDate();\n\n\t\tlet html = \"\";\n\t\tfor (let i = first - 1; i >= 0; i--) {\n\t\t\thtml += `<span class=\"cell muted\">${prevTotal - i}</span>`;\n\t\t}\n\t\tfor (let d = 1; d <= total; d++) {\n\t\t\tconst k = key(y, m + 1, d);\n\t\t\tconst isSel =\n\t\t\t\tsel.single === k ||\n\t\t\t\tsel.start === k ||\n\t\t\t\tsel.end === k ||\n\t\t\t\tsel.multi.has(k);\n\t\t\tconst inRange =\n\t\t\t\tsel.start !== null &&\n\t\t\t\tsel.end !== null &&\n\t\t\t\tk > sel.start &&\n\t\t\t\tk < sel.end;\n\t\t\tconst cls = [\n\t\t\t\t\"cell\",\n\t\t\t\tisSel ? \"sel\" : \"\",\n\t\t\t\tinRange ? \"in-range\" : \"\",\n\t\t\t\tk === todayK ? \"today\" : \"\",\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \");\n\t\t\thtml += `<button type=\"button\" class=\"${cls}\" data-day=\"${k}\" ${this.dayDisabled(y, m, d) ? \"disabled\" : \"\"}>${d}</button>`;\n\t\t}\n\t\treturn html;\n\t}\n}\n\nexport function defineFxCalendar(): typeof FxCalendar {\n return defineElement('fx-calendar', FxCalendar);\n}\n\n"],"names":[],"mappings":";;;AA2BA,MAAM,MAAM,CAAC,GAAW,IAAY,MAAsB,IAAI,MAAQ,KAAK,MAAM;AAGjF,SAAS,WAAW,KAA2B;AAC7C,QAAM,IAAI,sCAAsC,KAAK,IAAI,MAAM;AAC/D,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,IAAI,CAAC,EAAE,CAAC;AACd,QAAM,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AAC1B,QAAM,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;AACzB,MAAI,MAAM,KAAM,QAAO,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,EAAA;AAC5D,MAAI,EAAE,CAAC,EAAG,QAAO,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE,EAAA;AACvD,SAAO,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE,EAAA;AAC9C;AAEO,MAAM,cAAN,MAAM,oBAAmB,UAAU;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA;AAoJN,SAAQ,OAAa;AACrB,SAAQ,SAAS,EAAE,IAAG,oBAAI,KAAA,GAAO,YAAA,GAAe,IAAG,oBAAI,KAAA,GAAO,WAAS;AAEvE,SAAQ,YAA2B;AACnC,SAAQ,UAAyB;AAAA,EAAA;AAAA,EAnBjC,WAAoB,qBAA+B;AAClD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEF;AAAA;AAAA,EASA,IAAI,OAAwC;AAC3C,UAAM,IAAI,KAAK,QAAQ,MAAM;AAC7B,QAAI,MAAM,WAAW,MAAM,WAAY,QAAO;AAC9C,WAAO,KAAK,QAAQ,OAAO,IAAI,UAAU;AAAA,EAC1C;AAAA,EACA,IAAI,KAAK,GAAoC;AAC5C,SAAK,aAAa,QAAQ,CAAC;AAAA,EAC5B;AAAA,EAEA,IAAI,QAAiB;AACpB,WAAO,KAAK,SAAS;AAAA,EACtB;AAAA,EACA,IAAI,MAAM,OAAgB;AACzB,SAAK,WAAW,SAAS,QAAQ,KAAK,CAAC;AAAA,EACxC;AAAA;AAAA,EAGA,IAAI,SAAmB;AACtB,UAAM,MAAM,KAAK,QAAQ,QAAQ;AACjC,WAAO,MACJ,IACC,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,OAAO,OAAO,IACf,CAAA;AAAA,EACJ;AAAA,EACA,IAAI,OAAO,MAAgB;AAC1B,SAAK,aAAa,UAAU,KAAK,KAAK,GAAG,CAAC;AAAA,EAC3C;AAAA,EAEA,IAAI,QAAgB;AACnB,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC5B;AAAA,EACA,IAAI,MAAM,GAAW;AACpB,SAAK,aAAa,SAAS,CAAC;AAAA,EAC7B;AAAA,EAEQ,SAAmD;AAC1D,WAAO;AAAA,MACN,KAAK,WAAW,KAAK,QAAQ,OAAO,EAAE,CAAC;AAAA,MACvC,KAAK,WAAW,KAAK,QAAQ,OAAO,EAAE,CAAC;AAAA,IAAA;AAAA,EAEzC;AAAA,EAEQ,SAAiB;AACxB,WAAO,KAAK,QAAQ,UAAU,OAAO;AAAA,EACtC;AAAA,EAEQ,IAAI,MAAkC,GAAiB;AAC9D,QAAI;AACH,aAAO,IAAI,KAAK,eAAe,KAAK,UAAU,IAAI,EAAE,OAAO,CAAC;AAAA,IAC7D,QAAQ;AACP,aAAO,IAAI,KAAK,eAAe,SAAS,IAAI,EAAE,OAAO,CAAC;AAAA,IACvD;AAAA,EACD;AAAA,EAEQ,YAAY,GAAW,GAAW,GAAoB;AAC7D,UAAM,EAAE,KAAK,QAAQ,KAAK,OAAA;AAC1B,UAAM,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC;AACzB,WAAQ,QAAQ,QAAQ,IAAI,IAAI,MAAQ,QAAQ,QAAQ,IAAI,IAAI;AAAA,EACjE;AAAA,EAEQ,cAAc,GAAW,IAAqB;AACrD,UAAM,EAAE,KAAK,QAAQ,KAAK,OAAA;AAC1B,UAAM,KAAK,IAAI,GAAG,IAAI,CAAC;AACvB,UAAM,KAAK,IAAI,GAAG,IAAI,EAAE;AACxB,WAAQ,QAAQ,QAAQ,KAAK,IAAI,MAAQ,QAAQ,QAAQ,KAAK,IAAI;AAAA,EACnE;AAAA,EAEQ,aAAa,GAAoB;AACxC,UAAM,EAAE,KAAK,QAAQ,KAAK,OAAA;AAC1B,UAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AACtB,UAAM,KAAK,IAAI,GAAG,IAAI,EAAE;AACxB,WAAQ,QAAQ,QAAQ,KAAK,IAAI,MAAQ,QAAQ,QAAQ,KAAK,IAAI;AAAA,EACnE;AAAA,EAEQ,SAAS,MAAoB;AACpC,WAAO,IAAI,KAAK,eAAe,KAAK,aAAa,GAAG,KAAK,SAAS;AAAA,EACnE;AAAA,EAEQ,UAAU,GAAiB;AAClC,WAAO,IAAI;AAAA,MACV,KAAK,MAAM,IAAI,GAAK;AAAA,MACnB,KAAK,MAAM,IAAI,GAAG,IAAI,MAAO;AAAA,MAC9B,IAAI;AAAA,IAAA;AAAA,EAEN;AAAA,EAEQ,IAAI,GAAmB;AAC9B,UAAM,IAAI,KAAK,UAAU,CAAC;AAC1B,UAAM,IAAI,CAAC,MAAsB,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AAC1D,WAAO,GAAG,EAAE,YAAA,CAAa,IAAI,EAAE,EAAE,SAAA,IAAa,CAAC,CAAC,IAAI,EAAE,EAAE,QAAA,CAAS,CAAC;AAAA,EACnE;AAAA;AAAA,EAGQ,YAKN;AACD,UAAM,QAAQ,IAAI;AAAA,MACjB,KAAK,OAAO,IAAI,CAAC,QAAQ,WAAW,GAAG,GAAG,MAAM,CAAC,EAAE,OAAO,OAAO;AAAA,IAAA;AAElE,QAAI,KAAK,SAAS,SAAS;AAC1B,UAAI,IAAI,KAAK;AACb,UAAI,IAAI,KAAK;AACb,YAAM,QAAQ,WAAW,KAAK,QAAQ,SAAS,EAAE,CAAC;AAClD,YAAM,QAAQ,WAAW,KAAK,QAAQ,OAAO,EAAE,CAAC;AAChD,UAAI,MAAM,QAAQ,MAAO,KAAI,MAAM;AACnC,UAAI,MAAM,QAAQ,MAAO,KAAI,MAAM;AACnC,aAAO,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,MAAM,MAAA;AAAA,IAC1C;AACA,QAAI,KAAK,SAAS,YAAY;AAC7B,aAAO,EAAE,OAAO,MAAM,KAAK,MAAM,QAAQ,MAAM,MAAA;AAAA,IAChD;AACA,UAAM,IAAI,WAAW,KAAK,QAAQ,SAAS,EAAE,CAAC;AAC9C,WAAO,EAAE,OAAO,MAAM,KAAK,MAAM,QAAQ,IAAI,EAAE,KAAK,MAAM,MAAA;AAAA,EAC3D;AAAA,EAEQ,OAAa;AACpB,QAAI,KAAK,SAAS,SAAS;AAC1B,YAAM,SAAS;AAAA,QACd,OACC,KAAK,cAAc,OAChB,KAAK,IAAI,KAAK,SAAS,IACvB,KAAK,QAAQ,SAAS,EAAE;AAAA,QAC5B,KACC,KAAK,YAAY,OACd,KAAK,IAAI,KAAK,OAAO,IACrB,KAAK,QAAQ,OAAO,EAAE;AAAA,MAAA;AAE3B,WAAK,aAAa,SAAS,OAAO,KAAK;AACvC,WAAK,aAAa,OAAO,OAAO,GAAG;AACnC,WAAK;AAAA,QACJ,IAAI,YAAY,UAAU;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV;AAAA,QAAA,CACA;AAAA,MAAA;AAAA,IAEH,WAAW,KAAK,SAAS,YAAY;AACpC,YAAM,SAAS,KAAK;AACpB,WAAK;AAAA,QACJ,IAAI,YAAY,UAAU;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ,EAAE,OAAA;AAAA,QAAO,CACjB;AAAA,MAAA;AAAA,IAEH,OAAO;AACN,YAAM,QAAQ,KAAK,QAAQ,OAAO;AAClC,WAAK;AAAA,QACJ,IAAI,YAAY,UAAU;AAAA,UACzB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ,EAAE,MAAA;AAAA,QAAM,CAChB;AAAA,MAAA;AAAA,IAEH;AAAA,EACD;AAAA,EAEQ,QAAQ,GAAiB;AAChC,QAAI,KAAK,SAAS,SAAS;AAC1B,UAAI,KAAK,cAAc,QAAQ,KAAK,YAAY,MAAM;AACrD,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,aAAa,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,aAAK,gBAAgB,KAAK;AAC1B,aAAK,OAAA;AACL;AAAA,MACD;AACA,UAAI,IAAI,KAAK;AACZ,SAAC,KAAK,WAAW,KAAK,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS;AAAA,gBAC1C,UAAU;AACpB,WAAK,KAAA;AAAA,IACN,WAAW,KAAK,SAAS,YAAY;AACpC,YAAM,MAAM,IAAI,IAAI,KAAK,MAAM;AAC/B,YAAM,MAAM,KAAK,IAAI,CAAC;AACtB,UAAI,IAAI,IAAI,GAAG,EAAG,KAAI,OAAO,GAAG;AAAA,UAC3B,KAAI,IAAI,GAAG;AAChB,WAAK,SAAS,CAAC,GAAG,GAAG,EAAE,KAAA;AACvB,WAAK,KAAA;AAAA,IACN,OAAO;AACN,WAAK,QAAQ,KAAK,IAAI,CAAC;AACvB,WAAK,KAAA;AAAA,IACN;AACA,SAAK,OAAA;AAAA,EACN;AAAA,EAEQ,SAAS,KAAmB;AACnC,QAAI,KAAK,SAAS,QAAQ;AACzB,YAAM,IAAI,IAAI,KAAK,KAAK,OAAO,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC;AACxD,WAAK,SAAS,EAAE,GAAG,EAAE,eAAe,GAAG,EAAE,WAAS;AAAA,IACnD,WAAW,KAAK,SAAS,UAAU;AAClC,WAAK,OAAO,KAAK;AAAA,IAClB,OAAO;AACN,WAAK,OAAO,KAAK,MAAM;AAAA,IACxB;AACA,SAAK,OAAA;AAAA,EACN;AAAA,EAEmB,SAAe;AACjC,UAAM,SAAS,KAAK,SAAS,oBAAI,MAAM;AACvC,UAAM,MAAM,KAAK,UAAA;AACjB,UAAM,MAAM,KAAK,OAAA;AAEjB,UAAM,SAA+B;AAAA,MACpC,MAAM,KAAK;AAAA,QACV,EAAE,OAAO,QAAQ,MAAM,UAAA;AAAA,QACvB,IAAI,KAAK,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,CAAC;AAAA,MAAA;AAAA,MAEzC,QAAQ,OAAO,KAAK,OAAO,CAAC;AAAA,MAC5B,OAAO,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,IAAI,KAAK,EAAE;AAAA,IAAA;AAG5F,QAAI,QAAQ;AACZ,QAAI,KAAK,SAAS,QAAQ;AACzB,YAAM,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE;AAAA,QACzB,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,SAAS,QAAA,GAAW,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;AAAA;AAAA,MAAA;AAElE,cACC,IAAI,IAAI,CAAC,MAAM,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,IACtD,KAAK,SAAS,QAAQ,KAAK,GAAG;AAAA,IAChC,WAAW,KAAK,SAAS,UAAU;AAClC,cAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,EACnB,IAAI,CAAC,GAAG,MAAM;AACd,cAAM,MAAM,KAAK,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC;AACnD,eAAO,kDAAkD,CAAC,KAAK,MAAM,aAAa,EAAE,IAAI,KAAK,IAAI,EAAE,OAAO,QAAA,GAAW,IAAI,KAAK,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AAAA,MACpJ,CAAC,EACA,KAAK,EAAE;AAAA,IACV,OAAO;AACN,YAAM,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,IAAI;AAC9C,cAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,EACnB,IAAI,CAAC,GAAG,MAAM;AACd,cAAM,IAAI,OAAO;AACjB,cAAM,MAAM,KAAK,aAAa,CAAC;AAC/B,eAAO,iDAAiD,CAAC,KAAK,MAAM,aAAa,EAAE,IAAI,CAAC;AAAA,MACzF,CAAC,EACA,KAAK,EAAE;AAAA,IACV;AAEA,UAAM,cACL,KAAK,SAAS,SACX,uBACA,KAAK,SAAS,WACb,sBACA;AAEL,SAAK,YAAY;AAAA;AAAA;AAAA,2DAGwC,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,yBAGlE,KAAK,IAAI,KAAK,KAAK;AAAA,KACvC;AAEH,SAAK,KACH,iBAAoC,YAAY,EAChD;AAAA,MAAQ,CAAC,MACT,EAAE;AAAA,QAAiB;AAAA,QAAS,MAC3B,KAAK,SAAS,OAAO,EAAE,QAAQ,GAAG,CAAW;AAAA,MAAA;AAAA,IAC9C;AAEF,UAAM,UAAU,KAAK,KAAK,cAA2B,aAAa;AAClE,aAAS,iBAAiB,SAAS,MAAM;AACxC,WAAK,OAAO,QAAQ,QAAQ;AAC5B,WAAK,OAAA;AAAA,IACN,CAAC;AAED,SAAK,KACH,iBAAoC,YAAY,EAChD;AAAA,MAAQ,CAAC,MACT,EAAE;AAAA,QAAiB;AAAA,QAAS,MAC3B,KAAK,QAAQ,OAAO,EAAE,QAAQ,GAAI,CAAC;AAAA,MAAA;AAAA,IACpC;AAEF,SAAK,KACH,iBAAoC,cAAc,EAClD;AAAA,MAAQ,CAAC,MACT,EAAE,iBAAiB,SAAS,MAAM;AACjC,aAAK,OAAO,IAAI,OAAO,EAAE,QAAQ,KAAM;AACvC,aAAK,OAAO;AACZ,aAAK,OAAA;AAAA,MACN,CAAC;AAAA,IAAA;AAEH,SAAK,KACH,iBAAoC,aAAa,EACjD;AAAA,MAAQ,CAAC,MACT,EAAE,iBAAiB,SAAS,MAAM;AACjC,aAAK,OAAO,IAAI,OAAO,EAAE,QAAQ,IAAK;AACtC,aAAK,OAAO;AACZ,aAAK,OAAA;AAAA,MACN,CAAC;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA,EAGQ,SACP,QACA,KACA,MACS;AACT,UAAM,EAAE,GAAG,EAAA,IAAM,KAAK;AACtB,UAAM,QAAQ,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE,OAAA;AAChC,UAAM,QAAQ,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,QAAA;AACpC,UAAM,YAAY,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE,QAAA;AAEpC,QAAI,OAAO;AACX,aAAS,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK;AACpC,cAAQ,4BAA4B,YAAY,CAAC;AAAA,IAClD;AACA,aAAS,IAAI,GAAG,KAAK,OAAO,KAAK;AAChC,YAAM,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC;AACzB,YAAM,QACL,IAAI,WAAW,KACf,IAAI,UAAU,KACd,IAAI,QAAQ,KACZ,IAAI,MAAM,IAAI,CAAC;AAChB,YAAM,UACL,IAAI,UAAU,QACd,IAAI,QAAQ,QACZ,IAAI,IAAI,SACR,IAAI,IAAI;AACT,YAAM,MAAM;AAAA,QACX;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,UAAU,aAAa;AAAA,QACvB,MAAM,SAAS,UAAU;AAAA,MAAA,EAExB,OAAO,OAAO,EACd,KAAK,GAAG;AACV,cAAQ,gCAAgC,GAAG,eAAe,CAAC,KAAK,KAAK,YAAY,GAAG,GAAG,CAAC,IAAI,aAAa,EAAE,IAAI,CAAC;AAAA,IACjH;AACA,WAAO;AAAA,EACR;AACD;AA3eC,YAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADnB,IAAM,aAAN;AA8eA,SAAS,mBAAsC;AACpD,SAAO,cAAc,eAAe,UAAU;AAChD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,OAAgB,MAAM,SAiCpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,IAAI,IAAI,OAAO,CAAiC;IACpD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAqC;cAEzC,MAAM,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,OAAgB,MAAM,SAiCpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,IAAI,IAAI,OAAO,CAAiC;IACpD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAqC;cAEzC,MAAM,IAAI,IAAI;CAsClC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,SAAS;IAC3C,OAAgB,MAAM,SAqBpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAAsB;IAExE,IAAI,KAAK,IAAI,MAAM,CAAkC;IACrD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAoC;cAEpC,MAAM,IAAI,IAAI;CAGlC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,UAAU,CAEpD;AACD,wBAAgB,oBAAoB,IAAI,OAAO,cAAc,CAE5D"}
|
|
@@ -20,7 +20,7 @@ const _FxDropdown = class _FxDropdown extends FxElement {
|
|
|
20
20
|
${label} ▾
|
|
21
21
|
</span>
|
|
22
22
|
<div class="panel" role="menu" part="panel">
|
|
23
|
-
${items.length ?
|
|
23
|
+
${items.length ? "" : '<div class="empty">Nenhuma ação</div>'}
|
|
24
24
|
<slot></slot>
|
|
25
25
|
</div>
|
|
26
26
|
`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","sources":["../../../src/components/dropdown/dropdown.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-dropdown> — Menu de ações em popover.\n *\n * Atributos: label (texto do trigger), position (bottom-left padrão | bottom-right).\n * Itens: <fx-dropdown-item value=\"x\">Texto</fx-dropdown-item>\n * Evento: `select` (composed, detail: { value }).\n */\nexport class FxDropdown extends FxElement {\n static override styles = css`\n :host {\n position: relative;\n display: inline-block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n }\n .trigger { min-height: var(--fx-size-md); }\n .panel {\n position: absolute;\n top: calc(100% + 4px);\n min-width: 180px;\n background: var(--fx-surface-background);\n border: 1px solid var(--fx-border-default);\n border-radius: var(--fx-radius-md);\n box-shadow: var(--fx-shadow-lg);\n padding: var(--fx-space-xs);\n z-index: var(--fx-z-dropdown, 1000);\n display: none;\n }\n :host([open]) .panel { display: block; }\n /* left = alinhado à esquerda do trigger; right = à direita; center = centrado */\n :host([position='left']) .panel,\n :host([position='bottom-left']) .panel { left: 0; right: auto; }\n :host([position='center']) .panel {\n left: 50%;\n transform: translateX(-50%);\n }\n :host([position='right']) .panel,\n :host([position='bottom-right']) .panel { right: 0; left: auto; }\n :host(:not([position])) .panel { left: 0; right: auto; }\n ::slotted(fx-dropdown-item) { display: block; }\n .empty { color: var(--fx-text-muted); font-size: calc(var(--fx-font-size) - 2px); padding: var(--fx-space-sm); }\n `;\n\n static override get observedAttributes(): string[] {\n return ['label', 'position', 'open'];\n }\n\n get open(): boolean { return this.hasAttr('open'); }\n set open(value: boolean) { this.toggleAttr('open', value); }\n\n protected override render(): void {\n const label = this.getAttr('label', 'Ações');\n const items = Array.from(this.querySelectorAll<HTMLElement>('fx-dropdown-item'));\n\n this.setTemplate(`\n <span class=\"trigger\" role=\"button\" tabindex=\"0\" part=\"trigger\"\n aria-haspopup=\"menu\" aria-expanded=\"${this.open}\">\n ${label} ▾\n </span>\n <div class=\"panel\" role=\"menu\" part=\"panel\">\n ${items.length
|
|
1
|
+
{"version":3,"file":"dropdown.js","sources":["../../../src/components/dropdown/dropdown.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-dropdown> — Menu de ações em popover.\n *\n * Atributos: label (texto do trigger), position (bottom-left padrão | bottom-right).\n * Itens: <fx-dropdown-item value=\"x\">Texto</fx-dropdown-item>\n * Evento: `select` (composed, detail: { value }).\n */\nexport class FxDropdown extends FxElement {\n static override styles = css`\n :host {\n position: relative;\n display: inline-block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n }\n .trigger { min-height: var(--fx-size-md); }\n .panel {\n position: absolute;\n top: calc(100% + 4px);\n min-width: 180px;\n background: var(--fx-surface-background);\n border: 1px solid var(--fx-border-default);\n border-radius: var(--fx-radius-md);\n box-shadow: var(--fx-shadow-lg);\n padding: var(--fx-space-xs);\n z-index: var(--fx-z-dropdown, 1000);\n display: none;\n }\n :host([open]) .panel { display: block; }\n /* left = alinhado à esquerda do trigger; right = à direita; center = centrado */\n :host([position='left']) .panel,\n :host([position='bottom-left']) .panel { left: 0; right: auto; }\n :host([position='center']) .panel {\n left: 50%;\n transform: translateX(-50%);\n }\n :host([position='right']) .panel,\n :host([position='bottom-right']) .panel { right: 0; left: auto; }\n :host(:not([position])) .panel { left: 0; right: auto; }\n ::slotted(fx-dropdown-item) { display: block; }\n .empty { color: var(--fx-text-muted); font-size: calc(var(--fx-font-size) - 2px); padding: var(--fx-space-sm); }\n `;\n\n static override get observedAttributes(): string[] {\n return ['label', 'position', 'open'];\n }\n\n get open(): boolean { return this.hasAttr('open'); }\n set open(value: boolean) { this.toggleAttr('open', value); }\n\n protected override render(): void {\n const label = this.getAttr('label', 'Ações');\n const items = Array.from(this.querySelectorAll<HTMLElement>('fx-dropdown-item'));\n\n this.setTemplate(`\n <span class=\"trigger\" role=\"button\" tabindex=\"0\" part=\"trigger\"\n aria-haspopup=\"menu\" aria-expanded=\"${this.open}\">\n ${label} ▾\n </span>\n <div class=\"panel\" role=\"menu\" part=\"panel\">\n ${items.length ? '' : '<div class=\"empty\">Nenhuma ação</div>'}\n <slot></slot>\n </div>\n `);\n\n const trigger = this.root.querySelector<HTMLElement>('.trigger');\n trigger?.addEventListener('click', (e) => {\n e.stopPropagation();\n // Fecha outros dropdowns abertos\n document.querySelectorAll('fx-dropdown[open]').forEach((d) => {\n if (d !== this) (d as FxDropdown).open = false;\n });\n this.open = !this.open;\n });\n trigger?.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this.open = !this.open; }\n });\n\n items.forEach((item) => {\n item.addEventListener('click', () => {\n this.open = false;\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true, composed: true,\n detail: { value: item.getAttribute('value') ?? '' },\n }));\n });\n });\n }\n}\n\n/**\n * <fx-dropdown-item> — Item de menu.\n */\nexport class FxDropdownItem extends FxElement {\n static override styles = css`\n :host {\n display: block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n }\n .item {\n display: block;\n width: 100%;\n text-align: left;\n border: none;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n color: var(--fx-text-default);\n padding: var(--fx-space-sm) var(--fx-space-md);\n cursor: pointer;\n border-radius: var(--fx-radius-sm);\n transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing);\n }\n .item:hover { background: color-mix(in srgb, var(--fx-color-primary) 12%, var(--fx-surface-background)); color: var(--fx-color-primary); }\n `;\n\n static override get observedAttributes(): string[] { return ['value']; }\n\n get value(): string { return this.getAttr('value'); }\n set value(v: string) { this.setAttribute('value', v); }\n\n protected override render(): void {\n this.setTemplate('<button type=\"button\" class=\"item\" part=\"item\" role=\"menuitem\"><slot></slot></button>');\n }\n}\n\nexport function defineFxDropdown(): typeof FxDropdown {\n return defineElement('fx-dropdown', FxDropdown);\n}\nexport function defineFxDropdownItem(): typeof FxDropdownItem {\n return defineElement('fx-dropdown-item', FxDropdownItem);\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,cAAN,MAAM,oBAAmB,UAAU;AAAA,EAoCxC,WAAoB,qBAA+B;AACjD,WAAO,CAAC,SAAS,YAAY,MAAM;AAAA,EACrC;AAAA,EAEA,IAAI,OAAgB;AAAE,WAAO,KAAK,QAAQ,MAAM;AAAA,EAAG;AAAA,EACnD,IAAI,KAAK,OAAgB;AAAE,SAAK,WAAW,QAAQ,KAAK;AAAA,EAAG;AAAA,EAExC,SAAe;AAChC,UAAM,QAAQ,KAAK,QAAQ,SAAS,OAAO;AAC3C,UAAM,QAAQ,MAAM,KAAK,KAAK,iBAA8B,kBAAkB,CAAC;AAE/E,SAAK,YAAY;AAAA;AAAA,8CAEyB,KAAK,IAAI;AAAA,UAC7C,KAAK;AAAA;AAAA;AAAA,UAGL,MAAM,SAAS,KAAK,uCAAuC;AAAA;AAAA;AAAA,KAGhE;AAED,UAAM,UAAU,KAAK,KAAK,cAA2B,UAAU;AAC/D,aAAS,iBAAiB,SAAS,CAAC,MAAM;AACxC,QAAE,gBAAA;AAEF,eAAS,iBAAiB,mBAAmB,EAAE,QAAQ,CAAC,MAAM;AAC5D,YAAI,MAAM,KAAO,GAAiB,OAAO;AAAA,MAC3C,CAAC;AACD,WAAK,OAAO,CAAC,KAAK;AAAA,IACpB,CAAC;AACD,aAAS,iBAAiB,WAAW,CAAC,MAAM;AAC1C,UAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AAAE,UAAE,eAAA;AAAkB,aAAK,OAAO,CAAC,KAAK;AAAA,MAAM;AAAA,IACxF,CAAC;AAED,UAAM,QAAQ,CAAC,SAAS;AACtB,WAAK,iBAAiB,SAAS,MAAM;AACnC,aAAK,OAAO;AACZ,aAAK,cAAc,IAAI,YAAY,UAAU;AAAA,UAC3C,SAAS;AAAA,UAAM,UAAU;AAAA,UACzB,QAAQ,EAAE,OAAO,KAAK,aAAa,OAAO,KAAK,GAAA;AAAA,QAAG,CACnD,CAAC;AAAA,MACJ,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAhFE,YAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADpB,IAAM,aAAN;AAsFA,MAAM,kBAAN,MAAM,wBAAuB,UAAU;AAAA,EAwB5C,WAAoB,qBAA+B;AAAE,WAAO,CAAC,OAAO;AAAA,EAAG;AAAA,EAEvE,IAAI,QAAgB;AAAE,WAAO,KAAK,QAAQ,OAAO;AAAA,EAAG;AAAA,EACpD,IAAI,MAAM,GAAW;AAAE,SAAK,aAAa,SAAS,CAAC;AAAA,EAAG;AAAA,EAEnC,SAAe;AAChC,SAAK,YAAY,uFAAuF;AAAA,EAC1G;AACF;AA/BE,gBAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADpB,IAAM,iBAAN;AAkCA,SAAS,mBAAsC;AACpD,SAAO,cAAc,eAAe,UAAU;AAChD;AACO,SAAS,uBAA8C;AAC5D,SAAO,cAAc,oBAAoB,cAAc;AACzD;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/knob/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,CAAC;AAIlB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/knob/index.ts"],"sourcesContent":["import { FxKnob, defineFxKnob } from './knob';\r\n\r\nexport { FxKnob };\r\n\r\ndefineFxKnob();\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'fx-knob': FxKnob;\r\n }\r\n}"],"names":[],"mappings":";;AAIA,aAAA;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-knob> - Controle giratorio circular para ajuste de valor.
|
|
4
|
+
*
|
|
5
|
+
* Similar ao Knob do PrimeVue, permite ajustar um valor arrastando o mouse
|
|
6
|
+
* ou usando as setas do teclado. Exibe um arco de progresso circular com
|
|
7
|
+
* o valor central configuravel via valueTemplate.
|
|
8
|
+
*
|
|
9
|
+
* Atributos: value, min, max, step, size, strokeWidth, valueColor, rangeColor,
|
|
10
|
+
* readonly, disabled, valueTemplate.
|
|
11
|
+
* Evento: `change` (composed, detail: { value }).
|
|
12
|
+
*/
|
|
13
|
+
export declare class FxKnob extends FxElement {
|
|
14
|
+
static styles: string;
|
|
15
|
+
static get observedAttributes(): string[];
|
|
16
|
+
get value(): number;
|
|
17
|
+
set value(v: number);
|
|
18
|
+
get min(): number;
|
|
19
|
+
set min(v: number);
|
|
20
|
+
get max(): number;
|
|
21
|
+
set max(v: number);
|
|
22
|
+
get step(): number;
|
|
23
|
+
set step(v: number);
|
|
24
|
+
get size(): string;
|
|
25
|
+
set size(v: string);
|
|
26
|
+
get strokeWidth(): number;
|
|
27
|
+
set strokeWidth(v: number);
|
|
28
|
+
get valueColor(): string;
|
|
29
|
+
set valueColor(v: string);
|
|
30
|
+
get rangeColor(): string;
|
|
31
|
+
set rangeColor(v: string);
|
|
32
|
+
get readonly(): boolean;
|
|
33
|
+
set readonly(v: boolean);
|
|
34
|
+
get disabled(): boolean;
|
|
35
|
+
set disabled(v: boolean);
|
|
36
|
+
get valueTemplate(): string;
|
|
37
|
+
set valueTemplate(v: string);
|
|
38
|
+
private _isDragging;
|
|
39
|
+
private _startY;
|
|
40
|
+
private _startValue;
|
|
41
|
+
protected render(): void;
|
|
42
|
+
private getSizeNum;
|
|
43
|
+
private clampValue;
|
|
44
|
+
private emitChange;
|
|
45
|
+
private attachListeners;
|
|
46
|
+
private _onMouseMove;
|
|
47
|
+
private _onMouseUp;
|
|
48
|
+
protected disconnectedCallback(): void;
|
|
49
|
+
}
|
|
50
|
+
export declare function defineFxKnob(): typeof FxKnob;
|
|
51
|
+
//# sourceMappingURL=knob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knob.d.ts","sourceRoot":"","sources":["../../../src/components/knob/knob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;;;GAUG;AACH,qBAAa,MAAO,SAAQ,SAAS;IACnC,OAAgB,MAAM,SAkEpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAcjD;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAclB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAEhB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAGjB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,MAAM,EAEvB;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,QAAQ,IAAI,OAAO,CAEtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAEtB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IACD,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,EAE1B;IAED,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAK;cAEL,MAAM,IAAI,IAAI;IAsCjC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,eAAe;IAsEvB,OAAO,CAAC,YAAY,CAKlB;IAEF,OAAO,CAAC,UAAU,CAIhB;cAEiB,oBAAoB,IAAI,IAAI;CAKhD;AAED,wBAAgB,YAAY,IAAI,OAAO,MAAM,CAE5C"}
|