@metropolle/design-system 1.2025.0-8.29.1649 → 1.2025.0-8.31.144

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.
@@ -42,6 +42,150 @@
42
42
  width: 100%;
43
43
  }
44
44
 
45
+ /* =========================
46
+ Modal Styles
47
+ ========================= */
48
+
49
+ /* Modal overlay styles */
50
+ .mds-modal-overlay,
51
+ .modal-overlay {
52
+ position: fixed !important;
53
+ top: 0 !important;
54
+ left: 0 !important;
55
+ right: 0 !important;
56
+ bottom: 0 !important;
57
+ background-color: transparent !important;
58
+ backdrop-filter: blur(4px) !important;
59
+ z-index: 9999 !important;
60
+ display: flex !important;
61
+ align-items: center !important;
62
+ justify-content: center !important;
63
+ }
64
+
65
+ /* Modal card styles - Liquid Glass Effect */
66
+ .mds-modal-overlay .mds-modal-card,
67
+ .modal-overlay .mds-modal-card {
68
+ background: rgba(255, 255, 255, 0.3) !important;
69
+ backdrop-filter: blur(20px) !important;
70
+ -webkit-backdrop-filter: blur(20px) !important;
71
+ border: 1px solid rgba(255, 255, 255, 0.4) !important;
72
+ box-shadow:
73
+ 0 8px 32px rgba(0, 0, 0, 0.2) !important,
74
+ 0 0 0 1px rgba(255, 255, 255, 0.2) !important,
75
+ inset 0 1px 0 rgba(255, 255, 255, 0.4) !important;
76
+ color: var(--text-primary) !important;
77
+ min-width: 320px !important;
78
+ max-width: 600px !important;
79
+ width: 90vw !important;
80
+ border-radius: 16px !important;
81
+ position: relative !important;
82
+ overflow: hidden !important;
83
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
84
+ transform: translate(0, 0) !important;
85
+ }
86
+
87
+ /* Inner glow effect */
88
+ .mds-modal-overlay .mds-modal-card::before,
89
+ .modal-overlay .mds-modal-card::before {
90
+ content: '' !important;
91
+ position: absolute !important;
92
+ top: 0 !important;
93
+ left: 0 !important;
94
+ right: 0 !important;
95
+ bottom: 0 !important;
96
+ background: linear-gradient(
97
+ 135deg,
98
+ rgba(255, 255, 255, 0.1) 0%,
99
+ rgba(255, 255, 255, 0.05) 50%,
100
+ rgba(255, 255, 255, 0.02) 100%
101
+ ) !important;
102
+ border-radius: 16px !important;
103
+ pointer-events: none !important;
104
+ z-index: -1 !important;
105
+ }
106
+
107
+ /* Border glow */
108
+ .mds-modal-overlay .mds-modal-card::after,
109
+ .modal-overlay .mds-modal-card::after {
110
+ content: '' !important;
111
+ position: absolute !important;
112
+ top: -1px !important;
113
+ left: -1px !important;
114
+ right: -1px !important;
115
+ bottom: -1px !important;
116
+ background: linear-gradient(
117
+ 45deg,
118
+ rgba(255, 255, 255, 0.3),
119
+ rgba(255, 255, 255, 0.1),
120
+ rgba(255, 255, 255, 0.05),
121
+ rgba(255, 255, 255, 0.1),
122
+ rgba(255, 255, 255, 0.3)
123
+ ) !important;
124
+ border-radius: 16px !important;
125
+ z-index: -2 !important;
126
+ opacity: 0.6 !important;
127
+ animation: mdsLiquidBorder 3s ease-in-out infinite !important;
128
+ }
129
+
130
+ @keyframes mdsLiquidBorder {
131
+ 0%, 100% { opacity: 0.6; transform: scale(1); }
132
+ 50% { opacity: 0.8; transform: scale(1.02); }
133
+ }
134
+
135
+ /* No hover lift or color change */
136
+ .mds-modal-overlay .mds-modal-card,
137
+ .mds-modal-overlay .mds-modal-card:hover,
138
+ .modal-overlay .mds-modal-card,
139
+ .modal-overlay .mds-modal-card:hover {
140
+ transform: none !important;
141
+ }
142
+ .mds-modal-overlay .mds-modal-card:hover::after,
143
+ .modal-overlay .mds-modal-card:hover::after {
144
+ opacity: 0.6 !important;
145
+ animation-duration: 3s !important;
146
+ }
147
+
148
+ /* Light theme */
149
+ html[data-theme="light"] .mds-modal-overlay .mds-modal-card,
150
+ html[data-theme="light"] .modal-overlay .mds-modal-card {
151
+ background: rgba(255, 255, 255, 0.35) !important;
152
+ border: 1px solid rgba(255, 255, 255, 0.5) !important;
153
+ box-shadow:
154
+ 0 8px 32px rgba(0, 0, 0, 0.15) !important,
155
+ 0 0 0 1px rgba(255, 255, 255, 0.3) !important,
156
+ inset 0 1px 0 rgba(255, 255, 255, 0.5) !important;
157
+ }
158
+
159
+ /* Dark theme */
160
+ html[data-theme="dark"] .mds-modal-overlay .mds-modal-card,
161
+ html:not([data-theme]) .mds-modal-overlay .mds-modal-card,
162
+ html[data-theme="dark"] .modal-overlay .mds-modal-card,
163
+ html:not([data-theme]) .modal-overlay .mds-modal-card {
164
+ background: rgba(30, 41, 59, 0.5) !important;
165
+ border: 1px solid rgba(255, 255, 255, 0.35) !important;
166
+ box-shadow:
167
+ 0 8px 32px rgba(0, 0, 0, 0.5) !important,
168
+ 0 0 0 1px rgba(255, 255, 255, 0.25) !important,
169
+ inset 0 1px 0 rgba(255, 255, 255, 0.3) !important;
170
+ }
171
+
172
+ /* Header button sizing + alignment */
173
+ .mds-modal-header > button[aria-label="Fechar"] {
174
+ font-size: 1rem !important;
175
+ line-height: 1 !important;
176
+ padding: 4px 8px !important;
177
+ }
178
+
179
+ /* Responsive modal */
180
+ @media (max-width: 768px) {
181
+ .mds-modal-overlay .mds-modal-card,
182
+ .modal-overlay .mds-modal-card {
183
+ min-width: 90vw !important;
184
+ max-width: 95vw !important;
185
+ margin: 20px !important;
186
+ }
187
+ }
188
+
45
189
  /* Button Sizes */
