@krosoft/react 0.0.237 → 0.0.239
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/dist/AppActions-C_0YI75w.js +60 -0
- package/dist/AppSubTitle-tqqV9nuT.js +19 -0
- package/dist/AppTitle-BR4JFZfp.js +19 -0
- package/dist/ErrorAlert-BDqDHUUc.js +27 -0
- package/dist/GenericForm-CWXT5wiv.js +310 -0
- package/dist/ImageInput-CN2ozjpc.js +80 -0
- package/dist/MultiSelect-BF0zL0B0.js +134 -0
- package/dist/SearchInput-BJPT0SbB.js +255 -0
- package/dist/alert-REQGK9bR.js +32 -0
- package/dist/behavior-BR_V9Rpe.js +76 -0
- package/dist/cards-Cta6x49J.js +126 -0
- package/dist/chart-Dq3AIrue.js +166 -0
- package/dist/charts-CXhVUqLH.js +328 -0
- package/dist/components/core/cards/index.js +2 -10
- package/dist/components/core/charts/index.js +2 -11
- package/dist/components/core/dialogs/index.js +4 -19
- package/dist/components/core/filters/index.js +426 -7
- package/dist/components/core/forms/index.js +2 -4
- package/dist/components/core/index.js +24 -97
- package/dist/components/core/inputs/index.js +4 -11
- package/dist/components/core/language/index.js +2 -4
- package/dist/components/core/layouts/index.js +50 -11
- package/dist/components/core/navbar/index.js +2 -9
- package/dist/components/core/states/index.js +3 -8
- package/dist/components/core/table/index.js +2 -15
- package/dist/components/core/tabs/index.js +188 -6
- package/dist/components/core/theme/index.js +2 -4
- package/dist/components/index.js +28 -322
- package/dist/components/ui/index.js +8 -240
- package/dist/contexts/index.js +2 -5
- package/dist/dialogs-BGHSClsq.js +208 -0
- package/dist/helpers/index.js +39 -46
- package/dist/hooks/behavior/index.js +2 -10
- package/dist/hooks/index.js +11 -30
- package/dist/hooks/ui/index.js +10 -22
- package/dist/i18n/index.js +2 -10
- package/dist/i18n-Dw99bRmg.js +190 -0
- package/dist/language-DxHhlpgN.js +58 -0
- package/dist/navbar-Bc5OQWRI.js +385 -0
- package/dist/providers/index.js +42 -49
- package/dist/pwa/index.js +32 -34
- package/dist/select-ULiTPOr5.js +81 -0
- package/dist/sheet-CRrYTZrl.js +226 -0
- package/dist/sidebar.context-BahtU6hE.js +5 -0
- package/dist/skeleton-D6Ga4BLw.js +11 -0
- package/dist/states-N8-LjFng.js +26 -0
- package/dist/table-muUyiaK6.js +571 -0
- package/dist/tailwind/index.js +126 -156
- package/dist/tailwind.helper-CJaRYBmL.js +8 -0
- package/dist/theme-B_n0F6R4.js +57 -0
- package/dist/tokens/index.js +37 -46
- package/dist/tooltip-B2dzyfs9.js +50 -0
- package/dist/types/forms/index.js +0 -1
- package/dist/types/index.js +1 -1
- package/dist/ui-CiX0E_bn.js +1165 -0
- package/dist/ui-DSVBO3iM.js +46 -0
- package/dist/useDocumentTitle-D7MywIeB.js +19 -0
- package/dist/useFixedColumns-DfAX30tT.js +147 -0
- package/dist/useLanguage-DN3CuBv5.js +19 -0
- package/dist/useMobile-pTQ8lWvt.js +16 -0
- package/dist/useNotifications-CyhTruIG.js +20 -0
- package/dist/useScrollFade-D9kqJBDh.js +27 -0
- package/dist/useTheme-DVfcJ-Qd.js +25 -0
- package/dist/useToast-UeDRLovh.js +103 -0
- package/package.json +3 -3
- package/dist/AppActions-BFwztl-1.js +0 -76
- package/dist/AppSubTitle-BTN0YAc7.js +0 -13
- package/dist/AppTitle-D15YXeMx.js +0 -13
- package/dist/AppVerticalTabs-B7XXtAVj.js +0 -103
- package/dist/ConfirmationDialog-Dj4WdnHg.js +0 -188
- package/dist/DataTable-CjrR27Di.js +0 -638
- package/dist/ErrorAlert-B99Xb_Hg.js +0 -23
- package/dist/ErrorState-CkeS_IBT.js +0 -14
- package/dist/GenericForm-CydibLHU.js +0 -343
- package/dist/ImageInput-DoOOvvth.js +0 -70
- package/dist/KpiCardsLayout-Bq4xQ3i8.js +0 -43
- package/dist/LanguageSelector-C7E51rCQ.js +0 -47
- package/dist/LoadingState-BN0YaPSs.js +0 -9
- package/dist/MetricCard-B0xnFyim.js +0 -53
- package/dist/MultiSelect-DbH7LrsD.js +0 -149
- package/dist/PieChart-uozNJtEx.js +0 -295
- package/dist/SearchInput-DIZ5Yt6L.js +0 -246
- package/dist/SkeletonCards-B9C4cNMr.js +0 -75
- package/dist/TableFilter-CmEVF5Bo.js +0 -422
- package/dist/ThemeSelector-CLi4_epH.js +0 -52
- package/dist/Topbar-Clby5_uj.js +0 -431
- package/dist/alert-B9F1N9Qk.js +0 -30
- package/dist/chart-DntJZGxB.js +0 -181
- package/dist/select-BpjFWqAY.js +0 -96
- package/dist/sheet-XYI-ezvY.js +0 -292
- package/dist/sidebar.context-D5nywlmP.js +0 -6
- package/dist/skeleton-BX4RcsiK.js +0 -8
- package/dist/tailwind.helper-B6yFEsav.js +0 -8
- package/dist/toaster-CyzB1m5z.js +0 -75
- package/dist/toggle-group-iZqnrTj7.js +0 -1276
- package/dist/tooltip-DVeqVwqV.js +0 -61
- package/dist/useDateFnsLocale-D6VExZ8U.js +0 -11
- package/dist/useDocumentTitle-WNwdPz-I.js +0 -14
- package/dist/useFixedColumns-CKZyu4PD.js +0 -161
- package/dist/useKrosoftTranslation-BTp46G94.js +0 -47
- package/dist/useLanguage-C9jI2nwn.js +0 -19
- package/dist/useMobile-DN1_OMDB.js +0 -16
- package/dist/useNotifications-zbUhCvF_.js +0 -12
- package/dist/usePage-BQm6tdJD.js +0 -84
- package/dist/useScrollFade-BA4KqJYp.js +0 -23
- package/dist/useServerTable-UvTY6L1N.js +0 -38
- package/dist/useSidebar-BJuALHqQ.js +0 -11
- package/dist/useTheme-DS6ZjdzM.js +0 -27
- package/dist/useToast-BFTk4lWz.js +0 -100
package/dist/i18n/index.js
CHANGED
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
a as KROSOFT_NAMESPACE,
|
|
5
|
-
l as dateFnsLocale,
|
|
6
|
-
e as krosoftLocales,
|
|
7
|
-
r as registerKrosoftLocales,
|
|
8
|
-
c as useDateFnsLocale,
|
|
9
|
-
t as useKrosoftTranslation
|
|
10
|
-
};
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, t as a } from "../i18n-Dw99bRmg.js";
|
|
2
|
+
export { t as KROSOFT_NAMESPACE, n as dateFnsLocale, e as krosoftLocales, r as registerKrosoftLocales, i as useDateFnsLocale, a as useKrosoftTranslation };
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { useTranslation as e } from "react-i18next";
|
|
2
|
+
import { enGB as t, fr as n } from "date-fns/locale";
|
|
3
|
+
var r = {
|
|
4
|
+
actions: {
|
|
5
|
+
cancel: "Cancel",
|
|
6
|
+
save: "Save",
|
|
7
|
+
saving: "Saving...",
|
|
8
|
+
edit: "Edit",
|
|
9
|
+
delete: "Delete",
|
|
10
|
+
clear: "Clear",
|
|
11
|
+
apply: "Apply"
|
|
12
|
+
},
|
|
13
|
+
states: {
|
|
14
|
+
loading: "Loading...",
|
|
15
|
+
error: "Something went wrong.",
|
|
16
|
+
errorPrefix: "Error:",
|
|
17
|
+
errorTitle: "Error",
|
|
18
|
+
noResult: "No result",
|
|
19
|
+
noResultDot: "No result.",
|
|
20
|
+
noData: "No data available",
|
|
21
|
+
underConstruction: "Section under development",
|
|
22
|
+
comingSoon: "This feature will be available soon"
|
|
23
|
+
},
|
|
24
|
+
search: {
|
|
25
|
+
trigger: "Search",
|
|
26
|
+
placeholder: "Search...",
|
|
27
|
+
globalTitle: "Global search",
|
|
28
|
+
globalDescription: "Search for a page or a record across the application.",
|
|
29
|
+
commandTitle: "Command palette",
|
|
30
|
+
commandDescription: "Search for a command to run.",
|
|
31
|
+
loading: "Searching..."
|
|
32
|
+
},
|
|
33
|
+
notifications: {
|
|
34
|
+
trigger: "Notifications",
|
|
35
|
+
title: "Notifications",
|
|
36
|
+
empty: "No notifications.",
|
|
37
|
+
markAllAsRead: "Mark all as read",
|
|
38
|
+
remove: "Delete notification"
|
|
39
|
+
},
|
|
40
|
+
select: {
|
|
41
|
+
placeholder: "Select...",
|
|
42
|
+
create: "Create “{{search}}”",
|
|
43
|
+
section: "Select a section",
|
|
44
|
+
theme: "Select a theme",
|
|
45
|
+
language: "Select a language"
|
|
46
|
+
},
|
|
47
|
+
date: {
|
|
48
|
+
pickDate: "Select a date",
|
|
49
|
+
pickPeriod: "Select a period",
|
|
50
|
+
clearPeriod: "Clear the selected period"
|
|
51
|
+
},
|
|
52
|
+
filters: {
|
|
53
|
+
advanced: "Advanced filters",
|
|
54
|
+
more: "More filters",
|
|
55
|
+
yes: "Yes",
|
|
56
|
+
no: "No"
|
|
57
|
+
},
|
|
58
|
+
form: {
|
|
59
|
+
validationTitle: "Validation error",
|
|
60
|
+
validationMessage: "Please check the form fields",
|
|
61
|
+
submitError: "Something went wrong while saving"
|
|
62
|
+
},
|
|
63
|
+
image: {
|
|
64
|
+
empty: "No image",
|
|
65
|
+
upload: "Click to upload",
|
|
66
|
+
invalidType: "Only {{types}} files are accepted",
|
|
67
|
+
tooLarge: "The file must not exceed {{size}}MB"
|
|
68
|
+
},
|
|
69
|
+
table: {
|
|
70
|
+
previousPage: "Previous page",
|
|
71
|
+
nextPage: "Next page"
|
|
72
|
+
},
|
|
73
|
+
sidebar: {
|
|
74
|
+
menu: "Navigation menu",
|
|
75
|
+
description: "Main navigation of the application"
|
|
76
|
+
},
|
|
77
|
+
language: {
|
|
78
|
+
description: "Choose the interface language",
|
|
79
|
+
current: "Current language: {{language}}",
|
|
80
|
+
switchTo: "Switch to {{language}}"
|
|
81
|
+
},
|
|
82
|
+
theme: {
|
|
83
|
+
updatedTitle: "Theme updated",
|
|
84
|
+
updatedMessage: "The theme has been changed to {{theme}}."
|
|
85
|
+
}
|
|
86
|
+
}, i = {
|
|
87
|
+
actions: {
|
|
88
|
+
cancel: "Annuler",
|
|
89
|
+
save: "Enregistrer",
|
|
90
|
+
saving: "Enregistrement...",
|
|
91
|
+
edit: "Modifier",
|
|
92
|
+
delete: "Supprimer",
|
|
93
|
+
clear: "Effacer",
|
|
94
|
+
apply: "Appliquer"
|
|
95
|
+
},
|
|
96
|
+
states: {
|
|
97
|
+
loading: "Chargement...",
|
|
98
|
+
error: "Une erreur est survenue.",
|
|
99
|
+
errorPrefix: "Erreur :",
|
|
100
|
+
errorTitle: "Erreur",
|
|
101
|
+
noResult: "Aucun résultat",
|
|
102
|
+
noResultDot: "Aucun résultat.",
|
|
103
|
+
noData: "Aucune donnée disponible",
|
|
104
|
+
underConstruction: "Section en cours de développement",
|
|
105
|
+
comingSoon: "Cette fonctionnalité sera bientôt disponible"
|
|
106
|
+
},
|
|
107
|
+
search: {
|
|
108
|
+
trigger: "Rechercher",
|
|
109
|
+
placeholder: "Rechercher...",
|
|
110
|
+
globalTitle: "Recherche globale",
|
|
111
|
+
globalDescription: "Rechercher une page ou une donnée dans l'application.",
|
|
112
|
+
commandTitle: "Palette de commandes",
|
|
113
|
+
commandDescription: "Rechercher une commande à exécuter.",
|
|
114
|
+
loading: "Recherche..."
|
|
115
|
+
},
|
|
116
|
+
notifications: {
|
|
117
|
+
trigger: "Notifications",
|
|
118
|
+
title: "Notifications",
|
|
119
|
+
empty: "Aucune notification.",
|
|
120
|
+
markAllAsRead: "Tout marquer comme lu",
|
|
121
|
+
remove: "Supprimer la notification"
|
|
122
|
+
},
|
|
123
|
+
select: {
|
|
124
|
+
placeholder: "Sélectionner...",
|
|
125
|
+
create: "Créer « {{search}} »",
|
|
126
|
+
section: "Sélectionner une section",
|
|
127
|
+
theme: "Sélectionner un thème",
|
|
128
|
+
language: "Sélectionner une langue"
|
|
129
|
+
},
|
|
130
|
+
date: {
|
|
131
|
+
pickDate: "Sélectionner une date",
|
|
132
|
+
pickPeriod: "Sélectionner une période",
|
|
133
|
+
clearPeriod: "Effacer la période sélectionnée"
|
|
134
|
+
},
|
|
135
|
+
filters: {
|
|
136
|
+
advanced: "Filtres avancés",
|
|
137
|
+
more: "Plus de filtres",
|
|
138
|
+
yes: "Oui",
|
|
139
|
+
no: "Non"
|
|
140
|
+
},
|
|
141
|
+
form: {
|
|
142
|
+
validationTitle: "Erreur de validation",
|
|
143
|
+
validationMessage: "Veuillez vérifier les champs du formulaire",
|
|
144
|
+
submitError: "Une erreur est survenue lors de l'enregistrement"
|
|
145
|
+
},
|
|
146
|
+
image: {
|
|
147
|
+
empty: "Aucune image",
|
|
148
|
+
upload: "Cliquer pour uploader",
|
|
149
|
+
invalidType: "Seuls les fichiers {{types}} sont acceptés",
|
|
150
|
+
tooLarge: "Le fichier ne doit pas dépasser {{size}}MB"
|
|
151
|
+
},
|
|
152
|
+
table: {
|
|
153
|
+
previousPage: "Page précédente",
|
|
154
|
+
nextPage: "Page suivante"
|
|
155
|
+
},
|
|
156
|
+
sidebar: {
|
|
157
|
+
menu: "Menu de navigation",
|
|
158
|
+
description: "Navigation principale de l'application"
|
|
159
|
+
},
|
|
160
|
+
language: {
|
|
161
|
+
description: "Choisissez la langue de l'interface",
|
|
162
|
+
current: "Langue actuelle : {{language}}",
|
|
163
|
+
switchTo: "Passer en {{language}}"
|
|
164
|
+
},
|
|
165
|
+
theme: {
|
|
166
|
+
updatedTitle: "Thème mis à jour",
|
|
167
|
+
updatedMessage: "Le thème a été changé vers {{theme}}."
|
|
168
|
+
}
|
|
169
|
+
}, a = "krosoft", o = {
|
|
170
|
+
fr: i,
|
|
171
|
+
en: r
|
|
172
|
+
}, s = (e, { overwrite: t = !1 } = {}) => {
|
|
173
|
+
typeof e.addResourceBundle == "function" && Object.entries(o).forEach(([n, r]) => {
|
|
174
|
+
e.addResourceBundle?.(n, a, r, !0, t);
|
|
175
|
+
});
|
|
176
|
+
}, c = {
|
|
177
|
+
fr: n,
|
|
178
|
+
en: t
|
|
179
|
+
}, l = n, u = (e) => e === void 0 ? l : c[e.split("-")[0]] ?? l, d = () => {
|
|
180
|
+
let { i18n: t, ready: n } = e(a, { useSuspense: !1 });
|
|
181
|
+
return u(n ? t.resolvedLanguage ?? t.language : void 0);
|
|
182
|
+
}, f = (e) => {
|
|
183
|
+
let t = e.split(".").reduce((e, t) => typeof e == "object" && e ? e[t] : void 0, i);
|
|
184
|
+
return typeof t == "string" ? t : void 0;
|
|
185
|
+
}, p = (e, t) => t === void 0 ? e : e.replace(/\{\{(\w+)\}\}/g, (e, n) => n in t ? String(t[n]) : e), m = () => {
|
|
186
|
+
let { t, i18n: n, ready: r } = e(a, { useSuspense: !1 });
|
|
187
|
+
return { t: (e, i) => r && n.exists(e, { ns: "krosoft" }) ? t(e, i ?? {}) : p(f(e) ?? e, i) };
|
|
188
|
+
};
|
|
189
|
+
//#endregion
|
|
190
|
+
export { o as a, a as i, u as n, s as o, d as r, m as t };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { i as e, n as t, r as n, s as r, t as i } from "./tooltip-B2dzyfs9.js";
|
|
2
|
+
import { t as a } from "./i18n-Dw99bRmg.js";
|
|
3
|
+
import { i as o, l as s, n as c, t as l, u } from "./select-ULiTPOr5.js";
|
|
4
|
+
import { t as d } from "./useLanguage-DN3CuBv5.js";
|
|
5
|
+
import "react";
|
|
6
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
7
|
+
import { LanguagesIcon as m } from "lucide-react";
|
|
8
|
+
//#region src/components/core/language/LanguageSelector.tsx
|
|
9
|
+
function h({ languageOptions: h, variant: g = "select", id: _ }) {
|
|
10
|
+
let { t: v } = a(), { currentLanguageOption: y, nextLanguageOption: b, changeLanguage: x, cycleLanguage: S } = d(h);
|
|
11
|
+
if (g === "mini") {
|
|
12
|
+
let a = y?.icon ?? m;
|
|
13
|
+
return /* @__PURE__ */ f(n, { children: /* @__PURE__ */ p(i, { children: [/* @__PURE__ */ f(e, {
|
|
14
|
+
asChild: !0,
|
|
15
|
+
children: /* @__PURE__ */ p(r, {
|
|
16
|
+
id: _,
|
|
17
|
+
variant: "ghost",
|
|
18
|
+
size: "icon",
|
|
19
|
+
onClick: S,
|
|
20
|
+
className: "text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
21
|
+
children: [/* @__PURE__ */ f(a, { className: "size-4" }), /* @__PURE__ */ f("span", {
|
|
22
|
+
className: "sr-only",
|
|
23
|
+
children: v("language.current", { language: y?.label ?? "" })
|
|
24
|
+
})]
|
|
25
|
+
})
|
|
26
|
+
}), /* @__PURE__ */ f(t, {
|
|
27
|
+
side: "bottom",
|
|
28
|
+
align: "center",
|
|
29
|
+
children: v("language.switchTo", { language: b?.label ?? "" })
|
|
30
|
+
})] }) });
|
|
31
|
+
}
|
|
32
|
+
return /* @__PURE__ */ p("div", {
|
|
33
|
+
className: "space-y-2",
|
|
34
|
+
children: [/* @__PURE__ */ p(l, {
|
|
35
|
+
value: y?.value,
|
|
36
|
+
onValueChange: x,
|
|
37
|
+
children: [/* @__PURE__ */ f(s, {
|
|
38
|
+
id: _,
|
|
39
|
+
className: "w-full",
|
|
40
|
+
children: /* @__PURE__ */ f(u, { placeholder: v("select.language") })
|
|
41
|
+
}), /* @__PURE__ */ f(c, { children: h.map((e) => {
|
|
42
|
+
let t = e.icon ?? m;
|
|
43
|
+
return /* @__PURE__ */ f(o, {
|
|
44
|
+
value: e.value,
|
|
45
|
+
children: /* @__PURE__ */ p("div", {
|
|
46
|
+
className: "flex items-center gap-2",
|
|
47
|
+
children: [/* @__PURE__ */ f(t, { className: "size-4" }), e.label]
|
|
48
|
+
})
|
|
49
|
+
}, e.value);
|
|
50
|
+
}) })]
|
|
51
|
+
}), /* @__PURE__ */ f("p", {
|
|
52
|
+
className: "text-sm text-muted-foreground",
|
|
53
|
+
children: v("language.description")
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { h as t };
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import { t as e } from "./tailwind.helper-CJaRYBmL.js";
|
|
2
|
+
import { i as t, n, r, s as i, t as a } from "./tooltip-B2dzyfs9.js";
|
|
3
|
+
import { t as o } from "./i18n-Dw99bRmg.js";
|
|
4
|
+
import { C as s, S as c, b as l, d as u, g as d, h as f, i as p, l as m, m as h, p as g, r as _, t as v, v as y, x as b, y as x } from "./sheet-CRrYTZrl.js";
|
|
5
|
+
import { t as S } from "./skeleton-D6Ga4BLw.js";
|
|
6
|
+
import { t as C } from "./behavior-BR_V9Rpe.js";
|
|
7
|
+
import "./hooks/index.js";
|
|
8
|
+
import * as w from "react";
|
|
9
|
+
import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
10
|
+
import { BellIcon as O, ChevronDownIcon as k, LoaderCircleIcon as A, MenuIcon as j, SearchIcon as M, Trash2Icon as N } from "lucide-react";
|
|
11
|
+
//#region src/components/core/navbar/GlobalSearch.tsx
|
|
12
|
+
var P = ({ groups: t, search: n, onSearch: r, onSelect: a, loading: u = !1, open: d, onOpenChange: f, trigger: p = !0, triggerLabel: m, shortcut: h = !0, shortcutLabel: g = "Ctrl+K", placeholder: _, emptyLabel: v, loadingLabel: S, title: C, description: O, hint: k, className: j }) => {
|
|
13
|
+
let { t: N } = o(), [P, F] = w.useState(!1), I = d !== void 0, L = I ? d : P, R = w.useCallback((e) => {
|
|
14
|
+
I || F(e), f?.(e);
|
|
15
|
+
}, [I, f]);
|
|
16
|
+
w.useEffect(() => {
|
|
17
|
+
if (!h) return;
|
|
18
|
+
let e = (e) => {
|
|
19
|
+
e.key.toLowerCase() !== "k" || !(e.metaKey || e.ctrlKey) || (e.preventDefault(), R(!L));
|
|
20
|
+
};
|
|
21
|
+
return window.addEventListener("keydown", e), () => {
|
|
22
|
+
window.removeEventListener("keydown", e);
|
|
23
|
+
};
|
|
24
|
+
}, [
|
|
25
|
+
h,
|
|
26
|
+
L,
|
|
27
|
+
R
|
|
28
|
+
]);
|
|
29
|
+
let z = (e) => {
|
|
30
|
+
R(!1), r(""), a(e);
|
|
31
|
+
}, B = t.some((e) => e.items.length > 0);
|
|
32
|
+
return /* @__PURE__ */ D(T, { children: [p && /* @__PURE__ */ E(i, {
|
|
33
|
+
variant: "ghost",
|
|
34
|
+
size: "icon",
|
|
35
|
+
"aria-label": m ?? N("search.trigger"),
|
|
36
|
+
title: h ? `${m ?? N("search.trigger")} (${g})` : m ?? N("search.trigger"),
|
|
37
|
+
className: "rounded-full",
|
|
38
|
+
onClick: () => {
|
|
39
|
+
R(!0);
|
|
40
|
+
},
|
|
41
|
+
children: /* @__PURE__ */ E(M, { className: "size-4" })
|
|
42
|
+
}), /* @__PURE__ */ D(y, {
|
|
43
|
+
open: L,
|
|
44
|
+
onOpenChange: R,
|
|
45
|
+
title: C ?? N("search.globalTitle"),
|
|
46
|
+
description: O ?? N("search.globalDescription"),
|
|
47
|
+
shouldFilter: !1,
|
|
48
|
+
className: j,
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ E(b, {
|
|
51
|
+
value: n,
|
|
52
|
+
onValueChange: r,
|
|
53
|
+
placeholder: _ ?? N("search.placeholder")
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ D(s, { children: [
|
|
56
|
+
u && /* @__PURE__ */ D("div", {
|
|
57
|
+
className: "flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground",
|
|
58
|
+
children: [/* @__PURE__ */ E(A, { className: "size-4 animate-spin" }), S ?? N("search.loading")]
|
|
59
|
+
}),
|
|
60
|
+
!B && !u && /* @__PURE__ */ E(x, { children: v ?? N("states.noResultDot") }),
|
|
61
|
+
t.map((t) => t.items.length === 0 ? null : /* @__PURE__ */ E(l, {
|
|
62
|
+
heading: t.heading,
|
|
63
|
+
children: t.items.map((t) => {
|
|
64
|
+
let n = t.icon;
|
|
65
|
+
return /* @__PURE__ */ D(c, {
|
|
66
|
+
value: t.key,
|
|
67
|
+
className: "gap-3 px-2 py-2",
|
|
68
|
+
onSelect: () => {
|
|
69
|
+
z(t);
|
|
70
|
+
},
|
|
71
|
+
children: [n && /* @__PURE__ */ E("span", {
|
|
72
|
+
className: e("flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", t.iconClassName),
|
|
73
|
+
children: /* @__PURE__ */ E(n, { className: "size-4" })
|
|
74
|
+
}), /* @__PURE__ */ D("span", {
|
|
75
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
76
|
+
children: [/* @__PURE__ */ E("span", {
|
|
77
|
+
className: "truncate font-medium",
|
|
78
|
+
children: t.label
|
|
79
|
+
}), t.description !== void 0 && t.description !== "" && /* @__PURE__ */ E("span", {
|
|
80
|
+
className: "truncate text-xs text-muted-foreground",
|
|
81
|
+
children: t.description
|
|
82
|
+
})]
|
|
83
|
+
})]
|
|
84
|
+
}, t.key);
|
|
85
|
+
})
|
|
86
|
+
}, t.heading))
|
|
87
|
+
] }),
|
|
88
|
+
k !== void 0 && B && !u && /* @__PURE__ */ E("div", {
|
|
89
|
+
className: "border-t border-border p-2 text-center text-xs text-muted-foreground",
|
|
90
|
+
children: k
|
|
91
|
+
})
|
|
92
|
+
]
|
|
93
|
+
})] });
|
|
94
|
+
}, F = 9, I = ({ items: t, onSelect: n, onMarkAllAsRead: r, onRemove: a, loading: s = !1, unreadCount: c, maxBadgeCount: l = F, open: d, onOpenChange: p, triggerLabel: m, title: _, emptyLabel: v, loadingLabel: y, markAllAsReadLabel: b, removeLabel: x, className: S, contentClassName: C, badgeClassName: T, itemClassName: k, unreadItemClassName: A }) => {
|
|
95
|
+
let { t: j } = o(), [M, P] = w.useState(!1), I = d !== void 0, L = I ? d : M, R = (e) => {
|
|
96
|
+
I || P(e), p?.(e);
|
|
97
|
+
}, z = c ?? t.filter((e) => !e.read).length, B = m ?? j("notifications.trigger"), V = (e) => {
|
|
98
|
+
R(!1), n?.(e);
|
|
99
|
+
};
|
|
100
|
+
return /* @__PURE__ */ D(g, {
|
|
101
|
+
open: L,
|
|
102
|
+
onOpenChange: R,
|
|
103
|
+
children: [/* @__PURE__ */ E(f, {
|
|
104
|
+
asChild: !0,
|
|
105
|
+
children: /* @__PURE__ */ D(i, {
|
|
106
|
+
type: "button",
|
|
107
|
+
variant: "ghost",
|
|
108
|
+
size: "icon",
|
|
109
|
+
className: e("relative rounded-full", S),
|
|
110
|
+
"aria-label": z > 0 ? `${B} (${String(z)})` : B,
|
|
111
|
+
title: B,
|
|
112
|
+
children: [/* @__PURE__ */ E(O, { className: "size-4" }), z > 0 && /* @__PURE__ */ E("span", {
|
|
113
|
+
className: e("absolute right-1 top-1 flex size-4 items-center justify-center rounded-full bg-primary text-[10px] font-bold leading-none text-primary-foreground", T),
|
|
114
|
+
children: z > l ? `${String(l)}+` : z
|
|
115
|
+
})]
|
|
116
|
+
})
|
|
117
|
+
}), /* @__PURE__ */ D(h, {
|
|
118
|
+
align: "end",
|
|
119
|
+
className: e("w-80 p-0", C),
|
|
120
|
+
children: [
|
|
121
|
+
/* @__PURE__ */ D("div", {
|
|
122
|
+
className: "flex items-center justify-between gap-2 border-b px-3 py-2",
|
|
123
|
+
children: [/* @__PURE__ */ E("span", {
|
|
124
|
+
className: "text-sm font-medium",
|
|
125
|
+
children: _ ?? j("notifications.title")
|
|
126
|
+
}), r && z > 0 && /* @__PURE__ */ E(i, {
|
|
127
|
+
type: "button",
|
|
128
|
+
variant: "ghost",
|
|
129
|
+
size: "sm",
|
|
130
|
+
className: "h-7 text-xs",
|
|
131
|
+
onClick: r,
|
|
132
|
+
children: b ?? j("notifications.markAllAsRead")
|
|
133
|
+
})]
|
|
134
|
+
}),
|
|
135
|
+
s && /* @__PURE__ */ E("p", {
|
|
136
|
+
className: "px-3 py-6 text-center text-sm text-muted-foreground",
|
|
137
|
+
children: y ?? j("states.loading")
|
|
138
|
+
}),
|
|
139
|
+
!s && t.length === 0 && /* @__PURE__ */ E("p", {
|
|
140
|
+
className: "px-3 py-6 text-center text-sm text-muted-foreground",
|
|
141
|
+
children: v ?? j("notifications.empty")
|
|
142
|
+
}),
|
|
143
|
+
!s && t.length > 0 && /* @__PURE__ */ E(u, {
|
|
144
|
+
className: "max-h-96",
|
|
145
|
+
children: /* @__PURE__ */ E("ul", {
|
|
146
|
+
className: "divide-y",
|
|
147
|
+
children: t.map((t) => {
|
|
148
|
+
let n = t.icon;
|
|
149
|
+
return /* @__PURE__ */ D("li", {
|
|
150
|
+
className: e("flex items-start gap-2 px-3 py-2", !t.read && (A ?? "bg-accent/40"), k),
|
|
151
|
+
children: [/* @__PURE__ */ D("button", {
|
|
152
|
+
type: "button",
|
|
153
|
+
className: "flex min-w-0 flex-1 items-start gap-2 rounded-sm text-left focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
154
|
+
onClick: () => {
|
|
155
|
+
V(t);
|
|
156
|
+
},
|
|
157
|
+
children: [n && /* @__PURE__ */ E("span", {
|
|
158
|
+
className: e("mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground", t.iconClassName),
|
|
159
|
+
children: /* @__PURE__ */ E(n, { className: "size-3.5" })
|
|
160
|
+
}), /* @__PURE__ */ D("span", {
|
|
161
|
+
className: "min-w-0 flex-1 space-y-0.5",
|
|
162
|
+
children: [
|
|
163
|
+
/* @__PURE__ */ D("span", {
|
|
164
|
+
className: "flex items-center gap-2",
|
|
165
|
+
children: [!t.read && /* @__PURE__ */ E("span", {
|
|
166
|
+
className: "size-1.5 shrink-0 rounded-full bg-primary",
|
|
167
|
+
"aria-hidden": !0
|
|
168
|
+
}), /* @__PURE__ */ E("span", {
|
|
169
|
+
className: e("truncate text-sm", !t.read && "font-medium"),
|
|
170
|
+
children: t.title
|
|
171
|
+
})]
|
|
172
|
+
}),
|
|
173
|
+
t.description && /* @__PURE__ */ E("span", {
|
|
174
|
+
className: "block text-xs text-muted-foreground",
|
|
175
|
+
children: t.description
|
|
176
|
+
}),
|
|
177
|
+
t.date && /* @__PURE__ */ E("span", {
|
|
178
|
+
className: "block text-xs text-muted-foreground/60",
|
|
179
|
+
children: t.date
|
|
180
|
+
})
|
|
181
|
+
]
|
|
182
|
+
})]
|
|
183
|
+
}), a && /* @__PURE__ */ E(i, {
|
|
184
|
+
type: "button",
|
|
185
|
+
variant: "ghost",
|
|
186
|
+
size: "icon",
|
|
187
|
+
className: "size-7 shrink-0 text-muted-foreground hover:text-destructive",
|
|
188
|
+
onClick: () => {
|
|
189
|
+
a(t);
|
|
190
|
+
},
|
|
191
|
+
"aria-label": x ?? j("notifications.remove"),
|
|
192
|
+
title: x ?? j("notifications.remove"),
|
|
193
|
+
children: /* @__PURE__ */ E(N, { className: "size-3.5" })
|
|
194
|
+
})]
|
|
195
|
+
}, t.key);
|
|
196
|
+
})
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
})]
|
|
201
|
+
});
|
|
202
|
+
}, L = (e, t, n) => t === e ? !0 : e === "/" || !t.startsWith(`${e}/`) ? !1 : !n.some((n) => n !== e && n.startsWith(`${e}/`) && (t === n || t.startsWith(`${n}/`))), R = ({ path: r, icon: i, label: o, badge: s, subItems: c, currentPath: l, collapsed: u, dense: d = !1, onItemClick: f }) => {
|
|
203
|
+
let p = c?.map((e) => e.path) ?? [], [m, h] = w.useState(c?.some((e) => L(e.path, l, p)) ?? !1), g = r ? l === r || r !== "/" && l.startsWith(`${r}/`) : !1, _ = c?.some((e) => L(e.path, l, p)), v = /* @__PURE__ */ D("a", {
|
|
204
|
+
href: r ?? "#",
|
|
205
|
+
onClick: (e) => {
|
|
206
|
+
e.ctrlKey || e.metaKey || e.button === 1 || (e.preventDefault(), c && c.length > 0 ? u || h(!m) : r && f(r));
|
|
207
|
+
},
|
|
208
|
+
className: e("flex items-center cursor-pointer transition-all duration-200 group rounded-control", d ? "gap-2.5 mb-0.5" : "gap-3 mb-1", u ? d ? "justify-center p-2 h-9 w-9 mx-auto" : "justify-center p-3 h-12 w-12 mx-auto" : d ? "px-3 py-1.5 h-9" : "px-4 py-3 h-12", g || !u && _ ? d ? "bg-sidebar-primary text-sidebar-primary-foreground" : "bg-sidebar-primary text-sidebar-primary-foreground shadow-lg" : "hover:bg-sidebar-accent text-sidebar-foreground hover:text-sidebar-accent-foreground"),
|
|
209
|
+
children: [/* @__PURE__ */ E("div", {
|
|
210
|
+
className: e("flex-shrink-0 transition-transform group-hover:scale-110", u ? "flex items-center justify-center" : ""),
|
|
211
|
+
children: /* @__PURE__ */ E(i, { className: "size-4" })
|
|
212
|
+
}), !u && /* @__PURE__ */ D(T, { children: [
|
|
213
|
+
/* @__PURE__ */ E("span", {
|
|
214
|
+
className: e("flex-grow transition-opacity duration-150 font-medium", d ? "text-sm" : ""),
|
|
215
|
+
children: o
|
|
216
|
+
}),
|
|
217
|
+
s !== void 0 && /* @__PURE__ */ E("span", {
|
|
218
|
+
className: "bg-red-500 text-white text-xs rounded-full py-1 min-w-[20px] text-center px-2 font-semibold",
|
|
219
|
+
children: s
|
|
220
|
+
}),
|
|
221
|
+
c && c.length > 0 && /* @__PURE__ */ E(k, { className: e("size-4 transition-transform duration-200", m ? "rotate-180" : "") })
|
|
222
|
+
] })]
|
|
223
|
+
});
|
|
224
|
+
return /* @__PURE__ */ D(T, { children: [u ? /* @__PURE__ */ D(a, { children: [/* @__PURE__ */ E(t, {
|
|
225
|
+
asChild: !0,
|
|
226
|
+
children: v
|
|
227
|
+
}), /* @__PURE__ */ E(n, {
|
|
228
|
+
side: "right",
|
|
229
|
+
sideOffset: 6,
|
|
230
|
+
className: "rounded-surface z-[99999] flex gap-2 bg-sidebar text-sidebar-foreground border border-sidebar-border py-2 text-sm shadow-lg",
|
|
231
|
+
children: /* @__PURE__ */ E("div", {
|
|
232
|
+
className: "flex flex-col gap-2",
|
|
233
|
+
children: /* @__PURE__ */ D("div", {
|
|
234
|
+
className: "flex items-center gap-2",
|
|
235
|
+
children: [/* @__PURE__ */ E("p", {
|
|
236
|
+
className: "font-semibold",
|
|
237
|
+
children: o
|
|
238
|
+
}), s !== void 0 && /* @__PURE__ */ D("span", {
|
|
239
|
+
className: "ml-1 text-xs",
|
|
240
|
+
children: [
|
|
241
|
+
"(",
|
|
242
|
+
s,
|
|
243
|
+
")"
|
|
244
|
+
]
|
|
245
|
+
})]
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
})] }) : v, !u && c && c.length > 0 && m && /* @__PURE__ */ E("div", {
|
|
249
|
+
className: e("flex flex-col ml-4 pl-4 border-l-2 border-sidebar-border/50 animate-in slide-in-from-top-2 fade-in duration-200", d ? "gap-0.5 mb-0.5" : "gap-1 mb-2"),
|
|
250
|
+
children: c.map((t, n) => {
|
|
251
|
+
let r = L(t.path, l, p);
|
|
252
|
+
return /* @__PURE__ */ D("a", {
|
|
253
|
+
href: t.path,
|
|
254
|
+
onClick: (e) => {
|
|
255
|
+
e.ctrlKey || e.metaKey || e.button === 1 || (e.preventDefault(), f(t.path));
|
|
256
|
+
},
|
|
257
|
+
className: e("flex items-center justify-between rounded-control text-sm transition-all duration-200", d ? "px-3 py-1" : "px-4 py-2", r ? "bg-sidebar-accent/50 text-sidebar-primary font-semibold" : "text-sidebar-muted hover:bg-sidebar-accent hover:text-sidebar-foreground"),
|
|
258
|
+
children: [/* @__PURE__ */ E("span", { children: t.label }), t.badge !== void 0 && /* @__PURE__ */ E("span", {
|
|
259
|
+
className: "bg-sidebar-primary/20 text-sidebar-primary text-[10px] rounded-full py-0.5 px-2 font-semibold",
|
|
260
|
+
children: t.badge
|
|
261
|
+
})]
|
|
262
|
+
}, n);
|
|
263
|
+
})
|
|
264
|
+
})] });
|
|
265
|
+
}, z = ({ groups: t, currentPath: n, onItemClick: i, slots: a, search: s, dense: c = !1, loading: l = !1 }) => {
|
|
266
|
+
let { t: u } = o(), { enabled: f = !1, placeholder: h } = s ?? {}, { header: g, footer: y } = a ?? {}, { collapsed: b, isMobile: x, setCollapsed: T } = C(), [O, k] = w.useState(""), A = !x && b, j = !b, N = (e) => {
|
|
267
|
+
i(e), x && T(!0);
|
|
268
|
+
}, P = O.trim().toLowerCase(), F = P === "" ? t : t.map((e) => ({
|
|
269
|
+
...e,
|
|
270
|
+
items: e.items.filter((e) => e.label.toLowerCase().includes(P) || (e.subItems?.some((e) => e.label.toLowerCase().includes(P)) ?? !1))
|
|
271
|
+
})).filter((e) => e.items.length > 0), I = /* @__PURE__ */ D("div", {
|
|
272
|
+
className: "flex flex-col h-full bg-sidebar text-sidebar-foreground",
|
|
273
|
+
children: [
|
|
274
|
+
g,
|
|
275
|
+
f && !A && /* @__PURE__ */ E("div", {
|
|
276
|
+
className: e("px-4", c ? "pt-2" : "pt-4"),
|
|
277
|
+
children: /* @__PURE__ */ D("div", {
|
|
278
|
+
className: "relative",
|
|
279
|
+
children: [/* @__PURE__ */ E(M, { className: "absolute left-3 top-1/2 size-4 -translate-y-1/2 text-sidebar-muted" }), /* @__PURE__ */ E(d, {
|
|
280
|
+
type: "search",
|
|
281
|
+
value: O,
|
|
282
|
+
onChange: (e) => {
|
|
283
|
+
k(e.target.value);
|
|
284
|
+
},
|
|
285
|
+
placeholder: h ?? u("search.placeholder"),
|
|
286
|
+
className: e("bg-sidebar-accent/40 border-sidebar-border pl-9 text-sidebar-foreground placeholder:text-sidebar-muted", c ? "h-8 text-sm" : "h-9")
|
|
287
|
+
})]
|
|
288
|
+
})
|
|
289
|
+
}),
|
|
290
|
+
/* @__PURE__ */ E("div", {
|
|
291
|
+
className: e("flex-1 overflow-y-auto scrollbar-modern", A ? "px-0" : "px-2", c ? "py-2" : "py-4"),
|
|
292
|
+
children: l ? Array.from({ length: 5 }).map((t, n) => /* @__PURE__ */ D("div", {
|
|
293
|
+
className: e("flex items-center gap-3", c ? "mb-1 h-9" : "mb-2 h-12", A ? "justify-center px-3" : "px-4"),
|
|
294
|
+
children: [/* @__PURE__ */ E(S, { className: "size-5 flex-shrink-0 rounded-control" }), !A && /* @__PURE__ */ E(S, { className: "h-4 flex-1" })]
|
|
295
|
+
}, n)) : F.map((t, r) => /* @__PURE__ */ D("div", {
|
|
296
|
+
className: c ? "mb-3" : "mb-6",
|
|
297
|
+
children: [!A && t.title !== void 0 && t.title !== "" && /* @__PURE__ */ E("h3", {
|
|
298
|
+
className: e("px-4 text-xs uppercase tracking-wider font-semibold text-sidebar-muted", c ? "mb-1" : "mb-2"),
|
|
299
|
+
children: t.title
|
|
300
|
+
}), /* @__PURE__ */ E("nav", {
|
|
301
|
+
className: e("flex flex-col", c ? "gap-0.5" : "gap-1"),
|
|
302
|
+
children: t.items.map((e, t) => /* @__PURE__ */ E(R, {
|
|
303
|
+
...e,
|
|
304
|
+
currentPath: n,
|
|
305
|
+
collapsed: A,
|
|
306
|
+
dense: c,
|
|
307
|
+
onItemClick: N
|
|
308
|
+
}, t))
|
|
309
|
+
})]
|
|
310
|
+
}, r))
|
|
311
|
+
}),
|
|
312
|
+
y && /* @__PURE__ */ E("div", {
|
|
313
|
+
className: e("border-t border-sidebar-border", c ? "p-2" : "p-4", A ? "flex justify-center" : ""),
|
|
314
|
+
children: y
|
|
315
|
+
})
|
|
316
|
+
]
|
|
317
|
+
});
|
|
318
|
+
return x ? /* @__PURE__ */ E(v, {
|
|
319
|
+
open: j,
|
|
320
|
+
onOpenChange: (e) => {
|
|
321
|
+
T(!e);
|
|
322
|
+
},
|
|
323
|
+
children: /* @__PURE__ */ D(_, {
|
|
324
|
+
side: "left",
|
|
325
|
+
className: "w-[16rem] p-0 bg-sidebar border-r border-sidebar-border overflow-hidden [&>button]:text-sidebar-foreground",
|
|
326
|
+
children: [
|
|
327
|
+
/* @__PURE__ */ E(m, {
|
|
328
|
+
className: "sr-only",
|
|
329
|
+
children: u("sidebar.menu")
|
|
330
|
+
}),
|
|
331
|
+
/* @__PURE__ */ E(p, {
|
|
332
|
+
className: "sr-only",
|
|
333
|
+
children: u("sidebar.description")
|
|
334
|
+
}),
|
|
335
|
+
I
|
|
336
|
+
]
|
|
337
|
+
})
|
|
338
|
+
}) : /* @__PURE__ */ E(r, {
|
|
339
|
+
delayDuration: 0,
|
|
340
|
+
children: /* @__PURE__ */ E("aside", {
|
|
341
|
+
className: e("flex flex-col bg-sidebar h-screen border-r border-sidebar-border transition-all duration-300", A ? "w-[--navbar-width-icon]" : "w-[--navbar-width]", "flex"),
|
|
342
|
+
style: {
|
|
343
|
+
"--navbar-width": "16rem",
|
|
344
|
+
"--navbar-width-icon": "4rem"
|
|
345
|
+
},
|
|
346
|
+
children: I
|
|
347
|
+
})
|
|
348
|
+
});
|
|
349
|
+
}, B = ({ name: t = "appname", subName: n = "appsubname", icon: r, dense: i = !1 }) => {
|
|
350
|
+
let { collapsed: a, isMobile: o } = C(), s = !o && a;
|
|
351
|
+
return /* @__PURE__ */ D("div", {
|
|
352
|
+
className: e("flex items-center flex-shrink-0 gap-3 px-4", i ? "h-14" : "h-16 md:h-20", s ? "justify-center" : ""),
|
|
353
|
+
children: [r !== void 0 && /* @__PURE__ */ E("div", {
|
|
354
|
+
className: "flex-shrink-0 text-sidebar-foreground",
|
|
355
|
+
children: /* @__PURE__ */ E(r, { className: i ? "size-5" : "size-6" })
|
|
356
|
+
}), !s && /* @__PURE__ */ D("div", {
|
|
357
|
+
className: "flex flex-col",
|
|
358
|
+
children: [/* @__PURE__ */ E("h1", {
|
|
359
|
+
className: e("font-bold text-sidebar-foreground leading-tight", i ? "text-base" : "text-lg"),
|
|
360
|
+
children: t
|
|
361
|
+
}), /* @__PURE__ */ E("span", {
|
|
362
|
+
className: e("text-sidebar-muted font-medium", i ? "text-[11px]" : "text-xs"),
|
|
363
|
+
children: n
|
|
364
|
+
})]
|
|
365
|
+
})]
|
|
366
|
+
});
|
|
367
|
+
}, V = ({ collapsed: t, isMobile: n, onToggleSidebar: r, actionsNode: a, userMenuNode: o }) => /* @__PURE__ */ D("header", {
|
|
368
|
+
className: e("fixed top-0 right-0 z-[60] h-16 md:h-20 bg-topbar text-topbar-foreground flex items-center justify-between px-4 transition-all duration-300", n && "left-0", !n && t && "left-[5rem]", !n && !t && "left-[16rem]"),
|
|
369
|
+
tabIndex: -1,
|
|
370
|
+
children: [/* @__PURE__ */ E("div", {
|
|
371
|
+
className: "flex items-center min-w-0 flex-1",
|
|
372
|
+
children: /* @__PURE__ */ E(i, {
|
|
373
|
+
variant: "ghost",
|
|
374
|
+
size: "icon",
|
|
375
|
+
onClick: r,
|
|
376
|
+
className: "text-topbar-foreground hover:bg-topbar-accent hover:text-topbar-accent-foreground",
|
|
377
|
+
children: /* @__PURE__ */ E(j, { className: "size-4" })
|
|
378
|
+
})
|
|
379
|
+
}), /* @__PURE__ */ D("div", {
|
|
380
|
+
className: "flex items-center gap-2 md:gap-4 flex-shrink-0",
|
|
381
|
+
children: [a, o]
|
|
382
|
+
})]
|
|
383
|
+
});
|
|
384
|
+
//#endregion
|
|
385
|
+
export { I as a, R as i, B as n, P as o, z as r, V as t };
|