@wrrdev/fenix-ui 1.0.16 → 1.1.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 +2 -2
- package/dist/_virtual/preload-helper.js +68 -0
- package/dist/_virtual/preload-helper.js.map +1 -0
- package/dist/assets/base-css-BifSeW2H.js +31 -0
- package/dist/assets/base-css-BifSeW2H.js.map +1 -0
- package/dist/components/alert/alert.d.ts +2 -1
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/alert.js +10 -2
- package/dist/components/alert/alert.js.map +1 -1
- package/dist/components/avatar/avatar.d.ts +21 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -0
- package/dist/components/avatar/avatar.js +91 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/index.d.ts +8 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +7 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +35 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js +113 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +8 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/breadcrumb/index.js +7 -0
- package/dist/components/breadcrumb/index.js.map +1 -0
- package/dist/components/card/card.d.ts +15 -0
- package/dist/components/card/card.d.ts.map +1 -0
- package/dist/components/card/card.js +80 -0
- package/dist/components/card/card.js.map +1 -0
- package/dist/components/card/index.d.ts +8 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +7 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/carousel/carousel.d.ts +28 -0
- package/dist/components/carousel/carousel.d.ts.map +1 -0
- package/dist/components/carousel/carousel.js +176 -0
- package/dist/components/carousel/carousel.js.map +1 -0
- package/dist/components/carousel/index.d.ts +8 -0
- package/dist/components/carousel/index.d.ts.map +1 -0
- package/dist/components/carousel/index.js +7 -0
- package/dist/components/carousel/index.js.map +1 -0
- package/dist/components/chip/chip.d.ts +19 -0
- package/dist/components/chip/chip.d.ts.map +1 -0
- package/dist/components/chip/chip.js +126 -0
- package/dist/components/chip/chip.js.map +1 -0
- package/dist/components/chip/index.d.ts +8 -0
- package/dist/components/chip/index.d.ts.map +1 -0
- package/dist/components/chip/index.js +7 -0
- package/dist/components/chip/index.js.map +1 -0
- package/dist/components/confirmpopup/confirmpopup.d.ts +44 -0
- package/dist/components/confirmpopup/confirmpopup.d.ts.map +1 -0
- package/dist/components/confirmpopup/confirmpopup.js +233 -0
- package/dist/components/confirmpopup/confirmpopup.js.map +1 -0
- package/dist/components/confirmpopup/index.d.ts +8 -0
- package/dist/components/confirmpopup/index.d.ts.map +1 -0
- package/dist/components/confirmpopup/index.js +7 -0
- package/dist/components/confirmpopup/index.js.map +1 -0
- package/dist/components/empty-state/empty-state.d.ts +14 -0
- package/dist/components/empty-state/empty-state.d.ts.map +1 -0
- package/dist/components/empty-state/empty-state.js +71 -0
- package/dist/components/empty-state/empty-state.js.map +1 -0
- package/dist/components/empty-state/index.d.ts +8 -0
- package/dist/components/empty-state/index.d.ts.map +1 -0
- package/dist/components/empty-state/index.js +7 -0
- package/dist/components/empty-state/index.js.map +1 -0
- package/dist/components/fileupload/fileupload.d.ts +42 -0
- package/dist/components/fileupload/fileupload.d.ts.map +1 -0
- package/dist/components/fileupload/fileupload.js +284 -0
- package/dist/components/fileupload/fileupload.js.map +1 -0
- package/dist/components/fileupload/index.d.ts +8 -0
- package/dist/components/fileupload/index.d.ts.map +1 -0
- package/dist/components/fileupload/index.js +7 -0
- package/dist/components/fileupload/index.js.map +1 -0
- package/dist/components/menu/index.d.ts +8 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/menu/index.js +7 -0
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/menu/menu.d.ts +23 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.js +155 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/orderlist/orderlist.d.ts +1 -1
- package/dist/components/orderlist/orderlist.d.ts.map +1 -1
- package/dist/components/orderlist/orderlist.js +2 -2
- package/dist/components/orderlist/orderlist.js.map +1 -1
- package/dist/components/password-strength/index.d.ts +8 -0
- package/dist/components/password-strength/index.d.ts.map +1 -0
- package/dist/components/password-strength/index.js +7 -0
- package/dist/components/password-strength/index.js.map +1 -0
- package/dist/components/password-strength/password-strength.d.ts +23 -0
- package/dist/components/password-strength/password-strength.d.ts.map +1 -0
- package/dist/components/password-strength/password-strength.js +109 -0
- package/dist/components/password-strength/password-strength.js.map +1 -0
- package/dist/components/picklist/picklist.d.ts +1 -1
- package/dist/components/picklist/picklist.d.ts.map +1 -1
- package/dist/components/picklist/picklist.js +2 -2
- package/dist/components/picklist/picklist.js.map +1 -1
- package/dist/components/popover/index.d.ts +8 -0
- package/dist/components/popover/index.d.ts.map +1 -0
- package/dist/components/popover/index.js +7 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/popover/popover.d.ts +39 -0
- package/dist/components/popover/popover.d.ts.map +1 -0
- package/dist/components/popover/popover.js +228 -0
- package/dist/components/popover/popover.js.map +1 -0
- package/dist/components/rating/index.d.ts +8 -0
- package/dist/components/rating/index.d.ts.map +1 -0
- package/dist/components/rating/index.js +7 -0
- package/dist/components/rating/index.js.map +1 -0
- package/dist/components/rating/rating.d.ts +25 -0
- package/dist/components/rating/rating.d.ts.map +1 -0
- package/dist/components/rating/rating.js +119 -0
- package/dist/components/rating/rating.js.map +1 -0
- package/dist/components/slider/index.d.ts +8 -0
- package/dist/components/slider/index.d.ts.map +1 -0
- package/dist/components/slider/index.js +7 -0
- package/dist/components/slider/index.js.map +1 -0
- package/dist/components/slider/slider.d.ts +33 -0
- package/dist/components/slider/slider.d.ts.map +1 -0
- package/dist/components/slider/slider.js +260 -0
- package/dist/components/slider/slider.js.map +1 -0
- package/dist/components/stepper/index.d.ts +8 -0
- package/dist/components/stepper/index.d.ts.map +1 -0
- package/dist/components/stepper/index.js +7 -0
- package/dist/components/stepper/index.js.map +1 -0
- package/dist/components/stepper/stepper.d.ts +33 -0
- package/dist/components/stepper/stepper.d.ts.map +1 -0
- package/dist/components/stepper/stepper.js +162 -0
- package/dist/components/stepper/stepper.js.map +1 -0
- package/dist/components/timeline/index.d.ts +8 -0
- package/dist/components/timeline/index.d.ts.map +1 -0
- package/dist/components/timeline/index.js +7 -0
- package/dist/components/timeline/index.js.map +1 -0
- package/dist/components/timeline/timeline.d.ts +30 -0
- package/dist/components/timeline/timeline.d.ts.map +1 -0
- package/dist/components/timeline/timeline.js +146 -0
- package/dist/components/timeline/timeline.js.map +1 -0
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/toast/toast.js +21 -2
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle-button-group/index.d.ts +8 -0
- package/dist/components/toggle-button-group/index.d.ts.map +1 -0
- package/dist/components/toggle-button-group/index.js +7 -0
- package/dist/components/toggle-button-group/index.js.map +1 -0
- package/dist/components/toggle-button-group/toggle-button-group.d.ts +21 -0
- package/dist/components/toggle-button-group/toggle-button-group.d.ts.map +1 -0
- package/dist/components/toggle-button-group/toggle-button-group.js +103 -0
- package/dist/components/toggle-button-group/toggle-button-group.js.map +1 -0
- package/dist/components/tree/index.d.ts +8 -0
- package/dist/components/tree/index.d.ts.map +1 -0
- package/dist/components/tree/index.js +7 -0
- package/dist/components/tree/index.js.map +1 -0
- package/dist/components/tree/tree.d.ts +34 -0
- package/dist/components/tree/tree.d.ts.map +1 -0
- package/dist/components/tree/tree.js +149 -0
- package/dist/components/tree/tree.js.map +1 -0
- package/dist/core/base.d.ts +1 -1
- package/dist/core/base.d.ts.map +1 -1
- package/dist/core/base.js +1 -1
- package/dist/core/base.js.map +1 -1
- package/dist/docs/app.d.ts.map +1 -1
- package/dist/docs/componentes/avatar.doc.d.ts +6 -0
- package/dist/docs/componentes/avatar.doc.d.ts.map +1 -0
- package/dist/docs/componentes/breadcrumb.doc.d.ts +6 -0
- package/dist/docs/componentes/breadcrumb.doc.d.ts.map +1 -0
- package/dist/docs/componentes/card.doc.d.ts +6 -0
- package/dist/docs/componentes/card.doc.d.ts.map +1 -0
- package/dist/docs/componentes/carousel.doc.d.ts +6 -0
- package/dist/docs/componentes/carousel.doc.d.ts.map +1 -0
- package/dist/docs/componentes/chip.doc.d.ts +6 -0
- package/dist/docs/componentes/chip.doc.d.ts.map +1 -0
- package/dist/docs/componentes/confirmpopup.doc.d.ts +6 -0
- package/dist/docs/componentes/confirmpopup.doc.d.ts.map +1 -0
- package/dist/docs/componentes/empty-state.doc.d.ts +6 -0
- package/dist/docs/componentes/empty-state.doc.d.ts.map +1 -0
- package/dist/docs/componentes/fileupload.doc.d.ts +6 -0
- package/dist/docs/componentes/fileupload.doc.d.ts.map +1 -0
- package/dist/docs/componentes/index.d.ts.map +1 -1
- package/dist/docs/componentes/menu.doc.d.ts +6 -0
- package/dist/docs/componentes/menu.doc.d.ts.map +1 -0
- package/dist/docs/componentes/password-strength.doc.d.ts +6 -0
- package/dist/docs/componentes/password-strength.doc.d.ts.map +1 -0
- package/dist/docs/componentes/popover.doc.d.ts +6 -0
- package/dist/docs/componentes/popover.doc.d.ts.map +1 -0
- package/dist/docs/componentes/rating.doc.d.ts +6 -0
- package/dist/docs/componentes/rating.doc.d.ts.map +1 -0
- package/dist/docs/componentes/slider.doc.d.ts +6 -0
- package/dist/docs/componentes/slider.doc.d.ts.map +1 -0
- package/dist/docs/componentes/stepper.doc.d.ts +6 -0
- package/dist/docs/componentes/stepper.doc.d.ts.map +1 -0
- package/dist/docs/componentes/timeline.doc.d.ts +6 -0
- package/dist/docs/componentes/timeline.doc.d.ts.map +1 -0
- package/dist/docs/componentes/toggle-button-group.doc.d.ts +6 -0
- package/dist/docs/componentes/toggle-button-group.doc.d.ts.map +1 -0
- package/dist/docs/componentes/tree.doc.d.ts +6 -0
- package/dist/docs/componentes/tree.doc.d.ts.map +1 -0
- package/dist/fenix-icons.woff2 +0 -0
- package/dist/fenix-ui.umd.min.js +1317 -160
- package/dist/fenix-ui2.esm.js +4317 -7816
- package/dist/fenix-ui2.esm.js.map +1 -1
- package/dist/fenix-ui3.esm.js +10396 -84
- package/dist/fenix-ui3.esm.js.map +1 -1
- package/dist/fenix-ui4.esm.js +110 -0
- package/dist/fenix-ui4.esm.js.map +1 -0
- package/dist/icons/base-css.d.ts +21 -0
- package/dist/icons/base-css.d.ts.map +1 -0
- package/dist/icons/base-css.js +32 -0
- package/dist/icons/base-css.js.map +1 -0
- package/dist/icons/fenix-icons.woff2 +0 -0
- package/dist/icons/index.d.ts +31 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +47 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/names.d.ts +11 -0
- package/dist/icons/names.d.ts.map +1 -0
- package/dist/icons/names.js +4283 -0
- package/dist/icons/names.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/auto-import.d.ts +2 -0
- package/dist/plugins/auto-import.d.ts.map +1 -1
- package/dist/plugins/auto-import.js +23 -0
- package/dist/plugins/auto-import.js.map +1 -1
- package/package.json +74 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
import { esc } from "../../core/sanitize.js";
|
|
5
|
+
const _FxCard = class _FxCard extends FxElement {
|
|
6
|
+
static get observedAttributes() {
|
|
7
|
+
return ["variant", "size", "padded", "heading"];
|
|
8
|
+
}
|
|
9
|
+
render() {
|
|
10
|
+
const heading = this.getAttr("heading");
|
|
11
|
+
this.setTemplate(`
|
|
12
|
+
<div class="card" part="card">
|
|
13
|
+
<header part="header" ${heading ? "" : "hidden"}>${esc(heading)}<slot name="header"></slot></header>
|
|
14
|
+
<div class="body" part="content"><slot></slot></div>
|
|
15
|
+
<footer part="footer"><slot name="footer"></slot></footer>
|
|
16
|
+
</div>
|
|
17
|
+
`);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
_FxCard.styles = css`
|
|
21
|
+
:host {
|
|
22
|
+
display: block;
|
|
23
|
+
font-family: var(--fx-font-family);
|
|
24
|
+
font-size: var(--fx-font-size);
|
|
25
|
+
box-sizing: border-box;
|
|
26
|
+
}
|
|
27
|
+
.card {
|
|
28
|
+
background: var(--fx-surface-background);
|
|
29
|
+
border: 1px solid var(--fx-border-default);
|
|
30
|
+
border-radius: var(--fx-radius-lg);
|
|
31
|
+
box-shadow: var(--fx-shadow-sm);
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
transition: box-shadow var(--fx-motion-duration-normal) var(--fx-motion-easing);
|
|
36
|
+
}
|
|
37
|
+
/* Elevado: sombra principal; Flat: sem sombra mas cor plana; Outline: sem sombra e borda sólida */
|
|
38
|
+
:host([variant='elevated']) .card { box-shadow: var(--fx-shadow-md); }
|
|
39
|
+
:host([variant='elevated']) .card:hover { box-shadow: var(--fx-shadow-xl); }
|
|
40
|
+
:host([variant='flat']) .card { box-shadow: none; border-color: transparent; }
|
|
41
|
+
:host([variant='outline']) .card { box-shadow: none; border-style: solid; border-width: 1px; }
|
|
42
|
+
:host([variant='ghost']) .card { box-shadow: none; border-color: transparent; background: transparent; }
|
|
43
|
+
|
|
44
|
+
/* Tamanhos */
|
|
45
|
+
:host([size='sm']) .card { border-radius: var(--fx-radius-sm); }
|
|
46
|
+
:host([size='lg']) .card { border-radius: var(--fx-radius-xl); }
|
|
47
|
+
|
|
48
|
+
header {
|
|
49
|
+
padding: var(--fx-space-md) var(--fx-space-xl);
|
|
50
|
+
border-bottom: 1px solid var(--fx-border-default);
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
color: var(--fx-text-default);
|
|
53
|
+
font-size: calc(var(--fx-font-size) + 2px);
|
|
54
|
+
}
|
|
55
|
+
header[hidden] { display: none; }
|
|
56
|
+
|
|
57
|
+
.body {
|
|
58
|
+
flex: 1 1 auto;
|
|
59
|
+
}
|
|
60
|
+
:host([padded]) .body { padding: var(--fx-space-lg) var(--fx-space-xl); }
|
|
61
|
+
:host([padded]) .body:empty { padding: 0; }
|
|
62
|
+
|
|
63
|
+
footer {
|
|
64
|
+
padding: var(--fx-space-md) var(--fx-space-xl);
|
|
65
|
+
border-top: 1px solid var(--fx-border-default);
|
|
66
|
+
display: flex;
|
|
67
|
+
justify-content: flex-end;
|
|
68
|
+
gap: var(--fx-space-sm);
|
|
69
|
+
}
|
|
70
|
+
footer[hidden] { display: none; }
|
|
71
|
+
`;
|
|
72
|
+
let FxCard = _FxCard;
|
|
73
|
+
function defineFxCard() {
|
|
74
|
+
return defineElement("fx-card", FxCard);
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
FxCard,
|
|
78
|
+
defineFxCard
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.js","sources":["../../../src/components/card/card.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\nimport { esc } from '../../core/sanitize';\n\n/**\n * <fx-card> — Container de conteúdo com cabeçalho, corpo e rodapé.\n *\n * Atributos: variant (elevated|flat|outline, padrão elevated), size (sm|md|lg),\n * padded (exibe padding interno), heading (rótulo opcional no cabeçalho).\n * Slots: `header`, padrão (conteúdo), `footer`.\n */\nexport class FxCard 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 box-sizing: border-box;\n }\n .card {\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-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n transition: box-shadow var(--fx-motion-duration-normal) var(--fx-motion-easing);\n }\n /* Elevado: sombra principal; Flat: sem sombra mas cor plana; Outline: sem sombra e borda sólida */\n :host([variant='elevated']) .card { box-shadow: var(--fx-shadow-md); }\n :host([variant='elevated']) .card:hover { box-shadow: var(--fx-shadow-xl); }\n :host([variant='flat']) .card { box-shadow: none; border-color: transparent; }\n :host([variant='outline']) .card { box-shadow: none; border-style: solid; border-width: 1px; }\n :host([variant='ghost']) .card { box-shadow: none; border-color: transparent; background: transparent; }\n\n /* Tamanhos */\n :host([size='sm']) .card { border-radius: var(--fx-radius-sm); }\n :host([size='lg']) .card { border-radius: var(--fx-radius-xl); }\n\n header {\n padding: var(--fx-space-md) var(--fx-space-xl);\n border-bottom: 1px solid var(--fx-border-default);\n font-weight: 600;\n color: var(--fx-text-default);\n font-size: calc(var(--fx-font-size) + 2px);\n }\n header[hidden] { display: none; }\n\n .body {\n flex: 1 1 auto;\n }\n :host([padded]) .body { padding: var(--fx-space-lg) var(--fx-space-xl); }\n :host([padded]) .body:empty { padding: 0; }\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 ['variant', 'size', 'padded', 'heading'];\n }\n\n protected override render(): void {\n const heading = this.getAttr('heading');\n this.setTemplate(`\n <div class=\"card\" part=\"card\">\n <header part=\"header\" ${heading ? '' : 'hidden'}>${esc(heading)}<slot name=\"header\"></slot></header>\n <div class=\"body\" part=\"content\"><slot></slot></div>\n <footer part=\"footer\"><slot name=\"footer\"></slot></footer>\n </div>\n `);\n }\n}\n\nexport function defineFxCard(): typeof FxCard {\n return defineElement('fx-card', FxCard);\n}\n"],"names":[],"mappings":";;;;AAYO,MAAM,UAAN,MAAM,gBAAe,UAAU;AAAA,EAsDpC,WAAoB,qBAA+B;AACjD,WAAO,CAAC,WAAW,QAAQ,UAAU,SAAS;AAAA,EAChD;AAAA,EAEmB,SAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,SAAK,YAAY;AAAA;AAAA,gCAEW,UAAU,KAAK,QAAQ,IAAI,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,KAIlE;AAAA,EACH;AACF;AAnEE,QAAgB,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;AADpB,IAAM,SAAN;AAsEA,SAAS,eAA8B;AAC5C,SAAO,cAAc,WAAW,MAAM;AACxC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,CAAC;AAIlB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/card/index.ts"],"sourcesContent":["import { FxCard, defineFxCard } from './card';\n\nexport { FxCard };\n\ndefineFxCard();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-card': FxCard;\n }\n}\n"],"names":[],"mappings":";;AAIA,aAAA;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-carousel> — Carrossel de slides com navegação e indicadores.
|
|
4
|
+
*
|
|
5
|
+
* Atributos: active (índice do slide), autoplay (ms), loop, show-arrows,
|
|
6
|
+
* show-indicators.
|
|
7
|
+
* Slot `slide`: cada elemento com [slot="slide"] vira um slide.
|
|
8
|
+
* Eventos (composed): `change` (detail: { index }).
|
|
9
|
+
*/
|
|
10
|
+
export declare class FxCarousel extends FxElement {
|
|
11
|
+
static styles: string;
|
|
12
|
+
static get observedAttributes(): string[];
|
|
13
|
+
get active(): number;
|
|
14
|
+
set active(v: number);
|
|
15
|
+
get slideCount(): number;
|
|
16
|
+
private _slides;
|
|
17
|
+
private _timer?;
|
|
18
|
+
protected render(): void;
|
|
19
|
+
protected attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
20
|
+
private _go;
|
|
21
|
+
next(): void;
|
|
22
|
+
prev(): void;
|
|
23
|
+
private _bind;
|
|
24
|
+
private _restartAutoplay;
|
|
25
|
+
disconnectedCallback(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare function defineFxCarousel(): typeof FxCarousel;
|
|
28
|
+
//# sourceMappingURL=carousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/carousel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,OAAgB,MAAM,SAoEpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,MAAM,IAAI,MAAM,CAGnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAAgC;IAExD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAiC;cAE7B,MAAM,IAAI,IAAI;cAsBd,wBAAwB,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI;IAYP,OAAO,CAAC,GAAG;IAyBX,IAAI,IAAI,IAAI;IACZ,IAAI,IAAI,IAAI;IAEZ,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,gBAAgB;IAQf,oBAAoB,IAAI,IAAI;CAItC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,UAAU,CAEpD"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
const _FxCarousel = class _FxCarousel extends FxElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this._slides = [];
|
|
8
|
+
}
|
|
9
|
+
static get observedAttributes() {
|
|
10
|
+
return ["active", "autoplay", "loop", "show-arrows", "show-indicators"];
|
|
11
|
+
}
|
|
12
|
+
get active() {
|
|
13
|
+
const n = Number(this.getAttr("active", "0"));
|
|
14
|
+
return Math.min(this.slideCount - 1, Math.max(0, Number.isFinite(n) ? n : 0));
|
|
15
|
+
}
|
|
16
|
+
set active(v) {
|
|
17
|
+
this.setAttribute("active", String(Math.min(this.slideCount - 1, Math.max(0, v))));
|
|
18
|
+
}
|
|
19
|
+
get slideCount() {
|
|
20
|
+
return this._slides.length;
|
|
21
|
+
}
|
|
22
|
+
render() {
|
|
23
|
+
this._slides = Array.from(this.children).filter((el) => el.matches('[slot="slide"]'));
|
|
24
|
+
const contentsHtml = this._slides.map((s, i) => `<div class="slide" part="slide" data-i="${i}" ${i === this.active ? "" : "hidden"}>${s.innerHTML}</div>`).join("");
|
|
25
|
+
this.setTemplate(`
|
|
26
|
+
<div class="viewport" part="viewport">
|
|
27
|
+
${contentsHtml}
|
|
28
|
+
<button type="button" class="arrow prev" part="arrow" aria-label="Anterior" ${this.hasAttr("show-arrows") ? "" : "hidden"}>‹</button>
|
|
29
|
+
<button type="button" class="arrow next" part="arrow" aria-label="Próximo" ${this.hasAttr("show-arrows") ? "" : "hidden"}>›</button>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="indicators" part="indicators" ${this.hasAttr("show-indicators") ? "" : "hidden"}>
|
|
32
|
+
${this._slides.map((_, i) => `<button type="button" class="dot ${i === this.active ? "on" : ""}" data-i="${i}" aria-label="Slide ${i + 1}"></button>`).join("")}
|
|
33
|
+
</div>
|
|
34
|
+
`);
|
|
35
|
+
this._bind();
|
|
36
|
+
this._restartAutoplay();
|
|
37
|
+
}
|
|
38
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
39
|
+
if (!this.isConnected || oldValue === newValue) return;
|
|
40
|
+
if (name === "active" && this._slides.length) {
|
|
41
|
+
this._go(this.active, false);
|
|
42
|
+
this._restartAutoplay();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.render();
|
|
46
|
+
}
|
|
47
|
+
_go(index, emit = true) {
|
|
48
|
+
const count = this._slides.length;
|
|
49
|
+
if (!count) return;
|
|
50
|
+
let target;
|
|
51
|
+
if (this.hasAttr("loop")) {
|
|
52
|
+
target = (index % count + count) % count;
|
|
53
|
+
} else {
|
|
54
|
+
target = Math.min(count - 1, Math.max(0, index));
|
|
55
|
+
}
|
|
56
|
+
if (String(target) === this.getAttribute("active")) return;
|
|
57
|
+
this.active = target;
|
|
58
|
+
this.root.querySelectorAll(".slide").forEach((s) => {
|
|
59
|
+
s.toggleAttribute("hidden", Number(s.dataset.i) !== target);
|
|
60
|
+
});
|
|
61
|
+
this.root.querySelectorAll(".dot").forEach((d) => {
|
|
62
|
+
d.classList.toggle("on", Number(d.dataset.i) === target);
|
|
63
|
+
});
|
|
64
|
+
if (emit) {
|
|
65
|
+
this.dispatchEvent(new CustomEvent("change", { bubbles: true, composed: true, detail: { index: target } }));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
next() {
|
|
69
|
+
this._go(this.active + 1);
|
|
70
|
+
}
|
|
71
|
+
prev() {
|
|
72
|
+
this._go(this.active - 1);
|
|
73
|
+
}
|
|
74
|
+
_bind() {
|
|
75
|
+
this.root.querySelector(".arrow.prev")?.addEventListener("click", () => this.prev());
|
|
76
|
+
this.root.querySelector(".arrow.next")?.addEventListener("click", () => this.next());
|
|
77
|
+
this.root.querySelectorAll(".dot").forEach((d) => {
|
|
78
|
+
d.addEventListener("click", () => this._go(Number(d.dataset.i)));
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
_restartAutoplay() {
|
|
82
|
+
if (this._timer) {
|
|
83
|
+
clearInterval(this._timer);
|
|
84
|
+
this._timer = void 0;
|
|
85
|
+
}
|
|
86
|
+
const ms = Number(this.getAttr("autoplay", "0"));
|
|
87
|
+
if (ms > 0) {
|
|
88
|
+
this._timer = setInterval(() => this._go(this.active + 1), ms);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
disconnectedCallback() {
|
|
92
|
+
super.disconnectedCallback();
|
|
93
|
+
if (this._timer) {
|
|
94
|
+
clearInterval(this._timer);
|
|
95
|
+
this._timer = void 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
_FxCarousel.styles = css`
|
|
100
|
+
:host {
|
|
101
|
+
display: block;
|
|
102
|
+
font-family: var(--fx-font-family);
|
|
103
|
+
font-size: var(--fx-font-size);
|
|
104
|
+
}
|
|
105
|
+
.viewport {
|
|
106
|
+
position: relative;
|
|
107
|
+
overflow: hidden;
|
|
108
|
+
border-radius: var(--fx-radius-lg);
|
|
109
|
+
border: 1px solid var(--fx-border-default);
|
|
110
|
+
background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.04));
|
|
111
|
+
}
|
|
112
|
+
.slide {
|
|
113
|
+
min-height: 200px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
padding: var(--fx-space-xl);
|
|
118
|
+
box-sizing: border-box;
|
|
119
|
+
color: var(--fx-text-default);
|
|
120
|
+
}
|
|
121
|
+
.slide[hidden] { display: none; }
|
|
122
|
+
.arrow {
|
|
123
|
+
position: absolute;
|
|
124
|
+
top: 50%;
|
|
125
|
+
transform: translateY(-50%);
|
|
126
|
+
width: 34px;
|
|
127
|
+
height: 34px;
|
|
128
|
+
border: 1px solid var(--fx-border-default);
|
|
129
|
+
border-radius: var(--fx-radius-full);
|
|
130
|
+
background: color-mix(in srgb, var(--fx-surface-background, #fff) 82%, transparent);
|
|
131
|
+
color: var(--fx-text-default);
|
|
132
|
+
font-size: calc(var(--fx-font-size) + 4px);
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
display: inline-flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
backdrop-filter: blur(2px);
|
|
138
|
+
transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing), border-color var(--fx-motion-duration-fast) var(--fx-motion-easing), color var(--fx-motion-duration-fast) var(--fx-motion-easing), transform var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
139
|
+
}
|
|
140
|
+
.arrow:hover {
|
|
141
|
+
background: var(--fx-color-primary);
|
|
142
|
+
border-color: var(--fx-color-primary);
|
|
143
|
+
color: #fff;
|
|
144
|
+
transform: translateY(-50%) scale(1.08);
|
|
145
|
+
}
|
|
146
|
+
.arrow[hidden] { display: none; }
|
|
147
|
+
.arrow.prev { left: var(--fx-space-md); }
|
|
148
|
+
.arrow.next { right: var(--fx-space-md); }
|
|
149
|
+
.indicators {
|
|
150
|
+
display: flex;
|
|
151
|
+
justify-content: center;
|
|
152
|
+
gap: 6px;
|
|
153
|
+
padding: var(--fx-space-md) 0 var(--fx-space-xs);
|
|
154
|
+
}
|
|
155
|
+
.indicators[hidden] { display: none; }
|
|
156
|
+
.dot {
|
|
157
|
+
width: 8px;
|
|
158
|
+
height: 8px;
|
|
159
|
+
border-radius: var(--fx-radius-full);
|
|
160
|
+
border: none;
|
|
161
|
+
padding: 0;
|
|
162
|
+
background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.15));
|
|
163
|
+
cursor: pointer;
|
|
164
|
+
transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing), width var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
165
|
+
}
|
|
166
|
+
.dot.on { background: var(--fx-color-primary); width: 20px; }
|
|
167
|
+
`;
|
|
168
|
+
let FxCarousel = _FxCarousel;
|
|
169
|
+
function defineFxCarousel() {
|
|
170
|
+
return defineElement("fx-carousel", FxCarousel);
|
|
171
|
+
}
|
|
172
|
+
export {
|
|
173
|
+
FxCarousel,
|
|
174
|
+
defineFxCarousel
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=carousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.js","sources":["../../../src/components/carousel/carousel.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\n\n/**\n * <fx-carousel> — Carrossel de slides com navegação e indicadores.\n *\n * Atributos: active (índice do slide), autoplay (ms), loop, show-arrows,\n * show-indicators.\n * Slot `slide`: cada elemento com [slot=\"slide\"] vira um slide.\n * Eventos (composed): `change` (detail: { index }).\n */\nexport class FxCarousel 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 .viewport {\n position: relative;\n overflow: hidden;\n border-radius: var(--fx-radius-lg);\n border: 1px solid var(--fx-border-default);\n background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.04));\n }\n .slide {\n min-height: 200px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--fx-space-xl);\n box-sizing: border-box;\n color: var(--fx-text-default);\n }\n .slide[hidden] { display: none; }\n .arrow {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 34px;\n height: 34px;\n border: 1px solid var(--fx-border-default);\n border-radius: var(--fx-radius-full);\n background: color-mix(in srgb, var(--fx-surface-background, #fff) 82%, transparent);\n color: var(--fx-text-default);\n font-size: calc(var(--fx-font-size) + 4px);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n backdrop-filter: blur(2px);\n transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing), border-color var(--fx-motion-duration-fast) var(--fx-motion-easing), color var(--fx-motion-duration-fast) var(--fx-motion-easing), transform var(--fx-motion-duration-fast) var(--fx-motion-easing);\n }\n .arrow:hover {\n background: var(--fx-color-primary);\n border-color: var(--fx-color-primary);\n color: #fff;\n transform: translateY(-50%) scale(1.08);\n }\n .arrow[hidden] { display: none; }\n .arrow.prev { left: var(--fx-space-md); }\n .arrow.next { right: var(--fx-space-md); }\n .indicators {\n display: flex;\n justify-content: center;\n gap: 6px;\n padding: var(--fx-space-md) 0 var(--fx-space-xs);\n }\n .indicators[hidden] { display: none; }\n .dot {\n width: 8px;\n height: 8px;\n border-radius: var(--fx-radius-full);\n border: none;\n padding: 0;\n background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.15));\n cursor: pointer;\n transition: background var(--fx-motion-duration-fast) var(--fx-motion-easing), width var(--fx-motion-duration-fast) var(--fx-motion-easing);\n }\n .dot.on { background: var(--fx-color-primary); width: 20px; }\n `;\n\n static override get observedAttributes(): string[] {\n return ['active', 'autoplay', 'loop', 'show-arrows', 'show-indicators'];\n }\n\n get active(): number {\n const n = Number(this.getAttr('active', '0'));\n return Math.min(this.slideCount - 1, Math.max(0, Number.isFinite(n) ? n : 0));\n }\n set active(v: number) {\n this.setAttribute('active', String(Math.min(this.slideCount - 1, Math.max(0, v))));\n }\n\n get slideCount(): number { return this._slides.length; }\n\n private _slides: Element[] = [];\n private _timer?: ReturnType<typeof setInterval>;\n\n protected override render(): void {\n this._slides = Array.from(this.children).filter((el) => el.matches('[slot=\"slide\"]'));\n\n const contentsHtml = this._slides\n .map((s, i) => `<div class=\"slide\" part=\"slide\" data-i=\"${i}\" ${i === this.active ? '' : 'hidden'}>${s.innerHTML}</div>`)\n .join('');\n\n this.setTemplate(`\n <div class=\"viewport\" part=\"viewport\">\n ${contentsHtml}\n <button type=\"button\" class=\"arrow prev\" part=\"arrow\" aria-label=\"Anterior\" ${this.hasAttr('show-arrows') ? '' : 'hidden'}>‹</button>\n <button type=\"button\" class=\"arrow next\" part=\"arrow\" aria-label=\"Próximo\" ${this.hasAttr('show-arrows') ? '' : 'hidden'}>›</button>\n </div>\n <div class=\"indicators\" part=\"indicators\" ${this.hasAttr('show-indicators') ? '' : 'hidden'}>\n ${this._slides.map((_, i) => `<button type=\"button\" class=\"dot ${i === this.active ? 'on' : ''}\" data-i=\"${i}\" aria-label=\"Slide ${i + 1}\"></button>`).join('')}\n </div>\n `);\n\n this._bind();\n this._restartAutoplay();\n }\n\n protected override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ): void {\n if (!this.isConnected || oldValue === newValue) return;\n // só o índice ativo evita re-render total (preserva autoplay)\n if (name === 'active' && this._slides.length) {\n this._go(this.active, false);\n this._restartAutoplay();\n return;\n }\n // show-arrows/show-indicators/loop/autoplay: re-render estrutural\n this.render();\n }\n\n private _go(index: number, emit = true): void {\n const count = this._slides.length;\n if (!count) return;\n let target: number;\n if (this.hasAttr('loop')) {\n // wrap nas duas direções (permite voltar do primeiro ao último)\n target = ((index % count) + count) % count;\n } else {\n target = Math.min(count - 1, Math.max(0, index));\n }\n // guarda: evita recursão infinita (setAttribute → attributeChangedCallback → _go)\n if (String(target) === this.getAttribute('active')) return;\n this.active = target;\n\n this.root.querySelectorAll<HTMLElement>('.slide').forEach((s) => {\n s.toggleAttribute('hidden', Number(s.dataset.i) !== target);\n });\n this.root.querySelectorAll<HTMLElement>('.dot').forEach((d) => {\n d.classList.toggle('on', Number(d.dataset.i) === target);\n });\n if (emit) {\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: { index: target } }));\n }\n }\n\n next(): void { this._go(this.active + 1); }\n prev(): void { this._go(this.active - 1); }\n\n private _bind(): void {\n this.root.querySelector('.arrow.prev')?.addEventListener('click', () => this.prev());\n this.root.querySelector('.arrow.next')?.addEventListener('click', () => this.next());\n this.root.querySelectorAll<HTMLElement>('.dot').forEach((d) => {\n d.addEventListener('click', () => this._go(Number(d.dataset.i)));\n });\n }\n\n private _restartAutoplay(): void {\n if (this._timer) { clearInterval(this._timer); this._timer = undefined; }\n const ms = Number(this.getAttr('autoplay', '0'));\n if (ms > 0) {\n this._timer = setInterval(() => this._go(this.active + 1), ms);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._timer) { clearInterval(this._timer); this._timer = undefined; }\n }\n}\n\nexport function defineFxCarousel(): typeof FxCarousel {\n return defineElement('fx-carousel', FxCarousel);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,YAAY,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,CAAC;AAItB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/carousel/index.ts"],"sourcesContent":["import { FxCarousel, defineFxCarousel } from './carousel';\n\nexport { FxCarousel };\n\ndefineFxCarousel();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-carousel': FxCarousel;\n }\n}"],"names":[],"mappings":";;AAIA,iBAAA;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-chip> — Chip/Tag compacto para labels, filtros e seleções.
|
|
4
|
+
*
|
|
5
|
+
* Atributos: variant (primary|secondary|success|warning|danger|info),
|
|
6
|
+
* size (sm|md|lg), removable (mostra o botão ×), selectable (clica alterna
|
|
7
|
+
* o estado selected), selected, disabled, icon (glifo/emoji).
|
|
8
|
+
* Slot padrão: texto do chip.
|
|
9
|
+
* Eventos (composed): `remove` (ao clicar em ×) e `chip-click` (ao clicar).
|
|
10
|
+
*/
|
|
11
|
+
export declare class FxChip extends FxElement {
|
|
12
|
+
static styles: string;
|
|
13
|
+
static get observedAttributes(): string[];
|
|
14
|
+
get selected(): boolean;
|
|
15
|
+
set selected(v: boolean);
|
|
16
|
+
protected render(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function defineFxChip(): typeof FxChip;
|
|
19
|
+
//# sourceMappingURL=chip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../src/components/chip/chip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;;;;;;GAQG;AACH,qBAAa,MAAO,SAAQ,SAAS;IACnC,OAAgB,MAAM,SA+DpB;IAEF,WAAoB,kBAAkB,IAAI,MAAM,EAAE,CAEjD;IAED,IAAI,QAAQ,IAAI,OAAO,CAAqC;IAC5D,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAqC;cAEzC,MAAM,IAAI,IAAI;CA0ClC;AAED,wBAAgB,YAAY,IAAI,OAAO,MAAM,CAE5C"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { FxElement } from "../../core/base.js";
|
|
2
|
+
import { css } from "../../core/css.js";
|
|
3
|
+
import { defineElement } from "../../core/define.js";
|
|
4
|
+
import { esc } from "../../core/sanitize.js";
|
|
5
|
+
const _FxChip = class _FxChip extends FxElement {
|
|
6
|
+
static get observedAttributes() {
|
|
7
|
+
return ["variant", "size", "removable", "selectable", "selected", "disabled", "icon"];
|
|
8
|
+
}
|
|
9
|
+
get selected() {
|
|
10
|
+
return this.hasAttr("selected");
|
|
11
|
+
}
|
|
12
|
+
set selected(v) {
|
|
13
|
+
this.toggleAttr("selected", v);
|
|
14
|
+
}
|
|
15
|
+
render() {
|
|
16
|
+
const icon = this.getAttr("icon");
|
|
17
|
+
const removable = this.hasAttr("removable");
|
|
18
|
+
const disabled = this.hasAttr("disabled");
|
|
19
|
+
const clickable = (this.hasAttr("selectable") || this.hasAttr("href")) && !disabled;
|
|
20
|
+
this.setTemplate(`
|
|
21
|
+
<span class="chip ${clickable ? "clickable" : ""}" part="chip" role="${clickable ? "button" : "status"}"
|
|
22
|
+
${clickable ? `tabindex="0" aria-pressed="${this.selected}"` : ""} ${disabled ? 'aria-disabled="true"' : ""}>
|
|
23
|
+
${icon ? `<span class="icon" aria-hidden="true">${esc(icon)}</span>` : ""}
|
|
24
|
+
<slot></slot>
|
|
25
|
+
<button type="button" class="remove" part="remove" aria-label="Remover" ${removable ? "" : "hidden"}>×</button>
|
|
26
|
+
</span>
|
|
27
|
+
`);
|
|
28
|
+
const chip = this.root.querySelector(".chip");
|
|
29
|
+
const remove = this.root.querySelector(".remove");
|
|
30
|
+
if (!chip || !remove) return;
|
|
31
|
+
remove.addEventListener("click", (e) => {
|
|
32
|
+
e.stopPropagation();
|
|
33
|
+
this.dispatchEvent(new CustomEvent("remove", { bubbles: true, composed: true }));
|
|
34
|
+
});
|
|
35
|
+
if (clickable) {
|
|
36
|
+
const toggle = () => {
|
|
37
|
+
if (this.hasAttr("selectable")) {
|
|
38
|
+
this.selected = !this.selected;
|
|
39
|
+
chip.setAttribute("aria-pressed", String(this.selected));
|
|
40
|
+
}
|
|
41
|
+
this.dispatchEvent(new CustomEvent("chip-click", { bubbles: true, composed: true }));
|
|
42
|
+
};
|
|
43
|
+
chip.addEventListener("click", toggle);
|
|
44
|
+
chip.addEventListener("keydown", (e) => {
|
|
45
|
+
const ev = e;
|
|
46
|
+
if (ev.key === "Enter" || ev.key === " ") {
|
|
47
|
+
ev.preventDefault();
|
|
48
|
+
toggle();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
_FxChip.styles = css`
|
|
55
|
+
:host {
|
|
56
|
+
display: inline-block;
|
|
57
|
+
font-family: var(--fx-font-family);
|
|
58
|
+
font-size: var(--fx-font-size);
|
|
59
|
+
}
|
|
60
|
+
.chip {
|
|
61
|
+
display: inline-flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
gap: var(--fx-space-xs);
|
|
64
|
+
padding: var(--fx-space-xs) var(--fx-space-md);
|
|
65
|
+
min-height: var(--fx-size-sm);
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
font-size: calc(var(--fx-font-size) - 2px);
|
|
68
|
+
font-weight: var(--fx-font-weight);
|
|
69
|
+
color: var(--fx-text-default);
|
|
70
|
+
background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.06));
|
|
71
|
+
border: 1px solid transparent;
|
|
72
|
+
border-radius: var(--fx-radius-full);
|
|
73
|
+
user-select: none;
|
|
74
|
+
transition:
|
|
75
|
+
background var(--fx-motion-duration-fast) var(--fx-motion-easing),
|
|
76
|
+
border-color var(--fx-motion-duration-fast) var(--fx-motion-easing),
|
|
77
|
+
filter var(--fx-motion-duration-fast) var(--fx-motion-easing);
|
|
78
|
+
}
|
|
79
|
+
:host([size='md']) .chip { min-height: var(--fx-size-md); padding: var(--fx-space-xs) var(--fx-space-lg); }
|
|
80
|
+
:host([size='lg']) .chip { min-height: var(--fx-size-lg); font-size: var(--fx-font-size); padding: var(--fx-space-sm) var(--fx-space-xl); }
|
|
81
|
+
|
|
82
|
+
:host([variant='primary']) .chip { background: color-mix(in srgb, var(--fx-color-primary) 14%, transparent); color: var(--fx-color-primary); }
|
|
83
|
+
:host([variant='secondary']) .chip { background: color-mix(in srgb, var(--fx-color-secondary) 14%, transparent); color: var(--fx-color-secondary); }
|
|
84
|
+
:host([variant='success']) .chip { background: color-mix(in srgb, var(--fx-color-success) 14%, transparent); color: var(--fx-color-success); }
|
|
85
|
+
:host([variant='warning']) .chip { background: color-mix(in srgb, var(--fx-color-warning) 14%, transparent); color: var(--fx-color-warning); }
|
|
86
|
+
:host([variant='danger']) .chip { background: color-mix(in srgb, var(--fx-color-danger) 14%, transparent); color: var(--fx-color-danger); }
|
|
87
|
+
:host([variant='info']) .chip { background: color-mix(in srgb, var(--fx-color-info) 14%, transparent); color: var(--fx-color-info); }
|
|
88
|
+
|
|
89
|
+
.chip.clickable { cursor: pointer; }
|
|
90
|
+
.chip.clickable:hover { filter: brightness(0.95); }
|
|
91
|
+
:host([selected]) .chip {
|
|
92
|
+
background: var(--fx-color-primary);
|
|
93
|
+
color: #fff;
|
|
94
|
+
}
|
|
95
|
+
:host([selected]) .chip:hover { filter: brightness(0.92); }
|
|
96
|
+
:host([disabled]) .chip { opacity: 0.55; cursor: not-allowed; }
|
|
97
|
+
.chip.clickable:active { transform: scale(0.97); }
|
|
98
|
+
|
|
99
|
+
.icon { line-height: 1; }
|
|
100
|
+
.remove {
|
|
101
|
+
display: inline-flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
width: 16px;
|
|
105
|
+
height: 16px;
|
|
106
|
+
border: none;
|
|
107
|
+
border-radius: var(--fx-radius-full);
|
|
108
|
+
background: transparent;
|
|
109
|
+
color: inherit;
|
|
110
|
+
font-size: calc(var(--fx-font-size) + 2px);
|
|
111
|
+
line-height: 1;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
padding: 0;
|
|
114
|
+
}
|
|
115
|
+
.remove:hover { background: rgba(0, 0, 0, 0.18); }
|
|
116
|
+
.remove[hidden] { display: none; }
|
|
117
|
+
`;
|
|
118
|
+
let FxChip = _FxChip;
|
|
119
|
+
function defineFxChip() {
|
|
120
|
+
return defineElement("fx-chip", FxChip);
|
|
121
|
+
}
|
|
122
|
+
export {
|
|
123
|
+
FxChip,
|
|
124
|
+
defineFxChip
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip.js","sources":["../../../src/components/chip/chip.ts"],"sourcesContent":["import { FxElement } from '../../core/base';\nimport { css } from '../../core/css';\nimport { defineElement } from '../../core/define';\nimport { esc } from '../../core/sanitize';\n\n/**\n * <fx-chip> — Chip/Tag compacto para labels, filtros e seleções.\n *\n * Atributos: variant (primary|secondary|success|warning|danger|info),\n * size (sm|md|lg), removable (mostra o botão ×), selectable (clica alterna\n * o estado selected), selected, disabled, icon (glifo/emoji).\n * Slot padrão: texto do chip.\n * Eventos (composed): `remove` (ao clicar em ×) e `chip-click` (ao clicar).\n */\nexport class FxChip extends FxElement {\n static override styles = css`\n :host {\n display: inline-block;\n font-family: var(--fx-font-family);\n font-size: var(--fx-font-size);\n }\n .chip {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-space-xs);\n padding: var(--fx-space-xs) var(--fx-space-md);\n min-height: var(--fx-size-sm);\n box-sizing: border-box;\n font-size: calc(var(--fx-font-size) - 2px);\n font-weight: var(--fx-font-weight);\n color: var(--fx-text-default);\n background: var(--fx-surface-surface-hover, rgba(0, 0, 0, 0.06));\n border: 1px solid transparent;\n border-radius: var(--fx-radius-full);\n user-select: none;\n transition:\n background var(--fx-motion-duration-fast) var(--fx-motion-easing),\n border-color var(--fx-motion-duration-fast) var(--fx-motion-easing),\n filter var(--fx-motion-duration-fast) var(--fx-motion-easing);\n }\n :host([size='md']) .chip { min-height: var(--fx-size-md); padding: var(--fx-space-xs) var(--fx-space-lg); }\n :host([size='lg']) .chip { min-height: var(--fx-size-lg); font-size: var(--fx-font-size); padding: var(--fx-space-sm) var(--fx-space-xl); }\n\n :host([variant='primary']) .chip { background: color-mix(in srgb, var(--fx-color-primary) 14%, transparent); color: var(--fx-color-primary); }\n :host([variant='secondary']) .chip { background: color-mix(in srgb, var(--fx-color-secondary) 14%, transparent); color: var(--fx-color-secondary); }\n :host([variant='success']) .chip { background: color-mix(in srgb, var(--fx-color-success) 14%, transparent); color: var(--fx-color-success); }\n :host([variant='warning']) .chip { background: color-mix(in srgb, var(--fx-color-warning) 14%, transparent); color: var(--fx-color-warning); }\n :host([variant='danger']) .chip { background: color-mix(in srgb, var(--fx-color-danger) 14%, transparent); color: var(--fx-color-danger); }\n :host([variant='info']) .chip { background: color-mix(in srgb, var(--fx-color-info) 14%, transparent); color: var(--fx-color-info); }\n\n .chip.clickable { cursor: pointer; }\n .chip.clickable:hover { filter: brightness(0.95); }\n :host([selected]) .chip {\n background: var(--fx-color-primary);\n color: #fff;\n }\n :host([selected]) .chip:hover { filter: brightness(0.92); }\n :host([disabled]) .chip { opacity: 0.55; cursor: not-allowed; }\n .chip.clickable:active { transform: scale(0.97); }\n\n .icon { line-height: 1; }\n .remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border: none;\n border-radius: var(--fx-radius-full);\n background: transparent;\n color: inherit;\n font-size: calc(var(--fx-font-size) + 2px);\n line-height: 1;\n cursor: pointer;\n padding: 0;\n }\n .remove:hover { background: rgba(0, 0, 0, 0.18); }\n .remove[hidden] { display: none; }\n `;\n\n static override get observedAttributes(): string[] {\n return ['variant', 'size', 'removable', 'selectable', 'selected', 'disabled', 'icon'];\n }\n\n get selected(): boolean { return this.hasAttr('selected'); }\n set selected(v: boolean) { this.toggleAttr('selected', v); }\n\n protected override render(): void {\n const icon = this.getAttr('icon');\n const removable = this.hasAttr('removable');\n const disabled = this.hasAttr('disabled');\n const clickable = (this.hasAttr('selectable') || this.hasAttr('href')) && !disabled;\n\n this.setTemplate(`\n <span class=\"chip ${clickable ? 'clickable' : ''}\" part=\"chip\" role=\"${clickable ? 'button' : 'status'}\"\n ${clickable ? `tabindex=\"0\" aria-pressed=\"${this.selected}\"` : ''} ${disabled ? 'aria-disabled=\"true\"' : ''}>\n ${icon ? `<span class=\"icon\" aria-hidden=\"true\">${esc(icon)}</span>` : ''}\n <slot></slot>\n <button type=\"button\" class=\"remove\" part=\"remove\" aria-label=\"Remover\" ${removable ? '' : 'hidden'}>×</button>\n </span>\n `);\n\n const chip = this.root.querySelector<HTMLElement>('.chip');\n const remove = this.root.querySelector<HTMLButtonElement>('.remove');\n if (!chip || !remove) return;\n\n remove.addEventListener('click', (e) => {\n e.stopPropagation();\n this.dispatchEvent(new CustomEvent('remove', { bubbles: true, composed: true }));\n });\n\n if (clickable) {\n const toggle = (): void => {\n if (this.hasAttr('selectable')) {\n this.selected = !this.selected;\n chip.setAttribute('aria-pressed', String(this.selected));\n }\n this.dispatchEvent(new CustomEvent('chip-click', { bubbles: true, composed: true }));\n };\n chip.addEventListener('click', toggle);\n chip.addEventListener('keydown', (e) => {\n const ev = e as KeyboardEvent;\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n toggle();\n }\n });\n }\n }\n}\n\nexport function defineFxChip(): typeof FxChip {\n return defineElement('fx-chip', FxChip);\n}\n"],"names":[],"mappings":";;;;AAcO,MAAM,UAAN,MAAM,gBAAe,UAAU;AAAA,EAkEpC,WAAoB,qBAA+B;AACjD,WAAO,CAAC,WAAW,QAAQ,aAAa,cAAc,YAAY,YAAY,MAAM;AAAA,EACtF;AAAA,EAEA,IAAI,WAAoB;AAAE,WAAO,KAAK,QAAQ,UAAU;AAAA,EAAG;AAAA,EAC3D,IAAI,SAAS,GAAY;AAAE,SAAK,WAAW,YAAY,CAAC;AAAA,EAAG;AAAA,EAExC,SAAe;AAChC,UAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,UAAM,YAAY,KAAK,QAAQ,WAAW;AAC1C,UAAM,WAAW,KAAK,QAAQ,UAAU;AACxC,UAAM,aAAa,KAAK,QAAQ,YAAY,KAAK,KAAK,QAAQ,MAAM,MAAM,CAAC;AAE3E,SAAK,YAAY;AAAA,0BACK,YAAY,cAAc,EAAE,uBAAuB,YAAY,WAAW,QAAQ;AAAA,UAClG,YAAY,8BAA8B,KAAK,QAAQ,MAAM,EAAE,IAAI,WAAW,yBAAyB,EAAE;AAAA,UACzG,OAAO,yCAAyC,IAAI,IAAI,CAAC,YAAY,EAAE;AAAA;AAAA,kFAEC,YAAY,KAAK,QAAQ;AAAA;AAAA,KAEtG;AAED,UAAM,OAAO,KAAK,KAAK,cAA2B,OAAO;AACzD,UAAM,SAAS,KAAK,KAAK,cAAiC,SAAS;AACnE,QAAI,CAAC,QAAQ,CAAC,OAAQ;AAEtB,WAAO,iBAAiB,SAAS,CAAC,MAAM;AACtC,QAAE,gBAAA;AACF,WAAK,cAAc,IAAI,YAAY,UAAU,EAAE,SAAS,MAAM,UAAU,KAAA,CAAM,CAAC;AAAA,IACjF,CAAC;AAED,QAAI,WAAW;AACb,YAAM,SAAS,MAAY;AACzB,YAAI,KAAK,QAAQ,YAAY,GAAG;AAC9B,eAAK,WAAW,CAAC,KAAK;AACtB,eAAK,aAAa,gBAAgB,OAAO,KAAK,QAAQ,CAAC;AAAA,QACzD;AACA,aAAK,cAAc,IAAI,YAAY,cAAc,EAAE,SAAS,MAAM,UAAU,KAAA,CAAM,CAAC;AAAA,MACrF;AACA,WAAK,iBAAiB,SAAS,MAAM;AACrC,WAAK,iBAAiB,WAAW,CAAC,MAAM;AACtC,cAAM,KAAK;AACX,YAAI,GAAG,QAAQ,WAAW,GAAG,QAAQ,KAAK;AACxC,aAAG,eAAA;AACH,iBAAA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAlHE,QAAgB,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;AADpB,IAAM,SAAN;AAqHA,SAAS,eAA8B;AAC5C,SAAO,cAAc,WAAW,MAAM;AACxC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,CAAC;AAIlB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/chip/index.ts"],"sourcesContent":["import { FxChip, defineFxChip } from './chip';\n\nexport { FxChip };\n\ndefineFxChip();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'fx-chip': FxChip;\n }\n}\n"],"names":[],"mappings":";;AAIA,aAAA;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FxElement } from '../../core/base';
|
|
2
|
+
/**
|
|
3
|
+
* <fx-confirmpopup> — Popup de confirmação não-modal ancorado em um elemento,
|
|
4
|
+
* exibido acima ou abaixo dinamicamente (com flip automático quando não há
|
|
5
|
+
* espaço na viewport), no estilo ConfirmPopup do PrimeVue.
|
|
6
|
+
*
|
|
7
|
+
* Atributos:
|
|
8
|
+
* - target (seletor CSS do elemento âncora — obrigatório para abrir);
|
|
9
|
+
* - message (texto da mensagem, quando o slot padrão não é usado);
|
|
10
|
+
* - icon (emoji/glifo exibido antes da mensagem; se for um nome da Fenix Icons,
|
|
11
|
+
* ex.: icon="help", é renderizado com a fonte de ícones);
|
|
12
|
+
* - accept-label / reject-label (textos dos botões padrão);
|
|
13
|
+
* - position (top|bottom|auto — padrão `auto`, que faz flip conforme o espaço);
|
|
14
|
+
* - open (exibe o popup).
|
|
15
|
+
*
|
|
16
|
+
* Slots:
|
|
17
|
+
* - padrão: corpo da mensagem (template "message");
|
|
18
|
+
* - `accept`: conteúdo do botão de confirmação (template "accept");
|
|
19
|
+
* - `reject`: conteúdo do botão de rejeição (template "reject").
|
|
20
|
+
*
|
|
21
|
+
* Eventos (composed): `accept` e `reject` — ambos fecham o popup.
|
|
22
|
+
*/
|
|
23
|
+
export declare class FxConfirmPopup extends FxElement {
|
|
24
|
+
static styles: string;
|
|
25
|
+
static get observedAttributes(): string[];
|
|
26
|
+
get open(): boolean;
|
|
27
|
+
set open(value: boolean);
|
|
28
|
+
protected render(): void;
|
|
29
|
+
private _cleanup?;
|
|
30
|
+
private _previouslyFocused;
|
|
31
|
+
private _anchor;
|
|
32
|
+
/**
|
|
33
|
+
* Posiciona o popup fixo junto ao âncora, acima ou abaixo dinamicamente:
|
|
34
|
+
* `position="auto"` (padrão) prefere abaixo e faz flip para cima quando
|
|
35
|
+
* não há espaço; `top`/`bottom` forçam o lado.
|
|
36
|
+
*/
|
|
37
|
+
private _position;
|
|
38
|
+
private _restoreFocus;
|
|
39
|
+
connectedCallback(): void;
|
|
40
|
+
disconnectedCallback(): void;
|
|
41
|
+
private _onReposition;
|
|
42
|
+
}
|
|
43
|
+
export declare function defineFxConfirmPopup(): typeof FxConfirmPopup;
|
|
44
|
+
//# sourceMappingURL=confirmpopup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmpopup.d.ts","sourceRoot":"","sources":["../../../src/components/confirmpopup/confirmpopup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAM5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,SAAS;IAC3C,OAAgB,MAAM,SAkFpB;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;IAiEjC,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IAEtD,OAAO,CAAC,OAAO;IAUf;;;;OAIG;IACH,OAAO,CAAC,SAAS;IA+BjB,OAAO,CAAC,aAAa;IAKZ,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;IASrC,OAAO,CAAC,aAAa,CAInB;CACH;AAED,wBAAgB,oBAAoB,IAAI,OAAO,cAAc,CAE5D"}
|