46
190
  .mds-button--sm {
47
191
  padding: var(--mds-spacing-sm) var(--mds-spacing-md);
@@ -855,4 +999,4 @@ html[data-theme="light"] .mds-navbar-user-badge {
855
999
  /* Dark mode support (future) */
856
1000
  @media (prefers-color-scheme: dark) {
857
1001
  /* Enhanced styles for dark mode when implemented */
858
- }
1002
+ }
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export interface ConfirmDialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title: string;
6
+ description?: React.ReactNode;
7
+ confirmText?: string;
8
+ cancelText?: string;
9
+ onConfirm: () => void | Promise<void>;
10
+ loading?: boolean;
11
+ tone?: 'warning' | 'danger' | 'info' | 'success';
12
+ icon?: React.ReactNode;
13
+ disableOverlayClose?: boolean;
14
+ }
15
+ export declare function ConfirmDialog({ open, onClose, title, description, confirmText, cancelText, onConfirm, loading, tone, icon, disableOverlayClose }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
16
+ export default ConfirmDialog;
17
+ //# sourceMappingURL=ConfirmDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/ConfirmDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACjD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AASD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,EACX,WAAyB,EACzB,UAAuB,EACvB,SAAS,EACT,OAAe,EACf,IAAgB,EAChB,IAAI,EACJ,mBAAmB,EACpB,EAAE,kBAAkB,2CA0BpB;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export interface ModalProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ closeOnOverlay?: boolean;
6
+ children: React.ReactNode;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ }
10
+ export declare function Modal({ open, onClose, closeOnOverlay, children, className, style }: ModalProps): React.ReactPortal | null;
11
+ export default Modal;
12
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/Modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,cAAqB,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACN,EAAE,UAAU,4BAyEZ;AAED,eAAe,KAAK,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export interface ModalBodyProps {
3
+ children: React.ReactNode;
4
+ style?: React.CSSProperties;
5
+ className?: string;
6
+ }
7
+ export declare function ModalBody({ children, style, className }: ModalBodyProps): import("react/jsx-runtime").JSX.Element;
8
+ export default ModalBody;
9
+ //# sourceMappingURL=ModalBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalBody.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/ModalBody.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,2CAMvE;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ModalFooterProps {
3
+ children: React.ReactNode;
4
+ align?: 'start' | 'center' | 'end';
5
+ }
6
+ export declare function ModalFooter({ children, align }: ModalFooterProps): import("react/jsx-runtime").JSX.Element;
7
+ export default ModalFooter;
8
+ //# sourceMappingURL=ModalFooter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalFooter.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/ModalFooter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACpC;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAa,EAAE,EAAE,gBAAgB,2CAOxE;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export interface ModalHeaderProps {
3
+ title: React.ReactNode;
4
+ icon?: React.ReactNode;
5
+ onClose?: () => void;
6
+ closeAriaLabel?: string;
7
+ align?: 'center' | 'start';
8
+ }
9
+ export declare function ModalHeader({ title, icon, onClose, closeAriaLabel, align }: ModalHeaderProps): import("react/jsx-runtime").JSX.Element;
10
+ export default ModalHeader;
11
+ //# sourceMappingURL=ModalHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/ModalHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,cAAyB,EAAE,KAAgB,EAAE,EAAE,gBAAgB,2CAsDlH;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './Modal';
2
+ export * from './ModalHeader';
3
+ export * from './ModalBody';
4
+ export * from './ModalFooter';
5
+ export * from './ConfirmDialog';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/react/Modal/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -5,4 +5,9 @@ export { cn } from '../../utils/cn';
5
5
  export * from './GlassCard';
