@conatel-sa/react-ui 0.2.2 → 0.2.4

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.
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ var ReactLibraryCards = (() => {
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/cards-entry.ts
22
+ var cards_entry_exports = {};
23
+ __export(cards_entry_exports, {
24
+ ArtifactReportCard: () => ArtifactReportCard,
25
+ ChangelogPanel: () => ChangelogPanel,
26
+ FeatureCard: () => FeatureCard,
27
+ ServiceCard: () => ServiceCard
28
+ });
29
+
30
+ // tools/react-shim.mjs
31
+ var R = typeof window !== "undefined" && window.React ? window.React : {};
32
+ var react_shim_default = R;
33
+ var {
34
+ useContext,
35
+ useEffect,
36
+ useMemo,
37
+ useState,
38
+ useRef,
39
+ useCallback,
40
+ useId,
41
+ createContext,
42
+ Fragment
43
+ } = R;
44
+
45
+ // tools/jsx-runtime-shim.mjs
46
+ function jsx(type, props, key) {
47
+ const p = key != null ? { ...props, key } : props;
48
+ return react_shim_default.createElement(type, p);
49
+ }
50
+ function jsxs(type, props, key) {
51
+ return jsx(type, props, key);
52
+ }
53
+ var Fragment2 = react_shim_default.Fragment;
54
+
55
+ // src/components/cards/ServiceCard.tsx
56
+ function statusStyles(status) {
57
+ switch (status) {
58
+ case "active":
59
+ return {
60
+ bg: "var(--color-success-light, rgba(16, 185, 129, 0.1))",
61
+ fg: "var(--color-success, #10b981)",
62
+ label: "OK"
63
+ };
64
+ case "degraded":
65
+ return {
66
+ bg: "var(--color-warning-light, rgba(245, 158, 11, 0.12))",
67
+ fg: "var(--color-warning, #f59e0b)",
68
+ label: "WARN"
69
+ };
70
+ case "error":
71
+ return {
72
+ bg: "var(--color-error-light, rgba(204, 3, 46, 0.12))",
73
+ fg: "var(--color-error, #CC032E)",
74
+ label: "ERROR"
75
+ };
76
+ case "info":
77
+ return {
78
+ bg: "var(--color-info-light, rgba(37, 99, 235, 0.12))",
79
+ fg: "var(--color-info, #2563eb)",
80
+ label: "INFO"
81
+ };
82
+ default:
83
+ return {
84
+ bg: "var(--color-neutral-100, #f5f5f5)",
85
+ fg: "var(--color-text-muted, #6b6b6b)",
86
+ label: "INFO"
87
+ };
88
+ }
89
+ }
90
+ function ServiceCard({
91
+ icon,
92
+ title,
93
+ description,
94
+ status,
95
+ count,
96
+ onClick
97
+ }) {
98
+ const st = statusStyles(status);
99
+ return /* @__PURE__ */ jsxs(
100
+ "div",
101
+ {
102
+ role: onClick ? "button" : void 0,
103
+ tabIndex: onClick ? 0 : void 0,
104
+ onClick,
105
+ onKeyDown: (e) => {
106
+ if (!onClick) return;
107
+ if (e.key === "Enter" || e.key === " ") onClick();
108
+ },
109
+ style: {
110
+ border: "1.5px solid var(--color-border, #e0e0e0)",
111
+ borderRadius: "var(--radius-lg, 8px)",
112
+ background: "var(--color-surface, #ffffff)",
113
+ boxShadow: "var(--shadow-sm, 0 1px 3px rgba(0,0,0,.1))",
114
+ padding: "var(--space-4, 16px)",
115
+ cursor: onClick ? "pointer" : "default"
116
+ },
117
+ children: [
118
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: "var(--space-3, 12px)" }, children: [
119
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "var(--space-3, 12px)", flex: 1, minWidth: 0 }, children: [
120
+ icon ? /* @__PURE__ */ jsx(
121
+ "span",
122
+ {
123
+ className: "material-symbols-outlined",
124
+ style: { fontSize: "1.5rem", color: "var(--color-primary, #CC032E)", marginTop: "2px" },
125
+ "aria-hidden": "true",
126
+ children: icon
127
+ }
128
+ ) : null,
129
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-1, .25rem)", minWidth: 0 }, children: [
130
+ /* @__PURE__ */ jsx(
131
+ "div",
132
+ {
133
+ style: {
134
+ fontFamily: "var(--font-sans, system-ui)",
135
+ fontSize: "var(--text-base, 15px)",
136
+ fontWeight: "var(--weight-semibold, 600)",
137
+ color: "var(--color-text, #1a1a1a)",
138
+ whiteSpace: "nowrap",
139
+ overflow: "hidden",
140
+ textOverflow: "ellipsis"
141
+ },
142
+ children: title
143
+ }
144
+ ),
145
+ description ? /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", fontSize: "var(--text-sm, 13px)", color: "var(--color-text-muted, #757578)", lineHeight: 1.3 }, children: description }) : null
146
+ ] })
147
+ ] }),
148
+ count != null ? /* @__PURE__ */ jsx(
149
+ "div",
150
+ {
151
+ style: {
152
+ minWidth: "3rem",
153
+ textAlign: "right",
154
+ fontFamily: "var(--font-sans, system-ui)",
155
+ fontSize: "var(--text-sm, 13px)",
156
+ color: "var(--color-text-muted, #757578)",
157
+ fontWeight: "var(--weight-medium, 500)"
158
+ },
159
+ children: count
160
+ }
161
+ ) : null
162
+ ] }),
163
+ status ? /* @__PURE__ */ jsx("div", { style: { marginTop: "var(--space-3, 12px)" }, children: /* @__PURE__ */ jsx(
164
+ "span",
165
+ {
166
+ style: {
167
+ display: "inline-flex",
168
+ alignItems: "center",
169
+ gap: "var(--space-2, 8px)",
170
+ padding: "var(--space-1, .25rem) var(--space-2, 8px)",
171
+ borderRadius: "var(--radius-full, 9999px)",
172
+ background: st.bg,
173
+ color: st.fg,
174
+ fontFamily: "var(--font-sans, system-ui)",
175
+ fontSize: "var(--text-sm, 13px)",
176
+ fontWeight: "var(--weight-medium, 500)",
177
+ whiteSpace: "nowrap"
178
+ },
179
+ children: st.label
180
+ }
181
+ ) }) : null
182
+ ]
183
+ }
184
+ );
185
+ }
186
+
187
+ // src/components/cards/FeatureCard.tsx
188
+ var baseCardStyle = {
189
+ position: "relative",
190
+ display: "block",
191
+ border: "1.5px solid var(--color-border, #e0e0e0)",
192
+ borderRadius: "var(--radius-lg, 12px)",
193
+ background: "var(--color-surface, #ffffff)",
194
+ boxShadow: "var(--shadow-sm, 0 1px 3px rgba(0,0,0,.08))",
195
+ padding: "var(--space-4, 16px)",
196
+ textDecoration: "none",
197
+ color: "inherit",
198
+ fontFamily: "var(--font-sans, system-ui)",
199
+ textAlign: "left",
200
+ cursor: "default",
201
+ boxSizing: "border-box"
202
+ };
203
+ function FeatureCard({
204
+ title,
205
+ description,
206
+ icon,
207
+ corner,
208
+ href,
209
+ onClick,
210
+ children,
211
+ style,
212
+ className
213
+ }) {
214
+ const interactive = Boolean(href || onClick);
215
+ const mergedStyle = {
216
+ ...baseCardStyle,
217
+ cursor: interactive ? "pointer" : "default",
218
+ ...style
219
+ };
220
+ const inner = /* @__PURE__ */ jsxs(Fragment2, { children: [
221
+ corner ? /* @__PURE__ */ jsx(
222
+ "div",
223
+ {
224
+ style: {
225
+ position: "absolute",
226
+ top: "0.75rem",
227
+ right: "0.75rem",
228
+ display: "flex",
229
+ alignItems: "center",
230
+ gap: "0.25rem",
231
+ fontSize: "0.75rem",
232
+ color: "var(--color-text-muted, #757578)"
233
+ },
234
+ children: corner
235
+ }
236
+ ) : null,
237
+ icon ? /* @__PURE__ */ jsx("div", { style: { marginBottom: "var(--space-3, 12px)" }, children: /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined", style: { fontSize: "2rem", color: "var(--color-primary, #2563eb)" }, "aria-hidden": true, children: icon }) }) : null,
238
+ /* @__PURE__ */ jsx("div", { style: { fontWeight: 700, fontSize: "var(--text-base, 15px)", color: "var(--color-text, #1a1a1a)", marginBottom: "var(--space-2, 8px)" }, children: title }),
239
+ description ? /* @__PURE__ */ jsx("div", { style: { fontSize: "var(--text-sm, 13px)", color: "var(--color-text-muted, #757578)", lineHeight: 1.45 }, children: description }) : null,
240
+ children
241
+ ] });
242
+ if (href) {
243
+ return /* @__PURE__ */ jsx("a", { href, className, style: mergedStyle, children: inner });
244
+ }
245
+ if (onClick) {
246
+ return /* @__PURE__ */ jsx("button", { type: "button", className, style: mergedStyle, onClick, children: inner });
247
+ }
248
+ return /* @__PURE__ */ jsx("div", { className, style: mergedStyle, children: inner });
249
+ }
250
+
251
+ // src/components/cards/ChangelogPanel.tsx
252
+ function ChangelogPanel({ version, items }) {
253
+ return /* @__PURE__ */ jsxs(
254
+ "div",
255
+ {
256
+ style: {
257
+ border: "1.5px solid var(--color-border, #e0e0e0)",
258
+ borderRadius: "var(--radius-lg, 8px)",
259
+ background: "var(--color-surface, #ffffff)",
260
+ boxShadow: "var(--shadow-sm, 0 1px 3px rgba(0,0,0,.1))",
261
+ padding: "var(--space-4, 16px)"
262
+ },
263
+ children: [
264
+ /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", fontWeight: "var(--weight-semibold, 600)", color: "var(--color-text, #1a1a1a)", fontSize: "var(--text-base, 15px)" }, children: version ? `Changelog ${version}` : "Changelog" }),
265
+ /* @__PURE__ */ jsx("div", { style: { marginTop: "var(--space-3, 12px)", display: "flex", flexDirection: "column", gap: "var(--space-3, 12px)" }, children: items.map((it, idx) => /* @__PURE__ */ jsxs("div", { children: [
266
+ /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", fontWeight: "var(--weight-semibold, 600)", color: "var(--color-text, #1a1a1a)", fontSize: "var(--text-sm, 13px)" }, children: it.title }),
267
+ /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", color: "var(--color-text-muted, #757578)", fontSize: "var(--text-sm, 13px)", lineHeight: 1.4, marginTop: "var(--space-1, .25rem)" }, children: it.content })
268
+ ] }, idx)) })
269
+ ]
270
+ }
271
+ );
272
+ }
273
+
274
+ // src/components/cards/ArtifactReportCard.tsx
275
+ function variantToColors(variant) {
276
+ switch (variant) {
277
+ case "success":
278
+ return { fg: "var(--color-success, #10b981)", bg: "var(--color-success, #10b981)" };
279
+ case "warning":
280
+ return { fg: "var(--color-warning, #f59e0b)", bg: "var(--color-warning, #f59e0b)" };
281
+ case "error":
282
+ return { fg: "var(--color-error, #CC032E)", bg: "var(--color-error, #CC032E)" };
283
+ case "info":
284
+ return { fg: "var(--color-info, #2563eb)", bg: "var(--color-info, #2563eb)" };
285
+ case "primary":
286
+ default:
287
+ return { fg: "var(--color-primary, var(--color-brand, #CC032E))", bg: "var(--color-primary, var(--color-brand, #CC032E))" };
288
+ }
289
+ }
290
+ function ArtifactReportCard({ title, stats }) {
291
+ const max = Math.max(1, ...stats.map((s) => typeof s.value === "number" ? s.value : 0));
292
+ return /* @__PURE__ */ jsxs(
293
+ "div",
294
+ {
295
+ style: {
296
+ border: "1.5px solid var(--color-border, #e0e0e0)",
297
+ borderRadius: "var(--radius-lg, 8px)",
298
+ background: "var(--color-surface, #ffffff)",
299
+ boxShadow: "var(--shadow-sm, 0 1px 3px rgba(0,0,0,.1))",
300
+ padding: "var(--space-4, 16px)"
301
+ },
302
+ children: [
303
+ title ? /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", fontWeight: "var(--weight-semibold, 600)", color: "var(--color-text, #1a1a1a)", fontSize: "var(--text-base, 15px)" }, children: title }) : null,
304
+ /* @__PURE__ */ jsx("div", { style: { marginTop: "var(--space-3, 12px)", display: "flex", flexDirection: "column", gap: "var(--space-3, 12px)" }, children: stats.map((s, idx) => {
305
+ const colors = variantToColors(s.variant);
306
+ const ratio = Math.max(0, Math.min(1, s.value / max));
307
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-2, 8px)" }, children: [
308
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", gap: "var(--space-2, 8px)" }, children: [
309
+ /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", color: "var(--color-text-muted, #757578)", fontSize: "var(--text-sm, 13px)", fontWeight: "var(--weight-medium, 500)" }, children: s.label }),
310
+ /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", color: colors.fg, fontSize: "var(--text-sm, 13px)", fontWeight: "var(--weight-semibold, 600)" }, children: s.value })
311
+ ] }),
312
+ /* @__PURE__ */ jsx(
313
+ "div",
314
+ {
315
+ style: {
316
+ width: "100%",
317
+ height: "10px",
318
+ borderRadius: "var(--radius-full, 9999px)",
319
+ background: "var(--color-neutral-200, rgba(0,0,0,.08))",
320
+ overflow: "hidden"
321
+ },
322
+ "aria-hidden": "true",
323
+ children: /* @__PURE__ */ jsx(
324
+ "div",
325
+ {
326
+ style: {
327
+ width: `${Math.round(ratio * 100)}%`,
328
+ height: "100%",
329
+ background: colors.bg,
330
+ borderRadius: "inherit",
331
+ transition: "width var(--duration-base, .15s) var(--ease-out, ease) "
332
+ }
333
+ }
334
+ )
335
+ }
336
+ ),
337
+ s.footer ? /* @__PURE__ */ jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", color: "var(--color-text-muted, #757578)", fontSize: "var(--text-sm, 13px)", lineHeight: 1.35 }, children: s.footer }) : null
338
+ ] }, idx);
339
+ }) })
340
+ ]
341
+ }
342
+ );
343
+ }
344
+ return __toCommonJS(cards_entry_exports);
345
+ })();
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ export type ChangelogDialogSection = {
4
+ type: string;
5
+ label: string;
6
+ emoji: string;
7
+ items: string[];
8
+ };
9
+ export type ChangelogDialogVersion = {
10
+ version: string;
11
+ date: string;
12
+ sections: ChangelogDialogSection[];
13
+ };
14
+ export type ChangelogDialogData = {
15
+ current_version?: string;
16
+ versions: ChangelogDialogVersion[];
17
+ };
18
+ export type ChangelogDialogProps = {
19
+ isOpen: boolean;
20
+ onClose: () => void;
21
+ data: ChangelogDialogData | null;
22
+ title?: ReactNode;
23
+ confirmLabel?: string;
24
+ };
25
+ export declare function ChangelogDialog(props: ChangelogDialogProps): JSX.Element | null;
@@ -0,0 +1,194 @@
1
+ // src/components/dialogs/ChangelogDialog.tsx
2
+ import { useEffect, useLayoutEffect, useState } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ function readActiveTheme() {
6
+ if (typeof document === "undefined") return "conatel";
7
+ const el = document.querySelector("[data-theme]");
8
+ const t = el?.getAttribute("data-theme");
9
+ return t === "vivion" ? "vivion" : "conatel";
10
+ }
11
+ function formatDate(dateStr) {
12
+ try {
13
+ const [year, month, day] = dateStr.split("-").map(Number);
14
+ const date = new Date(year, month - 1, day);
15
+ return date.toLocaleDateString("es-AR", { day: "numeric", month: "short", year: "numeric" });
16
+ } catch {
17
+ return dateStr;
18
+ }
19
+ }
20
+ function ChangelogDialog({
21
+ isOpen,
22
+ onClose,
23
+ data,
24
+ title = "Novedades",
25
+ confirmLabel = "Entendido"
26
+ }) {
27
+ const [mounted, setMounted] = useState(false);
28
+ const [theme, setTheme] = useState("conatel");
29
+ useEffect(() => {
30
+ setMounted(true);
31
+ }, []);
32
+ useLayoutEffect(() => {
33
+ if (!isOpen) return;
34
+ setTheme(readActiveTheme());
35
+ }, [isOpen]);
36
+ if (!isOpen || !data || !mounted) return null;
37
+ const overlay = /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ className: `theme-${theme}`,
41
+ "data-theme": theme,
42
+ style: {
43
+ position: "fixed",
44
+ inset: 0,
45
+ zIndex: 1e3,
46
+ display: "flex",
47
+ alignItems: "center",
48
+ justifyContent: "center",
49
+ background: "rgba(0,0,0,0.45)",
50
+ padding: "1rem",
51
+ fontFamily: "var(--font-sans, system-ui)",
52
+ colorScheme: "light"
53
+ },
54
+ onClick: (e) => {
55
+ if (e.target === e.currentTarget) onClose();
56
+ },
57
+ role: "presentation",
58
+ children: /* @__PURE__ */ jsxs(
59
+ "div",
60
+ {
61
+ style: {
62
+ background: "var(--color-surface, #ffffff)",
63
+ border: "1px solid var(--color-border, #e5e7eb)",
64
+ borderRadius: "var(--radius-lg, 12px)",
65
+ boxShadow: "var(--shadow-lg, 0 10px 40px rgba(0,0,0,.12))",
66
+ width: "100%",
67
+ maxWidth: "520px",
68
+ maxHeight: "80vh",
69
+ display: "flex",
70
+ flexDirection: "column",
71
+ overflow: "hidden"
72
+ },
73
+ role: "dialog",
74
+ "aria-modal": "true",
75
+ "aria-labelledby": "changelog-dialog-title",
76
+ children: [
77
+ /* @__PURE__ */ jsxs(
78
+ "div",
79
+ {
80
+ style: {
81
+ display: "flex",
82
+ alignItems: "center",
83
+ justifyContent: "space-between",
84
+ padding: "1rem 1.25rem",
85
+ borderBottom: "1px solid var(--color-border, #e5e7eb)",
86
+ flexShrink: 0
87
+ },
88
+ children: [
89
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", minWidth: 0 }, children: [
90
+ /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined", style: { color: "var(--color-primary)", fontSize: "1.25rem" }, "aria-hidden": true, children: "auto_awesome" }),
91
+ /* @__PURE__ */ jsx("span", { id: "changelog-dialog-title", style: { fontWeight: 600, fontSize: "1rem", color: "var(--color-text, #111827)" }, children: title })
92
+ ] }),
93
+ /* @__PURE__ */ jsx(
94
+ "button",
95
+ {
96
+ type: "button",
97
+ onClick: onClose,
98
+ style: {
99
+ background: "transparent",
100
+ border: "none",
101
+ cursor: "pointer",
102
+ color: "var(--color-text-muted, #6b7280)",
103
+ display: "flex",
104
+ alignItems: "center",
105
+ padding: "0.25rem",
106
+ borderRadius: "var(--radius-sm, 6px)"
107
+ },
108
+ "aria-label": "Cerrar",
109
+ children: /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined", style: { fontSize: "1.25rem" }, "aria-hidden": true, children: "close" })
110
+ }
111
+ )
112
+ ]
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx("div", { style: { overflowY: "auto", padding: "1rem 1.25rem", flex: 1 }, children: data.versions.length === 0 ? /* @__PURE__ */ jsx("p", { style: { color: "var(--color-text-muted, #6b7280)", textAlign: "center", margin: "2rem 0" }, children: "No hay novedades disponibles." }) : data.versions.map((ver, idx) => /* @__PURE__ */ jsxs("div", { children: [
116
+ idx > 0 ? /* @__PURE__ */ jsx("div", { style: { height: "1px", background: "var(--color-border, #e5e7eb)", margin: "1.25rem 0" } }) : null,
117
+ /* @__PURE__ */ jsxs("div", { style: { marginBottom: "0.75rem" }, children: [
118
+ /* @__PURE__ */ jsxs("span", { style: { fontWeight: 700, fontSize: "0.95rem", color: "var(--color-text, #111827)" }, children: [
119
+ "v",
120
+ ver.version
121
+ ] }),
122
+ /* @__PURE__ */ jsxs("span", { style: { marginLeft: "0.5rem", fontSize: "0.8rem", color: "var(--color-text-muted, #6b7280)" }, children: [
123
+ "\u2014 ",
124
+ formatDate(ver.date)
125
+ ] })
126
+ ] }),
127
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: ver.sections.map((section) => /* @__PURE__ */ jsxs(
128
+ "div",
129
+ {
130
+ style: {
131
+ background: "var(--color-bg-secondary, #f9fafb)",
132
+ border: "1px solid var(--color-border, #e5e7eb)",
133
+ borderRadius: "var(--radius-md, 8px)",
134
+ padding: "0.625rem 0.875rem"
135
+ },
136
+ children: [
137
+ /* @__PURE__ */ jsxs("div", { style: { fontWeight: 600, fontSize: "0.85rem", color: "var(--color-text, #111827)", marginBottom: "0.375rem" }, children: [
138
+ section.emoji,
139
+ " ",
140
+ section.label
141
+ ] }),
142
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: "1.1rem", listStyle: "disc" }, children: section.items.map((item, i) => /* @__PURE__ */ jsx("li", { style: { fontSize: "0.83rem", color: "var(--color-text-muted, #4b5563)", lineHeight: 1.5 }, children: item }, i)) })
143
+ ]
144
+ },
145
+ section.type
146
+ )) })
147
+ ] }, ver.version)) }),
148
+ /* @__PURE__ */ jsx(
149
+ "div",
150
+ {
151
+ style: {
152
+ padding: "0.75rem 1.25rem",
153
+ borderTop: "1px solid var(--color-border, #e5e7eb)",
154
+ display: "flex",
155
+ justifyContent: "center",
156
+ flexShrink: 0
157
+ },
158
+ children: /* @__PURE__ */ jsxs(
159
+ "button",
160
+ {
161
+ type: "button",
162
+ onClick: onClose,
163
+ style: {
164
+ display: "inline-flex",
165
+ alignItems: "center",
166
+ gap: "0.375rem",
167
+ background: "var(--color-primary)",
168
+ color: "#fff",
169
+ border: "none",
170
+ borderRadius: "var(--radius-md, 8px)",
171
+ padding: "0.5rem 1.25rem",
172
+ fontWeight: 600,
173
+ fontSize: "0.875rem",
174
+ cursor: "pointer",
175
+ fontFamily: "inherit"
176
+ },
177
+ children: [
178
+ /* @__PURE__ */ jsx("span", { className: "material-symbols-outlined", style: { fontSize: "1rem" }, "aria-hidden": true, children: "check" }),
179
+ confirmLabel
180
+ ]
181
+ }
182
+ )
183
+ }
184
+ )
185
+ ]
186
+ }
187
+ )
188
+ }
189
+ );
190
+ return createPortal(overlay, document.body);
191
+ }
192
+ export {
193
+ ChangelogDialog
194
+ };