@wrrdev/fenix-ui 1.0.0
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 +117 -0
- package/dist/cdn.d.ts +6 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/components/alert/alert.d.ts +14 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +74 -0
- package/dist/components/alert/alert.js.map +1 -0
- package/dist/components/alert/index.d.ts +8 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +7 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/autocomplete/autocomplete.d.ts +20 -0
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/components/autocomplete/autocomplete.js +144 -0
- package/dist/components/autocomplete/autocomplete.js.map +1 -0
- package/dist/components/autocomplete/index.d.ts +8 -0
- package/dist/components/autocomplete/index.d.ts.map +1 -0
- package/dist/components/autocomplete/index.js +7 -0
- package/dist/components/autocomplete/index.js.map +1 -0
- package/dist/components/badge/badge.d.ts +14 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +46 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/index.d.ts +2 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +7 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/button/button.d.ts +30 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +194 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +7 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/calendar/calendar.d.ts +39 -0
- package/dist/components/calendar/calendar.d.ts.map +1 -0
- package/dist/components/calendar/calendar.js +346 -0
- package/dist/components/calendar/calendar.js.map +1 -0
- package/dist/components/calendar/index.d.ts +2 -0
- package/dist/components/calendar/index.d.ts.map +1 -0
- package/dist/components/calendar/index.js +7 -0
- package/dist/components/calendar/index.js.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +24 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +142 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +7 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/datepicker/datepicker.d.ts +62 -0
- package/dist/components/datepicker/datepicker.d.ts.map +1 -0
- package/dist/components/datepicker/datepicker.js +441 -0
- package/dist/components/datepicker/datepicker.js.map +1 -0
- package/dist/components/datepicker/index.d.ts +3 -0
- package/dist/components/datepicker/index.d.ts.map +1 -0
- package/dist/components/datepicker/index.js +8 -0
- package/dist/components/datepicker/index.js.map +1 -0
- package/dist/components/dialog/dialog.d.ts +19 -0
- package/dist/components/dialog/dialog.d.ts.map +1 -0
- package/dist/components/dialog/dialog.js +134 -0
- package/dist/components/dialog/dialog.js.map +1 -0
- package/dist/components/dialog/index.d.ts +8 -0
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/index.js +7 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/drawer/drawer.d.ts +27 -0
- package/dist/components/drawer/drawer.d.ts.map +1 -0
- package/dist/components/drawer/drawer.js +195 -0
- package/dist/components/drawer/drawer.js.map +1 -0
- package/dist/components/drawer/index.d.ts +8 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +7 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/dropdown.d.ts +28 -0
- package/dist/components/dropdown/dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.js +137 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/index.d.ts +9 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +9 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/floatlabel/floatlabel.d.ts +42 -0
- package/dist/components/floatlabel/floatlabel.d.ts.map +1 -0
- package/dist/components/floatlabel/floatlabel.js +270 -0
- package/dist/components/floatlabel/floatlabel.js.map +1 -0
- package/dist/components/floatlabel/index.d.ts +2 -0
- package/dist/components/floatlabel/index.d.ts.map +1 -0
- package/dist/components/floatlabel/index.js +7 -0
- package/dist/components/floatlabel/index.js.map +1 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +7 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/input.d.ts +22 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/input/input.js +169 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/multiselect/index.d.ts +2 -0
- package/dist/components/multiselect/index.d.ts.map +1 -0
- package/dist/components/multiselect/index.js +7 -0
- package/dist/components/multiselect/index.js.map +1 -0
- package/dist/components/multiselect/multiselect.d.ts +32 -0
- package/dist/components/multiselect/multiselect.d.ts.map +1 -0
- package/dist/components/multiselect/multiselect.js +389 -0
- package/dist/components/multiselect/multiselect.js.map +1 -0
- package/dist/components/pagination/index.d.ts +8 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/index.js +7 -0
- package/dist/components/pagination/index.js.map +1 -0
- package/dist/components/pagination/pagination.d.ts +23 -0
- package/dist/components/pagination/pagination.d.ts.map +1 -0
- package/dist/components/pagination/pagination.js +121 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/progress/index.d.ts +8 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +7 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/components/progress/progress.d.ts +18 -0
- package/dist/components/progress/progress.d.ts.map +1 -0
- package/dist/components/progress/progress.js +99 -0
- package/dist/components/progress/progress.js.map +1 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +7 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/radio.d.ts +23 -0
- package/dist/components/radio/radio.d.ts.map +1 -0
- package/dist/components/radio/radio.js +133 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +7 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/select.d.ts +36 -0
- package/dist/components/select/select.d.ts.map +1 -0
- package/dist/components/select/select.js +287 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +8 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +7 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/skeleton/skeleton.d.ts +13 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +57 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/spinner/index.d.ts +2 -0
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +7 -0
- package/dist/components/spinner/index.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +16 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -0
- package/dist/components/spinner/spinner.js +50 -0
- package/dist/components/spinner/spinner.js.map +1 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/index.js +7 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/switch.d.ts +22 -0
- package/dist/components/switch/switch.d.ts.map +1 -0
- package/dist/components/switch/switch.js +115 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/table/index.d.ts +2 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +7 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table.d.ts +38 -0
- package/dist/components/table/table.d.ts.map +1 -0
- package/dist/components/table/table.js +258 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/tabs/index.d.ts +9 -0
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/index.js +9 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +38 -0
- package/dist/components/tabs/tabs.d.ts.map +1 -0
- package/dist/components/tabs/tabs.js +162 -0
- package/dist/components/tabs/tabs.js.map +1 -0
- package/dist/components/textarea/index.d.ts +8 -0
- package/dist/components/textarea/index.d.ts.map +1 -0
- package/dist/components/textarea/index.js +7 -0
- package/dist/components/textarea/index.js.map +1 -0
- package/dist/components/textarea/textarea.d.ts +19 -0
- package/dist/components/textarea/textarea.d.ts.map +1 -0
- package/dist/components/textarea/textarea.js +109 -0
- package/dist/components/textarea/textarea.js.map +1 -0
- package/dist/components/toast/index.d.ts +8 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +8 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/toast.d.ts +40 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +176 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +8 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +7 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +14 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.js +86 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/dist/core/base.d.ts +29 -0
- package/dist/core/base.d.ts.map +1 -0
- package/dist/core/base.js +41 -0
- package/dist/core/base.js.map +1 -0
- package/dist/core/css.d.ts +6 -0
- package/dist/core/css.d.ts.map +1 -0
- package/dist/core/css.js +11 -0
- package/dist/core/css.js.map +1 -0
- package/dist/core/define.d.ts +8 -0
- package/dist/core/define.d.ts.map +1 -0
- package/dist/core/define.js +10 -0
- package/dist/core/define.js.map +1 -0
- package/dist/core/presets.d.ts +40 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +80 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/theme.d.ts +47 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +76 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/core/tokens.d.ts +36 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +83 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/docs/app.d.ts +37 -0
- package/dist/docs/app.d.ts.map +1 -0
- package/dist/fenix-ui.esm.js +4471 -0
- package/dist/fenix-ui.esm.js.map +1 -0
- package/dist/fenix-ui.umd.min.js +2022 -0
- package/dist/fenix-ui2.esm.js +82 -0
- package/dist/fenix-ui2.esm.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/auto-import.d.ts +18 -0
- package/dist/plugins/auto-import.d.ts.map +1 -0
- package/dist/plugins/auto-import.js +69 -0
- package/dist/plugins/auto-import.js.map +1 -0
- package/dist/plugins/index.d.ts +25 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +21 -0
- package/dist/plugins/index.js.map +1 -0
- package/package.json +169 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxDialog = class _FxDialog extends FxElement {
|
|
5
|
+
static get observedAttributes() {
|
|
6
|
+
return ["open", "size", "heading"];
|
|
7
|
+
}
|
|
8
|
+
get open() {
|
|
9
|
+
return this.hasAttr("open");
|
|
10
|
+
}
|
|
11
|
+
set open(value) {
|
|
12
|
+
this.toggleAttr("open", value);
|
|
13
|
+
}
|
|
14
|
+
render() {
|
|
15
|
+
const isOpen = this.open;
|
|
16
|
+
const heading = this.getAttr("heading");
|
|
17
|
+
this.setTemplate(`
|
|
18
|
+
<div class="overlay" part="overlay" ${isOpen ? "" : "hidden"}>
|
|
19
|
+
<div class="dialog" role="dialog" aria-modal="true" aria-label="${heading}">
|
|
20
|
+
<header>
|
|
21
|
+
<h2>${heading}</h2>
|
|
22
|
+
<button type="button" class="close" part="close" aria-label="Fechar">×</button>
|
|
23
|
+
</header>
|
|
24
|
+
<div class="body"><slot></slot></div>
|
|
25
|
+
<footer part="footer"><slot name="footer"></slot></footer>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
`);
|
|
29
|
+
if (!isOpen) return;
|
|
30
|
+
const overlay = this.root.querySelector(".overlay");
|
|
31
|
+
const closeBtn = this.root.querySelector(".close");
|
|
32
|
+
const close = () => {
|
|
33
|
+
this.open = false;
|
|
34
|
+
this.dispatchEvent(new CustomEvent("close", { bubbles: true, composed: true }));
|
|
35
|
+
};
|
|
36
|
+
overlay?.addEventListener("click", (e) => {
|
|
37
|
+
if (e.target === overlay) close();
|
|
38
|
+
});
|
|
39
|
+
closeBtn?.addEventListener("click", close);
|
|
40
|
+
const onKey = (e) => {
|
|
41
|
+
if (e.key === "Escape") {
|
|
42
|
+
e.stopPropagation();
|
|
43
|
+
close();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
document.addEventListener("keydown", onKey, { once: true });
|
|
47
|
+
this._cleanup = () => document.removeEventListener("keydown", onKey);
|
|
48
|
+
requestAnimationFrame(() => this.root.querySelector(".dialog")?.focus());
|
|
49
|
+
this.dispatchEvent(new CustomEvent("open", { bubbles: true, composed: true }));
|
|
50
|
+
}
|
|
51
|
+
disconnectedCallback() {
|
|
52
|
+
super.disconnectedCallback();
|
|
53
|
+
this._cleanup?.();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
_FxDialog.styles = css`
|
|
57
|
+
:host { display: contents; }
|
|
58
|
+
.overlay {
|
|
59
|
+
position: fixed;
|
|
60
|
+
inset: 0;
|
|
61
|
+
background: color-mix(in srgb, var(--fx-text-default, #000) 45%, transparent);
|
|
62
|
+
backdrop-filter: blur(3px);
|
|
63
|
+
-webkit-backdrop-filter: blur(3px);
|
|
64
|
+
display: flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
justify-content: center;
|
|
67
|
+
z-index: var(--fx-z-modal, 1100);
|
|
68
|
+
animation: fade var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
69
|
+
}
|
|
70
|
+
.overlay[hidden] { display: none; }
|
|
71
|
+
@keyframes fade { from { opacity: 0; } to { opacity: 1; } }
|
|
72
|
+
.dialog {
|
|
73
|
+
background: var(--fx-surface-background);
|
|
74
|
+
border: 1px solid var(--fx-border-default);
|
|
75
|
+
border-radius: var(--fx-radius-lg);
|
|
76
|
+
box-shadow: var(--fx-shadow-xl);
|
|
77
|
+
width: min(560px, calc(100vw - 32px));
|
|
78
|
+
max-height: calc(100vh - 64px);
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
font-family: var(--fx-font-family);
|
|
82
|
+
animation: pop var(--fx-motion-duration-normal) var(--fx-motion-easing);
|
|
83
|
+
}
|
|
84
|
+
@keyframes pop { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } }
|
|
85
|
+
:host([size='sm']) .dialog { width: min(400px, calc(100vw - 32px)); }
|
|
86
|
+
:host([size='lg']) .dialog { width: min(800px, calc(100vw - 32px)); }
|
|
87
|
+
header {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
justify-content: space-between;
|
|
91
|
+
padding: var(--fx-space-lg) var(--fx-space-xl);
|
|
92
|
+
border-bottom: 1px solid var(--fx-border-default);
|
|
93
|
+
}
|
|
94
|
+
h2 {
|
|
95
|
+
margin: 0;
|
|
96
|
+
font-size: calc(var(--fx-font-size) + 2px);
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
color: var(--fx-text-default);
|
|
99
|
+
}
|
|
100
|
+
.close {
|
|
101
|
+
border: none;
|
|
102
|
+
background: transparent;
|
|
103
|
+
color: var(--fx-text-muted);
|
|
104
|
+
font-size: calc(var(--fx-font-size) + 6px);
|
|
105
|
+
cursor: pointer;
|
|
106
|
+
line-height: 1;
|
|
107
|
+
padding: 0 var(--fx-space-xs);
|
|
108
|
+
border-radius: var(--fx-radius-full);
|
|
109
|
+
}
|
|
110
|
+
.close:hover { color: var(--fx-color-danger); }
|
|
111
|
+
.body {
|
|
112
|
+
padding: var(--fx-space-lg) var(--fx-space-xl);
|
|
113
|
+
overflow-y: auto;
|
|
114
|
+
color: var(--fx-text-default);
|
|
115
|
+
font-size: var(--fx-font-size);
|
|
116
|
+
}
|
|
117
|
+
footer {
|
|
118
|
+
padding: var(--fx-space-md) var(--fx-space-xl);
|
|
119
|
+
border-top: 1px solid var(--fx-border-default);
|
|
120
|
+
display: flex;
|
|
121
|
+
justify-content: flex-end;
|
|
122
|
+
gap: var(--fx-space-sm);
|
|
123
|
+
}
|
|
124
|
+
footer[hidden] { display: none; }
|
|
125
|
+
`;
|
|
126
|
+
let FxDialog = _FxDialog;
|
|
127
|
+
function defineFxDialog() {
|
|
128
|
+
return defineElement("fx-dialog", FxDialog);
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
FxDialog,
|
|
132
|
+
defineFxDialog
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sources":["../../../src/components/dialog/dialog.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-dialog> — Janela modal com overlay, ESC para fechar e foco preso.\n *\n * Atributos: open, size (sm|md|lg), heading (título).\n * Slots: padrão (conteúdo), footer (botões de ação).\n * Eventos: `open`, `close` (composed).\n */\nexport class FxDialog extends FxElement {\n static override styles = css`\n :host { display: contents; }\n .overlay {\n position: fixed;\n inset: 0;\n background: color-mix(in srgb, var(--fx-text-default, #000) 45%, transparent);\n backdrop-filter: blur(3px);\n -webkit-backdrop-filter: blur(3px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: var(--fx-z-modal, 1100);\n animation: fade var(--fx-motion-duration-fast) var(--fx-motion-easing);\n }\n .overlay[hidden] { display: none; }\n @keyframes fade { from { opacity: 0; } to { opacity: 1; } }\n .dialog {\n background: var(--fx-surface-background);\n border: 1px solid var(--fx-border-default);\n border-radius: var(--fx-radius-lg);\n box-shadow: var(--fx-shadow-xl);\n width: min(560px, calc(100vw - 32px));\n max-height: calc(100vh - 64px);\n display: flex;\n flex-direction: column;\n font-family: var(--fx-font-family);\n animation: pop var(--fx-motion-duration-normal) var(--fx-motion-easing);\n }\n @keyframes pop { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } }\n :host([size='sm']) .dialog { width: min(400px, calc(100vw - 32px)); }\n :host([size='lg']) .dialog { width: min(800px, calc(100vw - 32px)); }\n header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--fx-space-lg) var(--fx-space-xl);\n border-bottom: 1px solid var(--fx-border-default);\n }\n h2 {\n margin: 0;\n font-size: calc(var(--fx-font-size) + 2px);\n font-weight: 600;\n color: var(--fx-text-default);\n }\n .close {\n border: none;\n background: transparent;\n color: var(--fx-text-muted);\n font-size: calc(var(--fx-font-size) + 6px);\n cursor: pointer;\n line-height: 1;\n padding: 0 var(--fx-space-xs);\n border-radius: var(--fx-radius-full);\n }\n .close:hover { color: var(--fx-color-danger); }\n .body {\n padding: var(--fx-space-lg) var(--fx-space-xl);\n overflow-y: auto;\n color: var(--fx-text-default);\n font-size: var(--fx-font-size);\n }\n footer {\n padding: var(--fx-space-md) var(--fx-space-xl);\n border-top: 1px solid var(--fx-border-default);\n display: flex;\n justify-content: flex-end;\n gap: var(--fx-space-sm);\n }\n footer[hidden] { display: none; }\n `;\n\n static override get observedAttributes(): string[] {\n return ['open', 'size', 'heading'];\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 isOpen = this.open;\n const heading = this.getAttr('heading');\n\n this.setTemplate(`\n <div class=\"overlay\" part=\"overlay\" ${isOpen ? '' : 'hidden'}>\n <div class=\"dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${heading}\">\n <header>\n <h2>${heading}</h2>\n <button type=\"button\" class=\"close\" part=\"close\" aria-label=\"Fechar\">×</button>\n </header>\n <div class=\"body\"><slot></slot></div>\n <footer part=\"footer\"><slot name=\"footer\"></slot></footer>\n </div>\n </div>\n `);\n\n if (!isOpen) return;\n\n const overlay = this.root.querySelector<HTMLElement>('.overlay');\n const closeBtn = this.root.querySelector<HTMLButtonElement>('.close');\n const close = (): void => {\n this.open = false;\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n };\n overlay?.addEventListener('click', (e) => { if (e.target === overlay) close(); });\n closeBtn?.addEventListener('click', close);\n\n // ESC fecha + foco no diálogo\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') { e.stopPropagation(); close(); }\n };\n document.addEventListener('keydown', onKey, { once: true });\n this._cleanup = () => document.removeEventListener('keydown', onKey);\n\n requestAnimationFrame(() => this.root.querySelector<HTMLElement>('.dialog')?.focus());\n this.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\n }\n\n private _cleanup?: () => void;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._cleanup?.();\n }\n}\n\nexport function defineFxDialog(): typeof FxDialog {\n return defineElement('fx-dialog', FxDialog);\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,YAAN,MAAM,kBAAiB,UAAU;AAAA,EAwEtC,WAAoB,qBAA+B;AACjD,WAAO,CAAC,QAAQ,QAAQ,SAAS;AAAA,EACnC;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,SAAS,KAAK;AACpB,UAAM,UAAU,KAAK,QAAQ,SAAS;AAEtC,SAAK,YAAY;AAAA,4CACuB,SAAS,KAAK,QAAQ;AAAA,0EACQ,OAAO;AAAA;AAAA,kBAE/D,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOpB;AAED,QAAI,CAAC,OAAQ;AAEb,UAAM,UAAU,KAAK,KAAK,cAA2B,UAAU;AAC/D,UAAM,WAAW,KAAK,KAAK,cAAiC,QAAQ;AACpE,UAAM,QAAQ,MAAY;AACxB,WAAK,OAAO;AACZ,WAAK,cAAc,IAAI,YAAY,SAAS,EAAE,SAAS,MAAM,UAAU,KAAA,CAAM,CAAC;AAAA,IAChF;AACA,aAAS,iBAAiB,SAAS,CAAC,MAAM;AAAE,UAAI,EAAE,WAAW,QAAS,OAAA;AAAA,IAAS,CAAC;AAChF,cAAU,iBAAiB,SAAS,KAAK;AAGzC,UAAM,QAAQ,CAAC,MAA2B;AACxC,UAAI,EAAE,QAAQ,UAAU;AAAE,UAAE,gBAAA;AAAmB,cAAA;AAAA,MAAS;AAAA,IAC1D;AACA,aAAS,iBAAiB,WAAW,OAAO,EAAE,MAAM,MAAM;AAC1D,SAAK,WAAW,MAAM,SAAS,oBAAoB,WAAW,KAAK;AAEnE,0BAAsB,MAAM,KAAK,KAAK,cAA2B,SAAS,GAAG,OAAO;AACpF,SAAK,cAAc,IAAI,YAAY,QAAQ,EAAE,SAAS,MAAM,UAAU,KAAA,CAAM,CAAC;AAAA,EAC/E;AAAA,EAIS,uBAA6B;AACpC,UAAM,qBAAA;AACN,SAAK,WAAA;AAAA,EACP;AACF;AA3HE,UAAgB,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;AADpB,IAAM,WAAN;AA8HA,SAAS,iBAAkC;AAChD,SAAO,cAAc,aAAa,QAAQ;AAC5C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,CAAC;AAKpB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/dialog/index.ts"],"sourcesContent":["import { FxDialog, defineFxDialog } from './dialog';\n\nexport { FxDialog };\n\n\ndefineFxDialog();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-dialog': FxDialog;\n }\n}\n\r\n\r\n"],"names":[],"mappings":";;AAKA,eAAA;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-drawer> — Painel deslizante (drawer) com overlay.
|
|
4
|
+
*
|
|
5
|
+
* Atributos:
|
|
6
|
+
* - position: 'left' | 'right' | 'top' | 'bottom' (padrão: right);
|
|
7
|
+
* - title: texto do cabeçalho;
|
|
8
|
+
* - open: exibe o drawer.
|
|
9
|
+
* Conteúdo: livre, via slot.
|
|
10
|
+
* Eventos: `open` e `close` (composed). Fecha por ESC ou clique no overlay.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FxDrawer extends FxElement {
|
|
13
|
+
static styles: string;
|
|
14
|
+
static get observedAttributes(): string[];
|
|
15
|
+
get open(): boolean;
|
|
16
|
+
set open(value: boolean);
|
|
17
|
+
get title(): string;
|
|
18
|
+
set title(v: string);
|
|
19
|
+
get position(): string;
|
|
20
|
+
set position(v: string);
|
|
21
|
+
protected render(): void;
|
|
22
|
+
protected connectedCallback(): void;
|
|
23
|
+
protected disconnectedCallback(): void;
|
|
24
|
+
private _onKeydown;
|
|
25
|
+
}
|
|
26
|
+
export declare function defineFxDrawer(): typeof FxDrawer;
|
|
27
|
+
//# sourceMappingURL=drawer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/drawer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACtC,OAAgB,MAAM,SAsHpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED,IAAa,KAAK,IAAI,MAAM,CAE3B;IACD,IAAa,KAAK,CAAC,CAAC,EAAE,MAAM,EAE3B;IAED,IAAI,QAAQ,IAAI,MAAM,CAGrB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAErB;cAEkB,MAAM,IAAI,IAAI;cAsBd,iBAAiB,IAAI,IAAI;cAazB,oBAAoB,IAAI,IAAI;IAK/C,OAAO,CAAC,UAAU,CAAwC;CAC1D;AAED,wBAAgB,cAAc,IAAI,OAAO,QAAQ,CAEhD"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxDrawer = class _FxDrawer extends FxElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this._onKeydown = () => {
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
static get observedAttributes() {
|
|
11
|
+
return ["open", "title", "position"];
|
|
12
|
+
}
|
|
13
|
+
get open() {
|
|
14
|
+
return this.hasAttr("open");
|
|
15
|
+
}
|
|
16
|
+
set open(value) {
|
|
17
|
+
this.toggleAttr("open", value);
|
|
18
|
+
}
|
|
19
|
+
get title() {
|
|
20
|
+
return this.getAttr("title");
|
|
21
|
+
}
|
|
22
|
+
set title(v) {
|
|
23
|
+
this.setAttribute("title", v);
|
|
24
|
+
}
|
|
25
|
+
get position() {
|
|
26
|
+
const p = this.getAttr("position");
|
|
27
|
+
return ["left", "right", "top", "bottom"].includes(p) ? p : "right";
|
|
28
|
+
}
|
|
29
|
+
set position(v) {
|
|
30
|
+
this.setAttribute("position", v);
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
const title = this.getAttr("title");
|
|
34
|
+
this.setTemplate(`
|
|
35
|
+
<div class="overlay" part="overlay"></div>
|
|
36
|
+
<div class="panel" part="panel" role="dialog" aria-modal="true" aria-label="${title || "Drawer"}">
|
|
37
|
+
${title !== "" ? `<div class="header" part="header"><span class="title">${title}</span><button type="button" class="close" part="close" aria-label="Fechar">✕</button></div>` : ""}
|
|
38
|
+
<div class="body" part="body"><slot></slot></div>
|
|
39
|
+
</div>
|
|
40
|
+
`);
|
|
41
|
+
const close = () => {
|
|
42
|
+
if (!this.open) return;
|
|
43
|
+
this.open = false;
|
|
44
|
+
this.dispatchEvent(
|
|
45
|
+
new CustomEvent("close", { bubbles: true, composed: true })
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
this.root.querySelector(".overlay")?.addEventListener("click", close);
|
|
49
|
+
this.root.querySelector(".close")?.addEventListener("click", close);
|
|
50
|
+
}
|
|
51
|
+
connectedCallback() {
|
|
52
|
+
super.connectedCallback?.();
|
|
53
|
+
this._onKeydown = (e) => {
|
|
54
|
+
if (e.key === "Escape" && this.open) {
|
|
55
|
+
this.open = false;
|
|
56
|
+
this.dispatchEvent(
|
|
57
|
+
new CustomEvent("close", { bubbles: true, composed: true })
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
document.addEventListener("keydown", this._onKeydown);
|
|
62
|
+
}
|
|
63
|
+
disconnectedCallback() {
|
|
64
|
+
document.removeEventListener("keydown", this._onKeydown);
|
|
65
|
+
super.disconnectedCallback?.();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
_FxDrawer.styles = css`
|
|
69
|
+
:host {
|
|
70
|
+
display: contents;
|
|
71
|
+
font-family: var(--fx-font-family);
|
|
72
|
+
font-size: var(--fx-font-size);
|
|
73
|
+
color: var(--fx-text-default);
|
|
74
|
+
}
|
|
75
|
+
.overlay {
|
|
76
|
+
display: none;
|
|
77
|
+
position: fixed;
|
|
78
|
+
inset: 0;
|
|
79
|
+
background: color-mix(
|
|
80
|
+
in srgb,
|
|
81
|
+
var(--fx-text-default, #000) 45%,
|
|
82
|
+
transparent
|
|
83
|
+
);
|
|
84
|
+
backdrop-filter: blur(3px);
|
|
85
|
+
-webkit-backdrop-filter: blur(3px);
|
|
86
|
+
z-index: var(--fx-z-overlay, 1090);
|
|
87
|
+
animation: fade var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
88
|
+
}
|
|
89
|
+
:host([open]) .overlay {
|
|
90
|
+
display: block;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.panel {
|
|
94
|
+
position: fixed;
|
|
95
|
+
background: var(--fx-surface-background);
|
|
96
|
+
box-shadow: var(--fx-shadow-xl);
|
|
97
|
+
z-index: var(--fx-z-modal, 1000);
|
|
98
|
+
display: flex;
|
|
99
|
+
flex-direction: column;
|
|
100
|
+
overflow: auto;
|
|
101
|
+
}
|
|
102
|
+
:host(:not([open])) .panel {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
:host([open]) .panel {
|
|
106
|
+
display: flex;
|
|
107
|
+
}
|
|
108
|
+
/* left / right — altura total, largura mínima fixa e expansível */
|
|
109
|
+
:host([position="left"]) .panel,
|
|
110
|
+
:host(:not([position])) .panel,
|
|
111
|
+
:host([position="right"]) .panel {
|
|
112
|
+
top: 0;
|
|
113
|
+
bottom: 0;
|
|
114
|
+
width: var(--fx-drawer-width, 360px);
|
|
115
|
+
min-width: 300px;
|
|
116
|
+
max-width: 90vw;
|
|
117
|
+
}
|
|
118
|
+
:host([position="left"]) .panel {
|
|
119
|
+
left: 0;
|
|
120
|
+
}
|
|
121
|
+
:host([position="right"]) .panel,
|
|
122
|
+
:host(:not([position])) .panel {
|
|
123
|
+
right: 0;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* top / bottom — largura total, altura mínima fixa e expansível */
|
|
127
|
+
:host([position="top"]) .panel,
|
|
128
|
+
:host([position="bottom"]) .panel {
|
|
129
|
+
left: 0;
|
|
130
|
+
right: 0;
|
|
131
|
+
height: var(--fx-drawer-height, 280px);
|
|
132
|
+
min-height: 180px;
|
|
133
|
+
max-height: 85vh;
|
|
134
|
+
}
|
|
135
|
+
:host([position="top"]) .panel {
|
|
136
|
+
top: 0;
|
|
137
|
+
}
|
|
138
|
+
:host([position="bottom"]) .panel {
|
|
139
|
+
bottom: 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.header {
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: center;
|
|
145
|
+
gap: var(--fx-space-sm);
|
|
146
|
+
min-height: var(--fx-size-lg);
|
|
147
|
+
padding: var(--fx-space-sm) var(--fx-space-md);
|
|
148
|
+
border-bottom: 1px solid var(--fx-border-default);
|
|
149
|
+
flex: none;
|
|
150
|
+
position: sticky;
|
|
151
|
+
top: 0;
|
|
152
|
+
background: var(--fx-surface-background);
|
|
153
|
+
}
|
|
154
|
+
.title {
|
|
155
|
+
font-weight: 700;
|
|
156
|
+
flex: 1;
|
|
157
|
+
overflow: hidden;
|
|
158
|
+
text-overflow: ellipsis;
|
|
159
|
+
white-space: nowrap;
|
|
160
|
+
}
|
|
161
|
+
.close {
|
|
162
|
+
border: none;
|
|
163
|
+
background: transparent;
|
|
164
|
+
cursor: pointer;
|
|
165
|
+
color: var(--fx-text-muted);
|
|
166
|
+
width: 28px;
|
|
167
|
+
height: 28px;
|
|
168
|
+
line-height: 1;
|
|
169
|
+
border-radius: var(--fx-radius-sm);
|
|
170
|
+
font-size: 16px;
|
|
171
|
+
transition: background var(--fx-motion-duration-fast)
|
|
172
|
+
var(--fx-motion-easing);
|
|
173
|
+
}
|
|
174
|
+
.close:hover {
|
|
175
|
+
background: color-mix(
|
|
176
|
+
in srgb,
|
|
177
|
+
var(--fx-color-danger) 14%,
|
|
178
|
+
var(--fx-surface-background)
|
|
179
|
+
);
|
|
180
|
+
color: var(--fx-color-danger);
|
|
181
|
+
}
|
|
182
|
+
.body {
|
|
183
|
+
padding: var(--fx-space-md);
|
|
184
|
+
flex: 1;
|
|
185
|
+
}
|
|
186
|
+
`;
|
|
187
|
+
let FxDrawer = _FxDrawer;
|
|
188
|
+
function defineFxDrawer() {
|
|
189
|
+
return defineElement("fx-drawer", FxDrawer);
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
FxDrawer,
|
|
193
|
+
defineFxDrawer
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer.js","sources":["../../../src/components/drawer/drawer.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-drawer> — Painel deslizante (drawer) com overlay.\n *\n * Atributos:\n * - position: 'left' | 'right' | 'top' | 'bottom' (padrão: right);\n * - title: texto do cabeçalho;\n * - open: exibe o drawer.\n * Conteúdo: livre, via slot.\n * Eventos: `open` e `close` (composed). Fecha por ESC ou clique no overlay.\n */\nexport class FxDrawer extends FxElement {\n\tstatic override styles = css`\n\t\t:host {\n\t\t\tdisplay: contents;\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}\n\t\t.overlay {\n\t\t\tdisplay: none;\n\t\t\tposition: fixed;\n\t\t\tinset: 0;\n\t\t\tbackground: color-mix(\n\t\t\t\tin srgb,\n\t\t\t\tvar(--fx-text-default, #000) 45%,\n\t\t\t\ttransparent\n\t\t\t);\n\t\t\tbackdrop-filter: blur(3px);\n\t\t\t-webkit-backdrop-filter: blur(3px);\n\t\t\tz-index: var(--fx-z-overlay, 1090);\n\t\t\tanimation: fade var(--fx-motion-duration-fast) var(--fx-motion-easing);\n\t\t}\n\t\t:host([open]) .overlay {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.panel {\n\t\t\tposition: fixed;\n\t\t\tbackground: var(--fx-surface-background);\n\t\t\tbox-shadow: var(--fx-shadow-xl);\n\t\t\tz-index: var(--fx-z-modal, 1000);\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\toverflow: auto;\n\t\t}\n\t\t:host(:not([open])) .panel {\n\t\t\tdisplay: none;\n\t\t}\n\t\t:host([open]) .panel {\n\t\t\tdisplay: flex;\n\t\t}\n\t\t/* left / right — altura total, largura mínima fixa e expansível */\n\t\t:host([position=\"left\"]) .panel,\n\t\t:host(:not([position])) .panel,\n\t\t:host([position=\"right\"]) .panel {\n\t\t\ttop: 0;\n\t\t\tbottom: 0;\n\t\t\twidth: var(--fx-drawer-width, 360px);\n\t\t\tmin-width: 300px;\n\t\t\tmax-width: 90vw;\n\t\t}\n\t\t:host([position=\"left\"]) .panel {\n\t\t\tleft: 0;\n\t\t}\n\t\t:host([position=\"right\"]) .panel,\n\t\t:host(:not([position])) .panel {\n\t\t\tright: 0;\n\t\t}\n\n\t\t/* top / bottom — largura total, altura mínima fixa e expansível */\n\t\t:host([position=\"top\"]) .panel,\n\t\t:host([position=\"bottom\"]) .panel {\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--fx-drawer-height, 280px);\n\t\t\tmin-height: 180px;\n\t\t\tmax-height: 85vh;\n\t\t}\n\t\t:host([position=\"top\"]) .panel {\n\t\t\ttop: 0;\n\t\t}\n\t\t:host([position=\"bottom\"]) .panel {\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.header {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: var(--fx-space-sm);\n\t\t\tmin-height: var(--fx-size-lg);\n\t\t\tpadding: var(--fx-space-sm) var(--fx-space-md);\n\t\t\tborder-bottom: 1px solid var(--fx-border-default);\n\t\t\tflex: none;\n\t\t\tposition: sticky;\n\t\t\ttop: 0;\n\t\t\tbackground: var(--fx-surface-background);\n\t\t}\n\t\t.title {\n\t\t\tfont-weight: 700;\n\t\t\tflex: 1;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\t.close {\n\t\t\tborder: none;\n\t\t\tbackground: transparent;\n\t\t\tcursor: pointer;\n\t\t\tcolor: var(--fx-text-muted);\n\t\t\twidth: 28px;\n\t\t\theight: 28px;\n\t\t\tline-height: 1;\n\t\t\tborder-radius: var(--fx-radius-sm);\n\t\t\tfont-size: 16px;\n\t\t\ttransition: background var(--fx-motion-duration-fast)\n\t\t\t\tvar(--fx-motion-easing);\n\t\t}\n\t\t.close:hover {\n\t\t\tbackground: color-mix(\n\t\t\t\tin srgb,\n\t\t\t\tvar(--fx-color-danger) 14%,\n\t\t\t\tvar(--fx-surface-background)\n\t\t\t);\n\t\t\tcolor: var(--fx-color-danger);\n\t\t}\n\t\t.body {\n\t\t\tpadding: var(--fx-space-md);\n\t\t\tflex: 1;\n\t\t}\n\t`;\n\n\tstatic override get observedAttributes(): string[] {\n\t\treturn [\"open\", \"title\", \"position\"];\n\t}\n\n\tget open(): boolean {\n\t\treturn this.hasAttr(\"open\");\n\t}\n\tset open(value: boolean) {\n\t\tthis.toggleAttr(\"open\", value);\n\t}\n\n\toverride get title(): string {\n\t\treturn this.getAttr(\"title\");\n\t}\n\toverride set title(v: string) {\n\t\tthis.setAttribute(\"title\", v);\n\t}\n\n\tget position(): string {\n\t\tconst p = this.getAttr(\"position\");\n\t\treturn [\"left\", \"right\", \"top\", \"bottom\"].includes(p) ? p : \"right\";\n\t}\n\tset position(v: string) {\n\t\tthis.setAttribute(\"position\", v);\n\t}\n\n\tprotected override render(): void {\n\t\tconst title = this.getAttr(\"title\");\n\n\t\tthis.setTemplate(`\n <div class=\"overlay\" part=\"overlay\"></div>\n <div class=\"panel\" part=\"panel\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${title || \"Drawer\"}\">\n ${title !== \"\" ? `<div class=\"header\" part=\"header\"><span class=\"title\">${title}</span><button type=\"button\" class=\"close\" part=\"close\" aria-label=\"Fechar\">✕</button></div>` : \"\"}\n <div class=\"body\" part=\"body\"><slot></slot></div>\n </div>\n `);\n\n\t\tconst close = () => {\n\t\t\tif (!this.open) return;\n\t\t\tthis.open = false;\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(\"close\", { bubbles: true, composed: true }),\n\t\t\t);\n\t\t};\n\t\tthis.root.querySelector(\".overlay\")?.addEventListener(\"click\", close);\n\t\tthis.root.querySelector(\".close\")?.addEventListener(\"click\", close);\n\t}\n\n\tprotected override connectedCallback(): void {\n\t\tsuper.connectedCallback?.();\n\t\tthis._onKeydown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\" && this.open) {\n\t\t\t\tthis.open = false;\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent(\"close\", { bubbles: true, composed: true }),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", this._onKeydown);\n\t}\n\n\tprotected override disconnectedCallback(): void {\n\t\tdocument.removeEventListener(\"keydown\", this._onKeydown);\n\t\tsuper.disconnectedCallback?.();\n\t}\n\n\tprivate _onKeydown: (e: KeyboardEvent) => void = () => {};\n}\n\nexport function defineFxDrawer(): typeof FxDrawer {\n return defineElement('fx-drawer', FxDrawer);\n}"],"names":[],"mappings":";;;AAcO,MAAM,YAAN,MAAM,kBAAiB,UAAU;AAAA,EAAjC,cAAA;AAAA,UAAA,GAAA,SAAA;AA2LN,SAAQ,aAAyC,MAAM;AAAA,IAAC;AAAA,EAAA;AAAA,EAlExD,WAAoB,qBAA+B;AAClD,WAAO,CAAC,QAAQ,SAAS,UAAU;AAAA,EACpC;AAAA,EAEA,IAAI,OAAgB;AACnB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC3B;AAAA,EACA,IAAI,KAAK,OAAgB;AACxB,SAAK,WAAW,QAAQ,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAa,QAAgB;AAC5B,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC5B;AAAA,EACA,IAAa,MAAM,GAAW;AAC7B,SAAK,aAAa,SAAS,CAAC;AAAA,EAC7B;AAAA,EAEA,IAAI,WAAmB;AACtB,UAAM,IAAI,KAAK,QAAQ,UAAU;AACjC,WAAO,CAAC,QAAQ,SAAS,OAAO,QAAQ,EAAE,SAAS,CAAC,IAAI,IAAI;AAAA,EAC7D;AAAA,EACA,IAAI,SAAS,GAAW;AACvB,SAAK,aAAa,YAAY,CAAC;AAAA,EAChC;AAAA,EAEmB,SAAe;AACjC,UAAM,QAAQ,KAAK,QAAQ,OAAO;AAElC,SAAK,YAAY;AAAA;AAAA,oFAEiE,SAAS,QAAQ;AAAA,UAC3F,UAAU,KAAK,yDAAyD,KAAK,iGAAiG,EAAE;AAAA;AAAA;AAAA,KAGrL;AAEH,UAAM,QAAQ,MAAM;AACnB,UAAI,CAAC,KAAK,KAAM;AAChB,WAAK,OAAO;AACZ,WAAK;AAAA,QACJ,IAAI,YAAY,SAAS,EAAE,SAAS,MAAM,UAAU,MAAM;AAAA,MAAA;AAAA,IAE5D;AACA,SAAK,KAAK,cAAc,UAAU,GAAG,iBAAiB,SAAS,KAAK;AACpE,SAAK,KAAK,cAAc,QAAQ,GAAG,iBAAiB,SAAS,KAAK;AAAA,EACnE;AAAA,EAEmB,oBAA0B;AAC5C,UAAM,oBAAA;AACN,SAAK,aAAa,CAAC,MAAqB;AACvC,UAAI,EAAE,QAAQ,YAAY,KAAK,MAAM;AACpC,aAAK,OAAO;AACZ,aAAK;AAAA,UACJ,IAAI,YAAY,SAAS,EAAE,SAAS,MAAM,UAAU,MAAM;AAAA,QAAA;AAAA,MAE5D;AAAA,IACD;AACA,aAAS,iBAAiB,WAAW,KAAK,UAAU;AAAA,EACrD;AAAA,EAEmB,uBAA6B;AAC/C,aAAS,oBAAoB,WAAW,KAAK,UAAU;AACvD,UAAM,uBAAA;AAAA,EACP;AAGD;AA3LC,UAAgB,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;AADnB,IAAM,WAAN;AA8LA,SAAS,iBAAkC;AAChD,SAAO,cAAc,aAAa,QAAQ;AAC5C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,CAAC;AAIpB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/drawer/index.ts"],"sourcesContent":["import { FxDrawer, defineFxDrawer } from './drawer';\n\nexport { FxDrawer };\n\ndefineFxDrawer();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-drawer': FxDrawer;\n }\n}"],"names":[],"mappings":";;AAIA,eAAA;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-dropdown> — Menu de ações em popover.
|
|
4
|
+
*
|
|
5
|
+
* Atributos: label (texto do trigger), position (bottom-left padrão | bottom-right).
|
|
6
|
+
* Itens: <fx-dropdown-item value="x">Texto</fx-dropdown-item>
|
|
7
|
+
* Evento: `select` (composed, detail: { value }).
|
|
8
|
+
*/
|
|
9
|
+
export declare class FxDropdown extends FxElement {
|
|
10
|
+
static styles: string;
|
|
11
|
+
static get observedAttributes(): string[];
|
|
12
|
+
get open(): boolean;
|
|
13
|
+
set open(value: boolean);
|
|
14
|
+
protected render(): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* <fx-dropdown-item> — Item de menu.
|
|
18
|
+
*/
|
|
19
|
+
export declare class FxDropdownItem extends FxElement {
|
|
20
|
+
static styles: string;
|
|
21
|
+
static get observedAttributes(): string[];
|
|
22
|
+
get value(): string;
|
|
23
|
+
set value(v: string);
|
|
24
|
+
protected render(): void;
|
|
25
|
+
}
|
|
26
|
+
export declare function defineFxDropdown(): typeof FxDropdown;
|
|
27
|
+
export declare function defineFxDropdownItem(): typeof FxDropdownItem;
|
|
28
|
+
//# sourceMappingURL=dropdown.d.ts.map
|
|
@@ -0,0 +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;CAwClC;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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxDropdown = class _FxDropdown extends FxElement {
|
|
5
|
+
static get observedAttributes() {
|
|
6
|
+
return ["label", "position", "open"];
|
|
7
|
+
}
|
|
8
|
+
get open() {
|
|
9
|
+
return this.hasAttr("open");
|
|
10
|
+
}
|
|
11
|
+
set open(value) {
|
|
12
|
+
this.toggleAttr("open", value);
|
|
13
|
+
}
|
|
14
|
+
render() {
|
|
15
|
+
const label = this.getAttr("label", "Ações");
|
|
16
|
+
const items = Array.from(this.querySelectorAll("fx-dropdown-item"));
|
|
17
|
+
this.setTemplate(`
|
|
18
|
+
<span class="trigger" role="button" tabindex="0" part="trigger"
|
|
19
|
+
aria-haspopup="menu" aria-expanded="${this.open}">
|
|
20
|
+
${label} ▾
|
|
21
|
+
</span>
|
|
22
|
+
<div class="panel" role="menu" part="panel">
|
|
23
|
+
${items.length ? items.map((i) => `<div class="item-slot"><slot name="_${i.getAttribute("value") ?? ""}"></slot></div>`) : '<div class="empty">Nenhuma ação</div>'}
|
|
24
|
+
<slot></slot>
|
|
25
|
+
</div>
|
|
26
|
+
`);
|
|
27
|
+
const trigger = this.root.querySelector(".trigger");
|
|
28
|
+
trigger?.addEventListener("click", (e) => {
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
document.querySelectorAll("fx-dropdown[open]").forEach((d) => {
|
|
31
|
+
if (d !== this) d.open = false;
|
|
32
|
+
});
|
|
33
|
+
this.open = !this.open;
|
|
34
|
+
});
|
|
35
|
+
trigger?.addEventListener("keydown", (e) => {
|
|
36
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
this.open = !this.open;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
items.forEach((item) => {
|
|
42
|
+
item.addEventListener("click", () => {
|
|
43
|
+
this.open = false;
|
|
44
|
+
this.dispatchEvent(new CustomEvent("select", {
|
|
45
|
+
bubbles: true,
|
|
46
|
+
composed: true,
|
|
47
|
+
detail: { value: item.getAttribute("value") ?? "" }
|
|
48
|
+
}));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
_FxDropdown.styles = css`
|
|
54
|
+
:host {
|
|
55
|
+
position: relative;
|
|
56
|
+
display: inline-block;
|
|
57
|
+
font-family: var(--fx-font-family);
|
|
58
|
+
font-size: var(--fx-font-size);
|
|
59
|
+
}
|
|
60
|
+
.trigger { min-height: var(--fx-size-md); }
|
|
61
|
+
.panel {
|
|
62
|
+
position: absolute;
|
|
63
|
+
top: calc(100% + 4px);
|
|
64
|
+
min-width: 180px;
|
|
65
|
+
background: var(--fx-surface-background);
|
|
66
|
+
border: 1px solid var(--fx-border-default);
|
|
67
|
+
border-radius: var(--fx-radius-md);
|
|
68
|
+
box-shadow: var(--fx-shadow-lg);
|
|
69
|
+
padding: var(--fx-space-xs);
|
|
70
|
+
z-index: var(--fx-z-dropdown, 1000);
|
|
71
|
+
display: none;
|
|
72
|
+
}
|
|
73
|
+
:host([open]) .panel { display: block; }
|
|
74
|
+
/* left = alinhado à esquerda do trigger; right = à direita; center = centrado */
|
|
75
|
+
:host([position='left']) .panel,
|
|
76
|
+
:host([position='bottom-left']) .panel { left: 0; right: auto; }
|
|
77
|
+
:host([position='center']) .panel {
|
|
78
|
+
left: 50%;
|
|
79
|
+
transform: translateX(-50%);
|
|
80
|
+
}
|
|
81
|
+
:host([position='right']) .panel,
|
|
82
|
+
:host([position='bottom-right']) .panel { right: 0; left: auto; }
|
|
83
|
+
:host(:not([position])) .panel { left: 0; right: auto; }
|
|
84
|
+
::slotted(fx-dropdown-item) { display: block; }
|
|
85
|
+
.empty { color: var(--fx-text-muted); font-size: calc(var(--fx-font-size) - 2px); padding: var(--fx-space-sm); }
|
|
86
|
+
`;
|
|
87
|
+
let FxDropdown = _FxDropdown;
|
|
88
|
+
const _FxDropdownItem = class _FxDropdownItem extends FxElement {
|
|
89
|
+
static get observedAttributes() {
|
|
90
|
+
return ["value"];
|
|
91
|
+
}
|
|
92
|
+
get value() {
|
|
93
|
+
return this.getAttr("value");
|
|
94
|
+
}
|
|
95
|
+
set value(v) {
|
|
96
|
+
this.setAttribute("value", v);
|
|
97
|
+
}
|
|
98
|
+
render() {
|
|
99
|
+
this.setTemplate('<button type="button" class="item" part="item" role="menuitem"><slot></slot></button>');
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
_FxDropdownItem.styles = css`
|
|
103
|
+
:host {
|
|
104
|
+
display: block;
|
|
105
|
+
font-family: var(--fx-font-family);
|
|
106
|
+
font-size: var(--fx-font-size);
|
|
107
|
+
}
|
|
108
|
+
.item {
|
|
109
|
+
display: block;
|
|
110
|
+
width: 100%;
|
|
111
|
+
text-align: left;
|
|
112
|
+
border: none;
|
|
113
|
+
background: transparent;
|
|
114
|
+
font-family: inherit;
|
|
115
|
+
font-size: inherit;
|
|
116
|
+
color: var(--fx-text-default);
|
|
117
|
+
padding: var(--fx-space-sm) var(--fx-space-md);
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
border-radius: var(--fx-radius-sm);
|
|
120
|
+
transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
121
|
+
}
|
|
122
|
+
.item:hover { background: color-mix(in srgb, var(--fx-color-primary) 12%, var(--fx-surface-background)); color: var(--fx-color-primary); }
|
|
123
|
+
`;
|
|
124
|
+
let FxDropdownItem = _FxDropdownItem;
|
|
125
|
+
function defineFxDropdown() {
|
|
126
|
+
return defineElement("fx-dropdown", FxDropdown);
|
|
127
|
+
}
|
|
128
|
+
function defineFxDropdownItem() {
|
|
129
|
+
return defineElement("fx-dropdown-item", FxDropdownItem);
|
|
130
|
+
}
|
|
131
|
+
export {
|
|
132
|
+
FxDropdown,
|
|
133
|
+
FxDropdownItem,
|
|
134
|
+
defineFxDropdown,
|
|
135
|
+
defineFxDropdownItem
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=dropdown.js.map
|
|
@@ -0,0 +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\n ? items.map((i) => `<div class=\"item-slot\"><slot name=\"_${i.getAttribute('value') ?? ''}\"></slot></div>`)\n : '<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,SACJ,MAAM,IAAI,CAAC,MAAM,uCAAuC,EAAE,aAAa,OAAO,KAAK,EAAE,iBAAiB,IACtG,uCAAuC;AAAA;AAAA;AAAA,KAG9C;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;AAlFE,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;AAwFA,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,9 @@
|
|
|
1
|
+
import { FxDropdown, FxDropdownItem } from './dropdown';
|
|
2
|
+
export { FxDropdown, FxDropdownItem };
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'fx-dropdown': FxDropdown;
|
|
6
|
+
'fx-dropdown-item': FxDropdownItem;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAA0C,MAAM,YAAY,CAAC;AAEhG,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAKtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;QAC1B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { defineFxDropdown, defineFxDropdownItem } from "./dropdown.js";
|
|
2
|
+
import { FxDropdown, FxDropdownItem } from "./dropdown.js";
|
|
3
|
+
defineFxDropdown();
|
|
4
|
+
defineFxDropdownItem();
|
|
5
|
+
export {
|
|
6
|
+
FxDropdown,
|
|
7
|
+
FxDropdownItem
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|