6
6
  export * from './Typography';
7
7
  export * from './Button';
8
+ export * from './Modal/Modal';
9
+ export * from './Modal/ModalHeader';
10
+ export * from './Modal/ModalBody';
11
+ export * from './Modal/ModalFooter';
12
+ export * from './Modal/ConfirmDialog';
8
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/react/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,SAAS,EACT,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGpD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/react/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,SAAS,EACT,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGpD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAGpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
@@ -5,4 +5,9 @@ export { cn } from '../../utils/cn';
5
5
  export * from './GlassCard';
6
6
  export * from './Typography';
7
7
  export * from './Button';
8
+ export * from './Modal/Modal';
9
+ export * from './Modal/ModalHeader';
10
+ export * from './Modal/ModalBody';
11
+ export * from './Modal/ModalFooter';
12
+ export * from './Modal/ConfirmDialog';
8
13
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,5 @@
1
- import require$$0, { forwardRef } from 'react';
1
+ import require$$0, { forwardRef, useState, useRef, useEffect } from 'react';
2
+ import { createPortal } from 'react-dom';
2
3
 
3
4
  var jsxRuntime = {exports: {}};
4
5
 
@@ -1489,5 +1490,86 @@ Button.displayName = 'Button';
1489
1490
  */
1490
1491
  const LoadingSpinner = () => (jsxRuntimeExports.jsxs("svg", { className: "mds-spinner", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", children: [jsxRuntimeExports.jsx("circle", { className: "mds-spinner__track", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2", fill: "none", opacity: "0.25" }), jsxRuntimeExports.jsx("circle", { className: "mds-spinner__path", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2", fill: "none", strokeDasharray: "40 20", strokeLinecap: "round" })] }));
1491
1492
 
1492
- export { BrandLogo, Button, GlassCard, Typography, cn };
1493
+ function Modal({ open, onClose, closeOnOverlay = true, children, className, style }) {
1494
+ const [mounted, setMounted] = useState(false);
1495
+ const [visible, setVisible] = useState(false);
1496
+ const [renderPortal, setRenderPortal] = useState(false);
1497
+ const containerRef = useRef(null);
1498
+ useEffect(() => setMounted(true), []);
1499
+ useEffect(() => {
1500
+ if (!mounted)
1501
+ return;
1502
+ if (open) {
1503
+ setVisible(true);
1504
+ setRenderPortal(true);
1505
+ }
1506
+ else {
1507
+ setVisible(false);
1508
+ const t = setTimeout(() => setRenderPortal(false), 200);
1509
+ return () => clearTimeout(t);
1510
+ }
1511
+ }, [open, mounted]);
1512
+ useEffect(() => {
1513
+ if (!open)
1514
+ return;
1515
+ const onKeyDown = (e) => {
1516
+ if (e.key === 'Escape')
1517
+ onClose();
1518
+ };
1519
+ document.addEventListener('keydown', onKeyDown);
1520
+ return () => document.removeEventListener('keydown', onKeyDown);
1521
+ }, [open, onClose]);
1522
+ if (!mounted || (!renderPortal && !open))
1523
+ return null;
1524
+ const overlayStyle = {
1525
+ position: 'fixed',
1526
+ inset: 0,
1527
+ backgroundColor: 'rgba(0, 0, 0, 0.7)',
1528
+ display: 'flex',
1529
+ alignItems: 'center',
1530
+ justifyContent: 'center',
1531
+ zIndex: 1000,
1532
+ padding: '16px',
1533
+ opacity: visible ? 1 : 0,
1534
+ transition: 'opacity 200ms ease'
1535
+ };
1536
+ const innerStyle = {
1537
+ maxWidth: '640px',
1538
+ width: '100%',
1539
+ transform: visible ? 'scale(1)' : 'scale(0.98)',
1540
+ opacity: visible ? 1 : 0,
1541
+ transition: 'opacity 200ms ease, transform 200ms ease',
1542
+ ...style
1543
+ };
1544
+ const content = (jsxRuntimeExports.jsx("div", { className: "modal-overlay mds-modal-overlay", style: overlayStyle, onClick: closeOnOverlay ? onClose : undefined, "aria-modal": "true", role: "dialog", children: jsxRuntimeExports.jsx("div", { className: className, style: innerStyle, onClick: (e) => e.stopPropagation(), ref: (el) => (containerRef.current = el), children: children }) }));
1545
+ return createPortal(content, document.body);
1546
+ }
1547
+
1548
+ function ModalHeader({ title, icon, onClose, closeAriaLabel = 'Fechar', align = 'center' }) {
1549
+ if (align === 'center') {
1550
+ return (jsxRuntimeExports.jsxs("div", { className: "mds-modal-header", style: { position: 'relative', paddingBottom: 12, marginBottom: 16, borderBottom: '1px solid var(--border-color)' }, children: [icon && (jsxRuntimeExports.jsx("div", { "aria-hidden": true, style: { position: 'absolute', left: 12, top: '50%', transform: 'translateY(-50%)', fontSize: '1.25rem', lineHeight: 1 }, children: icon })), jsxRuntimeExports.jsx("div", { style: { textAlign: 'center' }, children: typeof title === 'string' ? (jsxRuntimeExports.jsx("h3", { style: { margin: 0 }, children: title })) : (title) }), onClose && (jsxRuntimeExports.jsx("button", { type: "button", "aria-label": closeAriaLabel, onClick: onClose, style: { position: 'absolute', right: 12, top: '50%', transform: 'translateY(-50%)', background: 'transparent', border: 'none', padding: '4px 8px', cursor: 'pointer', lineHeight: 1 }, children: "\u00D7" }))] }));
1551
+ }
1552
+ return (jsxRuntimeExports.jsxs("div", { className: "mds-modal-header", style: { display: 'flex', alignItems: 'center', gap: 12, paddingBottom: 12, marginBottom: 16, borderBottom: '1px solid var(--border-color)' }, children: [icon && (jsxRuntimeExports.jsx("div", { "aria-hidden": true, style: { fontSize: '1.25rem', lineHeight: 1 }, children: icon })), jsxRuntimeExports.jsx("div", { style: { margin: 0, fontSize: '1.125rem', fontWeight: 600, flex: 1 }, children: typeof title === 'string' ? (jsxRuntimeExports.jsx("h3", { style: { margin: 0 }, children: title })) : (title) }), onClose && (jsxRuntimeExports.jsx("button", { type: "button", "aria-label": closeAriaLabel, onClick: onClose, style: { marginLeft: 'auto', background: 'transparent', border: 'none', padding: '4px 8px', cursor: 'pointer', lineHeight: 1 }, children: "\u00D7" }))] }));
1553
+ }
1554
+
1555
+ function ModalBody({ children, style, className }) {
1556
+ return (jsxRuntimeExports.jsx("div", { className: className, style: { padding: '16px 24px', ...style }, children: children }));
1557
+ }
1558
+
1559
+ function ModalFooter({ children, align = 'end' }) {
1560
+ const justify = align === 'start' ? 'flex-start' : align === 'center' ? 'center' : 'flex-end';
1561
+ return (jsxRuntimeExports.jsx("div", { style: { display: 'flex', gap: 12, justifyContent: justify, borderTop: '1px solid var(--border-color)', padding: '16px 24px', marginTop: 8 }, children: children }));
1562
+ }
1563
+
1564
+ const toneIcon = {
1565
+ warning: '⚠️',
1566
+ danger: '🛑',
1567
+ info: 'ℹ️',
1568
+ success: '✅'
1569
+ };
1570
+ function ConfirmDialog({ open, onClose, title, description, confirmText = 'Confirmar', cancelText = 'Cancelar', onConfirm, loading = false, tone = 'warning', icon, disableOverlayClose }) {
1571
+ return (jsxRuntimeExports.jsx(Modal, { open: open, onClose: onClose, closeOnOverlay: !disableOverlayClose, children: jsxRuntimeExports.jsxs("div", { className: "mds-modal-card", style: { maxWidth: 480, width: '100%' }, children: [jsxRuntimeExports.jsx(ModalHeader, { title: title, icon: icon ?? toneIcon[tone], onClose: onClose, align: "center" }), description && (jsxRuntimeExports.jsx("div", { style: { padding: '0 24px 16px 24px' }, children: description })), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: 12, justifyContent: 'flex-end', borderTop: '1px solid var(--border-color)', padding: '16px 24px', marginTop: 8 }, children: [jsxRuntimeExports.jsx("button", { type: "button", onClick: onClose, className: "mds-button mds-button--secondary", children: cancelText }), jsxRuntimeExports.jsx("button", { type: "button", onClick: onConfirm, disabled: loading, className: "mds-button mds-button--primary", children: loading ? 'Processando...' : confirmText })] })] }) }));
1572
+ }
1573
+
1574
+ export { BrandLogo, Button, ConfirmDialog, GlassCard, Modal, ModalBody, ModalFooter, ModalHeader, Typography, cn };
1493
1575
  //# sourceMappingURL=index.esm.js.map