@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.
Files changed (247) hide show
  1. package/README.md +117 -0
  2. package/dist/cdn.d.ts +6 -0
  3. package/dist/cdn.d.ts.map +1 -0
  4. package/dist/components/alert/alert.d.ts +14 -0
  5. package/dist/components/alert/alert.d.ts.map +1 -0
  6. package/dist/components/alert/alert.js +74 -0
  7. package/dist/components/alert/alert.js.map +1 -0
  8. package/dist/components/alert/index.d.ts +8 -0
  9. package/dist/components/alert/index.d.ts.map +1 -0
  10. package/dist/components/alert/index.js +7 -0
  11. package/dist/components/alert/index.js.map +1 -0
  12. package/dist/components/autocomplete/autocomplete.d.ts +20 -0
  13. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -0
  14. package/dist/components/autocomplete/autocomplete.js +144 -0
  15. package/dist/components/autocomplete/autocomplete.js.map +1 -0
  16. package/dist/components/autocomplete/index.d.ts +8 -0
  17. package/dist/components/autocomplete/index.d.ts.map +1 -0
  18. package/dist/components/autocomplete/index.js +7 -0
  19. package/dist/components/autocomplete/index.js.map +1 -0
  20. package/dist/components/badge/badge.d.ts +14 -0
  21. package/dist/components/badge/badge.d.ts.map +1 -0
  22. package/dist/components/badge/badge.js +46 -0
  23. package/dist/components/badge/badge.js.map +1 -0
  24. package/dist/components/badge/index.d.ts +2 -0
  25. package/dist/components/badge/index.d.ts.map +1 -0
  26. package/dist/components/badge/index.js +7 -0
  27. package/dist/components/badge/index.js.map +1 -0
  28. package/dist/components/button/button.d.ts +30 -0
  29. package/dist/components/button/button.d.ts.map +1 -0
  30. package/dist/components/button/button.js +194 -0
  31. package/dist/components/button/button.js.map +1 -0
  32. package/dist/components/button/index.d.ts +2 -0
  33. package/dist/components/button/index.d.ts.map +1 -0
  34. package/dist/components/button/index.js +7 -0
  35. package/dist/components/button/index.js.map +1 -0
  36. package/dist/components/calendar/calendar.d.ts +39 -0
  37. package/dist/components/calendar/calendar.d.ts.map +1 -0
  38. package/dist/components/calendar/calendar.js +346 -0
  39. package/dist/components/calendar/calendar.js.map +1 -0
  40. package/dist/components/calendar/index.d.ts +2 -0
  41. package/dist/components/calendar/index.d.ts.map +1 -0
  42. package/dist/components/calendar/index.js +7 -0
  43. package/dist/components/calendar/index.js.map +1 -0
  44. package/dist/components/checkbox/checkbox.d.ts +24 -0
  45. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  46. package/dist/components/checkbox/checkbox.js +142 -0
  47. package/dist/components/checkbox/checkbox.js.map +1 -0
  48. package/dist/components/checkbox/index.d.ts +2 -0
  49. package/dist/components/checkbox/index.d.ts.map +1 -0
  50. package/dist/components/checkbox/index.js +7 -0
  51. package/dist/components/checkbox/index.js.map +1 -0
  52. package/dist/components/datepicker/datepicker.d.ts +62 -0
  53. package/dist/components/datepicker/datepicker.d.ts.map +1 -0
  54. package/dist/components/datepicker/datepicker.js +441 -0
  55. package/dist/components/datepicker/datepicker.js.map +1 -0
  56. package/dist/components/datepicker/index.d.ts +3 -0
  57. package/dist/components/datepicker/index.d.ts.map +1 -0
  58. package/dist/components/datepicker/index.js +8 -0
  59. package/dist/components/datepicker/index.js.map +1 -0
  60. package/dist/components/dialog/dialog.d.ts +19 -0
  61. package/dist/components/dialog/dialog.d.ts.map +1 -0
  62. package/dist/components/dialog/dialog.js +134 -0
  63. package/dist/components/dialog/dialog.js.map +1 -0
  64. package/dist/components/dialog/index.d.ts +8 -0
  65. package/dist/components/dialog/index.d.ts.map +1 -0
  66. package/dist/components/dialog/index.js +7 -0
  67. package/dist/components/dialog/index.js.map +1 -0
  68. package/dist/components/drawer/drawer.d.ts +27 -0
  69. package/dist/components/drawer/drawer.d.ts.map +1 -0
  70. package/dist/components/drawer/drawer.js +195 -0
  71. package/dist/components/drawer/drawer.js.map +1 -0
  72. package/dist/components/drawer/index.d.ts +8 -0
  73. package/dist/components/drawer/index.d.ts.map +1 -0
  74. package/dist/components/drawer/index.js +7 -0
  75. package/dist/components/drawer/index.js.map +1 -0
  76. package/dist/components/dropdown/dropdown.d.ts +28 -0
  77. package/dist/components/dropdown/dropdown.d.ts.map +1 -0
  78. package/dist/components/dropdown/dropdown.js +137 -0
  79. package/dist/components/dropdown/dropdown.js.map +1 -0
  80. package/dist/components/dropdown/index.d.ts +9 -0
  81. package/dist/components/dropdown/index.d.ts.map +1 -0
  82. package/dist/components/dropdown/index.js +9 -0
  83. package/dist/components/dropdown/index.js.map +1 -0
  84. package/dist/components/floatlabel/floatlabel.d.ts +42 -0
  85. package/dist/components/floatlabel/floatlabel.d.ts.map +1 -0
  86. package/dist/components/floatlabel/floatlabel.js +270 -0
  87. package/dist/components/floatlabel/floatlabel.js.map +1 -0
  88. package/dist/components/floatlabel/index.d.ts +2 -0
  89. package/dist/components/floatlabel/index.d.ts.map +1 -0
  90. package/dist/components/floatlabel/index.js +7 -0
  91. package/dist/components/floatlabel/index.js.map +1 -0
  92. package/dist/components/input/index.d.ts +2 -0
  93. package/dist/components/input/index.d.ts.map +1 -0
  94. package/dist/components/input/index.js +7 -0
  95. package/dist/components/input/index.js.map +1 -0
  96. package/dist/components/input/input.d.ts +22 -0
  97. package/dist/components/input/input.d.ts.map +1 -0
  98. package/dist/components/input/input.js +169 -0
  99. package/dist/components/input/input.js.map +1 -0
  100. package/dist/components/multiselect/index.d.ts +2 -0
  101. package/dist/components/multiselect/index.d.ts.map +1 -0
  102. package/dist/components/multiselect/index.js +7 -0
  103. package/dist/components/multiselect/index.js.map +1 -0
  104. package/dist/components/multiselect/multiselect.d.ts +32 -0
  105. package/dist/components/multiselect/multiselect.d.ts.map +1 -0
  106. package/dist/components/multiselect/multiselect.js +389 -0
  107. package/dist/components/multiselect/multiselect.js.map +1 -0
  108. package/dist/components/pagination/index.d.ts +8 -0
  109. package/dist/components/pagination/index.d.ts.map +1 -0
  110. package/dist/components/pagination/index.js +7 -0
  111. package/dist/components/pagination/index.js.map +1 -0
  112. package/dist/components/pagination/pagination.d.ts +23 -0
  113. package/dist/components/pagination/pagination.d.ts.map +1 -0
  114. package/dist/components/pagination/pagination.js +121 -0
  115. package/dist/components/pagination/pagination.js.map +1 -0
  116. package/dist/components/progress/index.d.ts +8 -0
  117. package/dist/components/progress/index.d.ts.map +1 -0
  118. package/dist/components/progress/index.js +7 -0
  119. package/dist/components/progress/index.js.map +1 -0
  120. package/dist/components/progress/progress.d.ts +18 -0
  121. package/dist/components/progress/progress.d.ts.map +1 -0
  122. package/dist/components/progress/progress.js +99 -0
  123. package/dist/components/progress/progress.js.map +1 -0
  124. package/dist/components/radio/index.d.ts +2 -0
  125. package/dist/components/radio/index.d.ts.map +1 -0
  126. package/dist/components/radio/index.js +7 -0
  127. package/dist/components/radio/index.js.map +1 -0
  128. package/dist/components/radio/radio.d.ts +23 -0
  129. package/dist/components/radio/radio.d.ts.map +1 -0
  130. package/dist/components/radio/radio.js +133 -0
  131. package/dist/components/radio/radio.js.map +1 -0
  132. package/dist/components/select/index.d.ts +2 -0
  133. package/dist/components/select/index.d.ts.map +1 -0
  134. package/dist/components/select/index.js +7 -0
  135. package/dist/components/select/index.js.map +1 -0
  136. package/dist/components/select/select.d.ts +36 -0
  137. package/dist/components/select/select.d.ts.map +1 -0
  138. package/dist/components/select/select.js +287 -0
  139. package/dist/components/select/select.js.map +1 -0
  140. package/dist/components/skeleton/index.d.ts +8 -0
  141. package/dist/components/skeleton/index.d.ts.map +1 -0
  142. package/dist/components/skeleton/index.js +7 -0
  143. package/dist/components/skeleton/index.js.map +1 -0
  144. package/dist/components/skeleton/skeleton.d.ts +13 -0
  145. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  146. package/dist/components/skeleton/skeleton.js +57 -0
  147. package/dist/components/skeleton/skeleton.js.map +1 -0
  148. package/dist/components/spinner/index.d.ts +2 -0
  149. package/dist/components/spinner/index.d.ts.map +1 -0
  150. package/dist/components/spinner/index.js +7 -0
  151. package/dist/components/spinner/index.js.map +1 -0
  152. package/dist/components/spinner/spinner.d.ts +16 -0
  153. package/dist/components/spinner/spinner.d.ts.map +1 -0
  154. package/dist/components/spinner/spinner.js +50 -0
  155. package/dist/components/spinner/spinner.js.map +1 -0
  156. package/dist/components/switch/index.d.ts +2 -0
  157. package/dist/components/switch/index.d.ts.map +1 -0
  158. package/dist/components/switch/index.js +7 -0
  159. package/dist/components/switch/index.js.map +1 -0
  160. package/dist/components/switch/switch.d.ts +22 -0
  161. package/dist/components/switch/switch.d.ts.map +1 -0
  162. package/dist/components/switch/switch.js +115 -0
  163. package/dist/components/switch/switch.js.map +1 -0
  164. package/dist/components/table/index.d.ts +2 -0
  165. package/dist/components/table/index.d.ts.map +1 -0
  166. package/dist/components/table/index.js +7 -0
  167. package/dist/components/table/index.js.map +1 -0
  168. package/dist/components/table/table.d.ts +38 -0
  169. package/dist/components/table/table.d.ts.map +1 -0
  170. package/dist/components/table/table.js +258 -0
  171. package/dist/components/table/table.js.map +1 -0
  172. package/dist/components/tabs/index.d.ts +9 -0
  173. package/dist/components/tabs/index.d.ts.map +1 -0
  174. package/dist/components/tabs/index.js +9 -0
  175. package/dist/components/tabs/index.js.map +1 -0
  176. package/dist/components/tabs/tabs.d.ts +38 -0
  177. package/dist/components/tabs/tabs.d.ts.map +1 -0
  178. package/dist/components/tabs/tabs.js +162 -0
  179. package/dist/components/tabs/tabs.js.map +1 -0
  180. package/dist/components/textarea/index.d.ts +8 -0
  181. package/dist/components/textarea/index.d.ts.map +1 -0
  182. package/dist/components/textarea/index.js +7 -0
  183. package/dist/components/textarea/index.js.map +1 -0
  184. package/dist/components/textarea/textarea.d.ts +19 -0
  185. package/dist/components/textarea/textarea.d.ts.map +1 -0
  186. package/dist/components/textarea/textarea.js +109 -0
  187. package/dist/components/textarea/textarea.js.map +1 -0
  188. package/dist/components/toast/index.d.ts +8 -0
  189. package/dist/components/toast/index.d.ts.map +1 -0
  190. package/dist/components/toast/index.js +8 -0
  191. package/dist/components/toast/index.js.map +1 -0
  192. package/dist/components/toast/toast.d.ts +40 -0
  193. package/dist/components/toast/toast.d.ts.map +1 -0
  194. package/dist/components/toast/toast.js +176 -0
  195. package/dist/components/toast/toast.js.map +1 -0
  196. package/dist/components/tooltip/index.d.ts +8 -0
  197. package/dist/components/tooltip/index.d.ts.map +1 -0
  198. package/dist/components/tooltip/index.js +7 -0
  199. package/dist/components/tooltip/index.js.map +1 -0
  200. package/dist/components/tooltip/tooltip.d.ts +14 -0
  201. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  202. package/dist/components/tooltip/tooltip.js +86 -0
  203. package/dist/components/tooltip/tooltip.js.map +1 -0
  204. package/dist/core/base.d.ts +29 -0
  205. package/dist/core/base.d.ts.map +1 -0
  206. package/dist/core/base.js +41 -0
  207. package/dist/core/base.js.map +1 -0
  208. package/dist/core/css.d.ts +6 -0
  209. package/dist/core/css.d.ts.map +1 -0
  210. package/dist/core/css.js +11 -0
  211. package/dist/core/css.js.map +1 -0
  212. package/dist/core/define.d.ts +8 -0
  213. package/dist/core/define.d.ts.map +1 -0
  214. package/dist/core/define.js +10 -0
  215. package/dist/core/define.js.map +1 -0
  216. package/dist/core/presets.d.ts +40 -0
  217. package/dist/core/presets.d.ts.map +1 -0
  218. package/dist/core/presets.js +80 -0
  219. package/dist/core/presets.js.map +1 -0
  220. package/dist/core/theme.d.ts +47 -0
  221. package/dist/core/theme.d.ts.map +1 -0
  222. package/dist/core/theme.js +76 -0
  223. package/dist/core/theme.js.map +1 -0
  224. package/dist/core/tokens.d.ts +36 -0
  225. package/dist/core/tokens.d.ts.map +1 -0
  226. package/dist/core/tokens.js +83 -0
  227. package/dist/core/tokens.js.map +1 -0
  228. package/dist/docs/app.d.ts +37 -0
  229. package/dist/docs/app.d.ts.map +1 -0
  230. package/dist/fenix-ui.esm.js +4471 -0
  231. package/dist/fenix-ui.esm.js.map +1 -0
  232. package/dist/fenix-ui.umd.min.js +2022 -0
  233. package/dist/fenix-ui2.esm.js +82 -0
  234. package/dist/fenix-ui2.esm.js.map +1 -0
  235. package/dist/index.d.ts +39 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +107 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/plugins/auto-import.d.ts +18 -0
  240. package/dist/plugins/auto-import.d.ts.map +1 -0
  241. package/dist/plugins/auto-import.js +69 -0
  242. package/dist/plugins/auto-import.js.map +1 -0
  243. package/dist/plugins/index.d.ts +25 -0
  244. package/dist/plugins/index.d.ts.map +1 -0
  245. package/dist/plugins/index.js +21 -0
  246. package/dist/plugins/index.js.map +1 -0
  247. 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,8 @@
1
+ import { FxDialog } from './dialog';
2
+ export { FxDialog };
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'fx-dialog': FxDialog;
6
+ }
7
+ }
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ import { defineFxDialog } from "./dialog.js";
2
+ import { FxDialog } from "./dialog.js";
3
+ defineFxDialog();
4
+ export {
5
+ FxDialog
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -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,8 @@
1
+ import { FxDrawer } from './drawer';
2
+ export { FxDrawer };
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'fx-drawer': FxDrawer;
6
+ }
7
+ }
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ import { defineFxDrawer } from "./drawer.js";
2
+ import { FxDrawer } from "./drawer.js";
3
+ defineFxDrawer();
4
+ export {
5
+ FxDrawer
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -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