@krosoft/react 0.0.380 → 0.0.382
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/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/core/cards/DashboardCard.js +18 -0
- package/dist/components/core/cards/KpiCard.js +36 -0
- package/dist/components/core/cards/KpiCards.js +29 -0
- package/dist/components/core/cards/MetricCard.js +63 -0
- package/dist/components/core/cards/SkeletonCard.js +13 -0
- package/dist/components/core/cards/SkeletonCards.js +11 -0
- package/dist/components/core/cards/index.js +7 -1
- package/dist/components/core/changelog/AppChangelog.js +123 -0
- package/dist/components/core/changelog/AppChangelogEntry.js +85 -0
- package/dist/components/core/changelog/AppChangelogNav.js +39 -0
- package/dist/components/core/changelog/AppChangelogTagFilter.js +39 -0
- package/dist/components/core/changelog/index.js +1 -1
- package/dist/components/core/charts/BarChartHorizontal.js +80 -0
- package/dist/components/core/charts/BarChartVertical.js +68 -0
- package/dist/components/core/charts/ChartCard.js +44 -0
- package/dist/components/core/charts/CircularGauge.js +58 -0
- package/dist/components/core/charts/LineChart.js +69 -0
- package/dist/components/core/charts/PieChart.js +55 -0
- package/dist/components/core/charts/chartColors.js +10 -0
- package/dist/components/core/charts/chartTooltip.helper.js +15 -0
- package/dist/components/core/charts/index.js +8 -1
- package/dist/components/core/dialogs/AboutDialog.js +59 -0
- package/dist/components/core/dialogs/AppDialog.js +81 -0
- package/dist/components/core/dialogs/ConfirmationDialog.js +42 -0
- package/dist/components/core/dialogs/FormDialog.js +105 -0
- package/dist/components/core/dialogs/index.js +7 -4
- package/dist/components/core/filters/ActiveFilters.js +69 -0
- package/dist/components/core/filters/AdvancedFilters.js +103 -0
- package/dist/components/core/filters/ConditionFilter.js +162 -0
- package/dist/components/core/filters/ConditionFilterGroup.js +44 -0
- package/dist/components/core/filters/FilterField.js +64 -0
- package/dist/components/core/filters/FilterPills.js +13 -0
- package/dist/components/core/filters/FilterPillsGroup.js +39 -0
- package/dist/components/core/filters/FiltersContainer.js +54 -0
- package/dist/components/core/filters/FiltersMobileDrawer.js +57 -0
- package/dist/components/core/filters/TableFilter.js +101 -0
- package/dist/components/core/filters/index.js +11 -645
- package/dist/{GenericForm-Dxd6k7l-.js → components/core/forms/GenericForm.js} +45 -43
- package/dist/components/core/forms/index.js +1 -1
- package/dist/components/core/icons/FlagFrIcon.js +28 -0
- package/dist/{icons-n0m_1w7z.js → components/core/icons/FlagGbIcon.js} +3 -26
- package/dist/components/core/icons/index.js +3 -1
- package/dist/components/core/index.js +71 -27
- package/dist/components/core/inputs/DatePicker.js +46 -0
- package/dist/components/core/inputs/DateRangePicker.js +92 -0
- package/dist/{inputs-CBojnClc.js → components/core/inputs/FileDropzone.js} +8 -37
- package/dist/{ImageInput-BeIOm3GY.js → components/core/inputs/ImageInput.js} +5 -5
- package/dist/components/core/inputs/MultiSelect.js +191 -0
- package/dist/components/core/inputs/RatingInput.js +36 -0
- package/dist/{SearchInput-IT_Rvthr.js → components/core/inputs/SearchInput.js} +4 -4
- package/dist/components/core/inputs/SingleSelect.js +198 -0
- package/dist/components/core/inputs/index.js +9 -6
- package/dist/components/core/inputs/select.helper.js +46 -0
- package/dist/{language-DY0EYabh.js → components/core/language/LanguageSelector.js} +13 -12
- package/dist/components/core/language/index.js +1 -1
- package/dist/{AppActions-8HjAaTQK.js → components/core/layouts/AppActions.js} +19 -19
- package/dist/components/core/layouts/AppPageHeader.js +44 -0
- package/dist/{AppSubTitle-DI62BaaB.js → components/core/layouts/AppSubTitle.js} +3 -3
- package/dist/{AppTitle-BXoTrXQc.js → components/core/layouts/AppTitle.js} +3 -3
- package/dist/components/core/layouts/KpiCardsLayout.js +8 -0
- package/dist/components/core/layouts/index.js +6 -50
- package/dist/components/core/markdown/AppMarkdown.js +134 -0
- package/dist/components/core/markdown/AppMarkdownHeading.js +45 -0
- package/dist/components/core/markdown/index.js +1 -1
- package/dist/components/core/navbar/GlobalSearch.js +128 -0
- package/dist/components/core/navbar/NotificationsBell.js +133 -0
- package/dist/components/core/navbar/Sidebar.js +99 -0
- package/dist/components/core/navbar/SidebarHeader.js +26 -0
- package/dist/components/core/navbar/SidebarNavItem.js +72 -0
- package/dist/components/core/navbar/Topbar.js +25 -0
- package/dist/components/core/navbar/index.js +7 -1
- package/dist/{ErrorAlert-cJnfBL8H.js → components/core/states/ErrorAlert.js} +5 -5
- package/dist/{states-CJ8xE_Nm.js → components/core/states/ErrorState.js} +4 -11
- package/dist/components/core/states/LoadingState.js +12 -0
- package/dist/components/core/states/index.js +3 -2
- package/dist/components/core/table/DataTable.js +108 -0
- package/dist/components/core/table/JsonTableOutput.js +75 -0
- package/dist/components/core/table/TableActions.js +75 -0
- package/dist/components/core/table/TableBody.js +130 -0
- package/dist/components/core/table/TableBulkActions.js +47 -0
- package/dist/components/core/table/TableHeader.js +103 -0
- package/dist/components/core/table/TablePagination.js +102 -0
- package/dist/components/core/table/TableSettings.js +117 -0
- package/dist/components/core/table/index.js +9 -709
- package/dist/components/core/tabs/AppTabContainer.js +17 -0
- package/dist/components/core/tabs/AppTabHeader.js +19 -0
- package/dist/components/core/tabs/AppTabs.js +56 -0
- package/dist/components/core/tabs/AppVerticalTabs.js +105 -0
- package/dist/components/core/tabs/index.js +5 -188
- package/dist/{theme-DSumNHLX.js → components/core/theme/ThemeSelector.js} +13 -12
- package/dist/components/core/theme/index.js +1 -1
- package/dist/components/index.js +117 -34
- package/dist/components/ui/accordion.js +34 -0
- package/dist/components/ui/alert-dialog.js +54 -0
- package/dist/{alert-REQGK9bR.js → components/ui/alert.js} +2 -2
- package/dist/components/ui/aspect-ratio.js +5 -0
- package/dist/components/ui/avatar.js +25 -0
- package/dist/components/ui/badge.js +22 -0
- package/dist/components/ui/breadcrumb.js +60 -0
- package/dist/{tooltip-_geGvbS7.js → components/ui/button.js} +7 -17
- package/dist/components/ui/calendar.js +44 -0
- package/dist/components/ui/card.js +42 -0
- package/dist/components/ui/carousel.js +115 -0
- package/dist/{chart-wW-fwL3s.js → components/ui/chart.js} +51 -89
- package/dist/components/ui/checkbox.js +31 -0
- package/dist/components/ui/collapsible.js +5 -0
- package/dist/components/ui/command.js +84 -0
- package/dist/components/ui/context-menu.js +71 -0
- package/dist/components/ui/control.js +5 -0
- package/dist/components/ui/dialog.js +49 -0
- package/dist/components/ui/drawer.js +47 -0
- package/dist/components/ui/dropdown-menu.js +72 -0
- package/dist/components/ui/form.js +78 -0
- package/dist/components/ui/hover-card.js +15 -0
- package/dist/components/ui/index.js +49 -9
- package/dist/components/ui/input-otp.js +41 -0
- package/dist/components/ui/input.js +14 -0
- package/dist/components/ui/label.js +14 -0
- package/dist/components/ui/menubar.js +86 -0
- package/dist/components/ui/navigation-menu.js +58 -0
- package/dist/components/ui/pagination.js +62 -0
- package/dist/components/ui/popover.js +15 -0
- package/dist/components/ui/progress.js +17 -0
- package/dist/components/ui/radio-group.js +24 -0
- package/dist/components/ui/resizable.js +18 -0
- package/dist/components/ui/scroll-area.js +29 -0
- package/dist/{select-KWMg2_7Z.js → components/ui/select.js} +3 -3
- package/dist/components/ui/separator.js +15 -0
- package/dist/components/ui/sheet.js +58 -0
- package/dist/components/ui/simple-table.js +57 -0
- package/dist/{skeleton-D6Ga4BLw.js → components/ui/skeleton.js} +2 -2
- package/dist/components/ui/slider.js +17 -0
- package/dist/components/ui/sonner.js +23 -0
- package/dist/components/ui/switch.js +14 -0
- package/dist/components/ui/tabs.js +58 -0
- package/dist/components/ui/textarea.js +12 -0
- package/dist/components/ui/toast.js +53 -0
- package/dist/components/ui/toaster.js +22 -0
- package/dist/components/ui/toggle-group.js +37 -0
- package/dist/components/ui/toggle.js +34 -0
- package/dist/components/ui/tooltip.js +14 -0
- package/dist/{datatable-COQcYUrk.js → constants/datatable.js} +1 -1
- package/dist/constants/index.js +3 -5
- package/dist/constants/search.js +4 -0
- package/dist/contexts/index.js +3 -1
- package/dist/{sidebar.context-BahtU6hE.js → contexts/page.context.js} +2 -2
- package/dist/contexts/sidebar.context.js +5 -0
- package/dist/helpers/changelog.helper.js +69 -0
- package/dist/helpers/index.js +6 -166
- package/dist/{markdown.helper-YJE2H5KQ.js → helpers/markdown.helper.js} +1 -1
- package/dist/helpers/supabase.helper.js +41 -0
- package/dist/helpers/table.helper.js +56 -0
- package/dist/{tailwind.helper-CJaRYBmL.js → helpers/tailwind.helper.js} +1 -1
- package/dist/hooks/behavior/index.js +10 -1
- package/dist/hooks/behavior/useConfirmDeleteDialog.js +21 -0
- package/dist/hooks/behavior/useConfirmationDialog.js +23 -0
- package/dist/hooks/behavior/useDebounce.js +14 -0
- package/dist/hooks/behavior/useDebouncedValue.js +15 -0
- package/dist/hooks/behavior/useDialog.js +21 -0
- package/dist/hooks/behavior/usePage.js +10 -0
- package/dist/hooks/behavior/useSidebar.js +10 -0
- package/dist/hooks/behavior/useTable.js +83 -0
- package/dist/hooks/behavior/useUrlState.js +46 -0
- package/dist/hooks/index.js +20 -11
- package/dist/hooks/ui/index.js +11 -10
- package/dist/{useFixedColumns-Bo-Az3Hp.js → hooks/ui/useDataTable.js} +16 -52
- package/dist/{useDocumentTitle-VoQkict_.js → hooks/ui/useDocumentTitle.js} +2 -2
- package/dist/hooks/ui/useFixedColumns.js +38 -0
- package/dist/{useLanguage-DRnSb5H1.js → hooks/ui/useLanguage.js} +3 -3
- package/dist/{useMobile-pTQ8lWvt.js → hooks/ui/useMobile.js} +1 -1
- package/dist/{useNotifications-CyhTruIG.js → hooks/ui/useNotifications.js} +2 -2
- package/dist/{useScrollFade-D9kqJBDh.js → hooks/ui/useScrollFade.js} +1 -1
- package/dist/{ui-nQGnCss1.js → hooks/ui/useServerTable.js} +2 -2
- package/dist/{useTheme-DIZjiF5F.js → hooks/ui/useTheme.js} +3 -3
- package/dist/{useToast-UeDRLovh.js → hooks/ui/useToast.js} +1 -1
- package/dist/i18n/index.js +4 -1
- package/dist/i18n/krosoftLocales.js +13 -0
- package/dist/i18n/useDateFnsLocale.js +13 -0
- package/dist/i18n/useKrosoftTranslation.js +13 -0
- package/dist/locales/en.json.js +174 -0
- package/dist/locales/fr.json.js +174 -0
- package/dist/providers/SidebarProvider.js +42 -0
- package/dist/providers/index.js +1 -42
- package/dist/pwa/PwaUpdater.js +30 -0
- package/dist/pwa/index.js +3 -50
- package/dist/pwa/pwaUpdateToast.js +25 -0
- package/dist/seasonal/EffectSwitch.js +24 -0
- package/dist/seasonal/EmojiSnowfall.js +24 -0
- package/dist/seasonal/HalloweenEffect.js +17 -0
- package/dist/seasonal/SeasonalEffects.js +8 -0
- package/dist/seasonal/SeasonalEffectsSettings.js +35 -0
- package/dist/seasonal/SnowEffect.js +12 -0
- package/dist/seasonal/index.js +7 -120
- package/dist/seasonal/overlayStyle.js +12 -0
- package/dist/seasonal/seasons.js +7 -0
- package/dist/seasonal/useSeasonalEffects.js +20 -0
- package/dist/seasonal/useStoredToggle.js +21 -0
- package/dist/tailwind/index.js +7 -53
- package/dist/tokens/apply.js +16 -0
- package/dist/tokens/index.js +3 -38
- package/dist/tokens/radius.js +26 -0
- package/dist/types/index.js +0 -1
- package/dist/vendor/tailwindcss/lib/public/create-plugin.js +19 -0
- package/dist/vendor/tailwindcss/lib/util/createPlugin.js +30 -0
- package/dist/vendor/tailwindcss/plugin.js +10 -0
- package/package.json +4 -4
- package/dist/AppMarkdown-CAxm82x0.js +0 -171
- package/dist/MultiSelect-DPN046kI.js +0 -228
- package/dist/SingleSelect-DLY5WylQ.js +0 -313
- package/dist/behavior-B0BYivtN.js +0 -201
- package/dist/cards-DPzVebUM.js +0 -132
- package/dist/changelog-DyPFIscf.js +0 -257
- package/dist/charts-C7rKxkli.js +0 -342
- package/dist/dialogs-CG9Q7pqY.js +0 -269
- package/dist/i18n-BhLphJa3.js +0 -364
- package/dist/navbar-DD0V0pNE.js +0 -432
- package/dist/sheet-cWJO_wkT.js +0 -225
- package/dist/switch-DspImmo_.js +0 -24
- package/dist/ui-Fxy95kSJ.js +0 -1163
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || (e((t = { exports: {} }).exports, t, t.exports), e = null), t.exports), s = (e, i, o, s) => {
|
|
3
|
+
if (i && typeof i == "object" || typeof i == "function") for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
|
|
4
|
+
get: ((e) => i[e]).bind(null, d),
|
|
5
|
+
enumerable: !(s = n(i, d)) || s.enumerable
|
|
6
|
+
});
|
|
7
|
+
return e;
|
|
8
|
+
}, c = (n, r, o) => (o = n == null ? {} : e(i(n)), s(r || !n || !n.__esModule || !a.call(n, "default") ? t(o, "default", {
|
|
9
|
+
value: n,
|
|
10
|
+
enumerable: !0
|
|
11
|
+
}) : o, n));
|
|
12
|
+
//#endregion
|
|
13
|
+
export { o as __commonJSMin, c as __toESM };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { Card as t, CardContent as n, CardHeader as r, CardTitle as i } from "../../ui/card.js";
|
|
3
|
+
import { useKrosoftTranslation as a } from "../../../i18n/useKrosoftTranslation.js";
|
|
4
|
+
import "react";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/core/cards/DashboardCard.tsx
|
|
7
|
+
var c = ({ titleKey: c, icon: l, className: u, children: d }) => {
|
|
8
|
+
let { t: f } = a();
|
|
9
|
+
return /* @__PURE__ */ s(t, {
|
|
10
|
+
className: e("bg-gray-50 dark:bg-gray-950", u),
|
|
11
|
+
children: [/* @__PURE__ */ o(r, { children: /* @__PURE__ */ s(i, {
|
|
12
|
+
className: "flex items-center gap-2",
|
|
13
|
+
children: [l && /* @__PURE__ */ o(l, { className: "mr-2 size-4" }), /* @__PURE__ */ o("span", { children: f(c) })]
|
|
14
|
+
}) }), /* @__PURE__ */ o(n, { children: d })]
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { c as DashboardCard };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { Card as t, CardContent as n, CardHeader as r, CardTitle as i } from "../../ui/card.js";
|
|
3
|
+
import { useKrosoftTranslation as a } from "../../../i18n/useKrosoftTranslation.js";
|
|
4
|
+
import { Skeleton as o } from "../../ui/skeleton.js";
|
|
5
|
+
import "react";
|
|
6
|
+
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
+
import { formatNumber as u } from "@krosoft/core/helpers";
|
|
8
|
+
//#region src/components/core/cards/KpiCard.tsx
|
|
9
|
+
var d = ({ titleKey: d, value: f, valueClassName: p, icon: m, iconClassName: h, description: g, descriptionClassName: _, onClick: v, isLoading: y, error: b }) => {
|
|
10
|
+
let { t: x } = a();
|
|
11
|
+
return /* @__PURE__ */ l(t, {
|
|
12
|
+
className: e(v === void 0 ? "" : "hover:border-primary cursor-pointer"),
|
|
13
|
+
onClick: v,
|
|
14
|
+
children: [/* @__PURE__ */ l(r, {
|
|
15
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
16
|
+
children: [/* @__PURE__ */ c(i, {
|
|
17
|
+
className: "text-sm font-medium",
|
|
18
|
+
children: x(d)
|
|
19
|
+
}), /* @__PURE__ */ c(m, { className: e("size-6 text-muted-foreground", h) })]
|
|
20
|
+
}), /* @__PURE__ */ c(n, { children: y ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(o, { className: "h-8 w-24 mb-1" }), /* @__PURE__ */ c(o, { className: "h-3 w-32" })] }) : b ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
|
|
21
|
+
className: "text-2xl font-bold text-destructive",
|
|
22
|
+
children: "—"
|
|
23
|
+
}), /* @__PURE__ */ c("p", {
|
|
24
|
+
className: "text-xs text-destructive",
|
|
25
|
+
children: b
|
|
26
|
+
})] }) : /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
|
|
27
|
+
className: e("text-2xl font-bold", p),
|
|
28
|
+
children: typeof f == "number" ? u(f) : f instanceof Date ? f.toLocaleDateString() : f
|
|
29
|
+
}), /* @__PURE__ */ c("p", {
|
|
30
|
+
className: e("text-xs text-muted-foreground", _),
|
|
31
|
+
children: g
|
|
32
|
+
})] }) })]
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { d as KpiCard };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { KpiCard as t } from "./KpiCard.js";
|
|
3
|
+
import "react";
|
|
4
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/core/cards/KpiCards.tsx
|
|
6
|
+
var r = {
|
|
7
|
+
1: "lg:grid-cols-1",
|
|
8
|
+
2: "lg:grid-cols-2",
|
|
9
|
+
3: "lg:grid-cols-3",
|
|
10
|
+
4: "lg:grid-cols-4",
|
|
11
|
+
5: "lg:grid-cols-5",
|
|
12
|
+
6: "lg:grid-cols-6"
|
|
13
|
+
}, i = 4, a = ({ stats: a, columns: o = i, isLoading: s, error: c }) => /* @__PURE__ */ n("div", {
|
|
14
|
+
className: e("grid gap-4 md:grid-cols-2", r[o] ?? r[i]),
|
|
15
|
+
children: a.map((e) => /* @__PURE__ */ n(t, {
|
|
16
|
+
titleKey: e.titleKey,
|
|
17
|
+
value: e.value,
|
|
18
|
+
valueClassName: e.valueClassName,
|
|
19
|
+
icon: e.icon,
|
|
20
|
+
iconClassName: e.iconClassName,
|
|
21
|
+
description: e.description,
|
|
22
|
+
descriptionClassName: e.descriptionClassName,
|
|
23
|
+
onClick: e.onClick,
|
|
24
|
+
isLoading: s,
|
|
25
|
+
error: c
|
|
26
|
+
}, e.titleKey))
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { a as KpiCards };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Card as e, CardContent as t, CardTitle as n } from "../../ui/card.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/core/cards/MetricCard.tsx
|
|
5
|
+
var a = {
|
|
6
|
+
blue: "bg-gradient-to-br from-blue-500 to-cyan-500 text-white",
|
|
7
|
+
green: "bg-gradient-to-br from-green-500 to-emerald-500 text-white",
|
|
8
|
+
orange: "bg-gradient-to-br from-orange-500 to-yellow-500 text-white",
|
|
9
|
+
red: "bg-gradient-to-br from-red-500 to-pink-500 text-white",
|
|
10
|
+
purple: "bg-gradient-to-br from-purple-500 to-indigo-500 text-white",
|
|
11
|
+
accent: "bg-accent/10 text-accent",
|
|
12
|
+
success: "bg-success/10 text-success",
|
|
13
|
+
info: "bg-info/10 text-info",
|
|
14
|
+
warning: "bg-warning/10 text-warning",
|
|
15
|
+
destructive: "bg-destructive/10 text-destructive"
|
|
16
|
+
}, o = {
|
|
17
|
+
sm: "size-4",
|
|
18
|
+
md: "size-5",
|
|
19
|
+
lg: "size-6"
|
|
20
|
+
}, s = (e) => e === "up" ? "↑" : e === "down" ? "↓" : "", c = (e) => e === "up" ? "text-green-600" : e === "down" ? "text-red-600" : "text-muted-foreground", l = ({ title: l, value: u, unit: d, subtitle: f, icon: p, iconSize: m = "md", trend: h, trendValue: g, color: _ = "blue", children: v }) => {
|
|
21
|
+
let y = p;
|
|
22
|
+
return /* @__PURE__ */ r(e, {
|
|
23
|
+
className: "relative overflow-hidden bg-card border shadow-lg hover:shadow-xl transition-all duration-300",
|
|
24
|
+
children: /* @__PURE__ */ i(t, {
|
|
25
|
+
className: "pt-6",
|
|
26
|
+
children: [/* @__PURE__ */ i("div", {
|
|
27
|
+
className: "flex items-start justify-between",
|
|
28
|
+
children: [/* @__PURE__ */ i("div", { children: [
|
|
29
|
+
/* @__PURE__ */ r(n, {
|
|
30
|
+
className: "text-sm font-medium text-muted-foreground",
|
|
31
|
+
children: l
|
|
32
|
+
}),
|
|
33
|
+
/* @__PURE__ */ i("div", {
|
|
34
|
+
className: "flex items-baseline space-x-2 mt-1",
|
|
35
|
+
children: [/* @__PURE__ */ r("div", {
|
|
36
|
+
className: "text-2xl font-bold text-card-foreground",
|
|
37
|
+
children: typeof u == "number" ? u.toFixed(1) : u
|
|
38
|
+
}), d && /* @__PURE__ */ r("div", {
|
|
39
|
+
className: "text-sm text-muted-foreground font-medium",
|
|
40
|
+
children: d
|
|
41
|
+
})]
|
|
42
|
+
}),
|
|
43
|
+
f && /* @__PURE__ */ r("div", {
|
|
44
|
+
className: "mt-1 text-xs text-muted-foreground",
|
|
45
|
+
children: f
|
|
46
|
+
}),
|
|
47
|
+
h && g && /* @__PURE__ */ i("div", {
|
|
48
|
+
className: `flex items-center space-x-1 mt-2 text-xs ${c(h)}`,
|
|
49
|
+
children: [/* @__PURE__ */ r("span", { children: s(h) }), /* @__PURE__ */ r("span", { children: g })]
|
|
50
|
+
})
|
|
51
|
+
] }), /* @__PURE__ */ r("div", {
|
|
52
|
+
className: `p-2 rounded-control ${a[_]} shadow-lg`,
|
|
53
|
+
children: /* @__PURE__ */ r(y, { className: o[m] })
|
|
54
|
+
})]
|
|
55
|
+
}), v && /* @__PURE__ */ r("div", {
|
|
56
|
+
className: "mt-4",
|
|
57
|
+
children: v
|
|
58
|
+
})]
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
export { l as MetricCard };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Card as e, CardContent as t, CardHeader as n } from "../../ui/card.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/core/cards/SkeletonCard.tsx
|
|
5
|
+
var a = () => /* @__PURE__ */ i(e, {
|
|
6
|
+
className: "animate-pulse",
|
|
7
|
+
children: [/* @__PURE__ */ r(n, { children: /* @__PURE__ */ r("div", { className: "h-6 bg-muted rounded w-1/4" }) }), /* @__PURE__ */ r(t, { children: /* @__PURE__ */ i("div", {
|
|
8
|
+
className: "space-y-2",
|
|
9
|
+
children: [/* @__PURE__ */ r("div", { className: "h-4 bg-muted rounded" }), /* @__PURE__ */ r("div", { className: "h-4 bg-muted rounded w-3/4" })]
|
|
10
|
+
}) })]
|
|
11
|
+
});
|
|
12
|
+
//#endregion
|
|
13
|
+
export { a as SkeletonCard };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SkeletonCard as e } from "./SkeletonCard.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/core/cards/SkeletonCards.tsx
|
|
5
|
+
var n = ({ count: n = 1 }) => /* @__PURE__ */ t("div", {
|
|
6
|
+
className: "grid gap-6",
|
|
7
|
+
style: { gridTemplateColumns: `repeat(${n}, minmax(0, 1fr))` },
|
|
8
|
+
children: Array.from({ length: n }).map((n, r) => /* @__PURE__ */ t(e, {}, r))
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { n as SkeletonCards };
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { DashboardCard as e } from "./DashboardCard.js";
|
|
2
|
+
import { KpiCard as t } from "./KpiCard.js";
|
|
3
|
+
import { KpiCards as n } from "./KpiCards.js";
|
|
4
|
+
import { MetricCard as r } from "./MetricCard.js";
|
|
5
|
+
import { SkeletonCard as i } from "./SkeletonCard.js";
|
|
6
|
+
import { SkeletonCards as a } from "./SkeletonCards.js";
|
|
7
|
+
export { e as DashboardCard, t as KpiCard, n as KpiCards, r as MetricCard, i as SkeletonCard, a as SkeletonCards };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { filterChangelog as e, getChangelogItemAnchors as t, getChangelogTags as n, parseChangelog as r, splitChangelogItems as i } from "../../../helpers/changelog.helper.js";
|
|
2
|
+
import { cn as a } from "../../../helpers/tailwind.helper.js";
|
|
3
|
+
import { useKrosoftTranslation as o } from "../../../i18n/useKrosoftTranslation.js";
|
|
4
|
+
import { SearchInput as s } from "../inputs/SearchInput.js";
|
|
5
|
+
import { useNotifications as c } from "../../../hooks/ui/useNotifications.js";
|
|
6
|
+
import { AppChangelogEntry as l } from "./AppChangelogEntry.js";
|
|
7
|
+
import { AppChangelogNav as u } from "./AppChangelogNav.js";
|
|
8
|
+
import { AppChangelogTagFilter as d } from "./AppChangelogTagFilter.js";
|
|
9
|
+
import { useEffect as f, useMemo as p, useState as m } from "react";
|
|
10
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
11
|
+
import { useLocation as _, useNavigate as v } from "react-router-dom";
|
|
12
|
+
//#region src/components/core/changelog/AppChangelog.tsx
|
|
13
|
+
var y = "0px 0px -60% 0px", b = ({ content: b, showNav: x = !0, showSearch: S = !0 }) => {
|
|
14
|
+
let { t: C } = o(), { showSuccess: w, showError: T } = c(), E = _(), D = v(), [O, k] = m(""), [A, j] = m([]), [M, N] = m(), P = p(() => r(b), [b]), F = p(() => n(P), [P]), I = p(() => e(P, O, A), [
|
|
15
|
+
P,
|
|
16
|
+
O,
|
|
17
|
+
A
|
|
18
|
+
]), L = (e) => {
|
|
19
|
+
j((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
|
|
20
|
+
}, R = p(() => {
|
|
21
|
+
let e = /* @__PURE__ */ new Map();
|
|
22
|
+
return I.forEach((n) => {
|
|
23
|
+
t(n.id, i(n.content)).forEach((t) => {
|
|
24
|
+
t !== void 0 && e.set(t, n.id);
|
|
25
|
+
});
|
|
26
|
+
}), e;
|
|
27
|
+
}, [I]), z = decodeURIComponent(E.hash.slice(1)), B = I.some((e) => e.id === z) ? z : R.get(z), V = B === void 0 ? void 0 : z, H = I.some((e) => e.id === M) ? M : B ?? I[0]?.id;
|
|
28
|
+
f(() => {
|
|
29
|
+
if (!V) return;
|
|
30
|
+
let e = requestAnimationFrame(() => {
|
|
31
|
+
document.getElementById(V)?.scrollIntoView({
|
|
32
|
+
behavior: "smooth",
|
|
33
|
+
block: "start"
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
return () => {
|
|
37
|
+
cancelAnimationFrame(e);
|
|
38
|
+
};
|
|
39
|
+
}, [V]), f(() => {
|
|
40
|
+
let e = /* @__PURE__ */ new Set(), t = new IntersectionObserver((t) => {
|
|
41
|
+
t.forEach((t) => {
|
|
42
|
+
t.isIntersecting ? e.add(t.target.id) : e.delete(t.target.id);
|
|
43
|
+
});
|
|
44
|
+
let n = I.find((t) => e.has(t.id));
|
|
45
|
+
n && N(n.id);
|
|
46
|
+
}, { rootMargin: y });
|
|
47
|
+
return I.forEach((e) => {
|
|
48
|
+
let n = document.getElementById(e.id);
|
|
49
|
+
n && t.observe(n);
|
|
50
|
+
}), () => {
|
|
51
|
+
t.disconnect();
|
|
52
|
+
};
|
|
53
|
+
}, [I]);
|
|
54
|
+
let U = (e) => {
|
|
55
|
+
D({
|
|
56
|
+
search: E.search,
|
|
57
|
+
hash: `#${e}`
|
|
58
|
+
}, { replace: !0 });
|
|
59
|
+
}, W = async (e) => {
|
|
60
|
+
U(e);
|
|
61
|
+
let t = `${window.location.origin}${E.pathname}${E.search}#${e}`;
|
|
62
|
+
try {
|
|
63
|
+
await navigator.clipboard.writeText(t), w(C("markdown.linkCopied"));
|
|
64
|
+
} catch {
|
|
65
|
+
T(C("markdown.linkCopyError"));
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
if (P.length === 0) return /* @__PURE__ */ h("p", {
|
|
69
|
+
className: "text-sm text-muted-foreground",
|
|
70
|
+
children: C("changelog.empty")
|
|
71
|
+
});
|
|
72
|
+
let G = /* @__PURE__ */ g("div", {
|
|
73
|
+
className: "flex flex-col gap-4",
|
|
74
|
+
children: [/* @__PURE__ */ h(s, {
|
|
75
|
+
search: O,
|
|
76
|
+
onSearch: k,
|
|
77
|
+
className: "md:w-full"
|
|
78
|
+
}), F.length > 0 ? /* @__PURE__ */ h(d, {
|
|
79
|
+
tags: F,
|
|
80
|
+
selected: A,
|
|
81
|
+
onToggle: L,
|
|
82
|
+
onClear: () => {
|
|
83
|
+
j([]);
|
|
84
|
+
}
|
|
85
|
+
}) : null]
|
|
86
|
+
});
|
|
87
|
+
return /* @__PURE__ */ g("div", {
|
|
88
|
+
className: "flex gap-10",
|
|
89
|
+
children: [x ? /* @__PURE__ */ g("aside", {
|
|
90
|
+
className: "sticky top-4 hidden max-h-[calc(100vh-2rem)] w-60 shrink-0 flex-col gap-8 self-start lg:flex",
|
|
91
|
+
children: [S ? G : null, I.length > 0 ? /* @__PURE__ */ h(u, {
|
|
92
|
+
entries: I,
|
|
93
|
+
activeId: H,
|
|
94
|
+
onSelect: U,
|
|
95
|
+
className: "min-h-0 flex-1 overflow-y-auto"
|
|
96
|
+
}) : null]
|
|
97
|
+
}) : null, /* @__PURE__ */ g("div", {
|
|
98
|
+
className: a("min-w-0 flex-1", x && "lg:border-l lg:pl-10"),
|
|
99
|
+
children: [
|
|
100
|
+
S ? /* @__PURE__ */ h("div", {
|
|
101
|
+
className: a("mb-6 md:max-w-md", x && "lg:hidden"),
|
|
102
|
+
children: G
|
|
103
|
+
}) : null,
|
|
104
|
+
I.length === 0 ? /* @__PURE__ */ h("p", {
|
|
105
|
+
className: "text-sm text-muted-foreground",
|
|
106
|
+
children: C("changelog.noResult")
|
|
107
|
+
}) : null,
|
|
108
|
+
/* @__PURE__ */ h("div", {
|
|
109
|
+
className: "divide-y",
|
|
110
|
+
children: I.map((e) => /* @__PURE__ */ h(l, {
|
|
111
|
+
entry: e,
|
|
112
|
+
onSelect: U,
|
|
113
|
+
onCopyLink: (e) => void W(e),
|
|
114
|
+
selectedTags: A,
|
|
115
|
+
linkedId: V
|
|
116
|
+
}, e.id))
|
|
117
|
+
})
|
|
118
|
+
]
|
|
119
|
+
})]
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
//#endregion
|
|
123
|
+
export { b as AppChangelog };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { getChangelogItemAnchors as e, splitChangelogItems as t } from "../../../helpers/changelog.helper.js";
|
|
2
|
+
import { cn as n } from "../../../helpers/tailwind.helper.js";
|
|
3
|
+
import { useDateFnsLocale as r } from "../../../i18n/useDateFnsLocale.js";
|
|
4
|
+
import { useKrosoftTranslation as i } from "../../../i18n/useKrosoftTranslation.js";
|
|
5
|
+
import { AppMarkdown as a } from "../markdown/AppMarkdown.js";
|
|
6
|
+
import { useMemo as o } from "react";
|
|
7
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
8
|
+
import { HashIcon as l, LinkIcon as u, TagIcon as d } from "lucide-react";
|
|
9
|
+
import { format as f } from "date-fns";
|
|
10
|
+
//#region src/components/core/changelog/AppChangelogEntry.tsx
|
|
11
|
+
var p = ({ entry: p, onSelect: m, onCopyLink: h, selectedTags: g, linkedId: _ }) => {
|
|
12
|
+
let { t: v } = i(), y = r(), b = o(() => t(p.content), [p.content]), x = o(() => e(p.id, b), [p.id, b]), S = p.date ? f(p.date, p.hasTime ? "d MMMM yyyy - HH:mm" : "d MMMM yyyy", { locale: y }) : void 0, C = (e) => {
|
|
13
|
+
e.preventDefault(), m(p.id);
|
|
14
|
+
}, w = /* @__PURE__ */ s("button", {
|
|
15
|
+
type: "button",
|
|
16
|
+
onClick: () => {
|
|
17
|
+
h(p.id);
|
|
18
|
+
},
|
|
19
|
+
title: v("markdown.copyLink"),
|
|
20
|
+
"aria-label": v("markdown.copyLink"),
|
|
21
|
+
className: "inline-flex shrink-0 text-muted-foreground transition-opacity hover:text-primary md:opacity-0 md:focus-visible:opacity-100 md:group-hover:opacity-100",
|
|
22
|
+
children: /* @__PURE__ */ s(u, { className: "size-4" })
|
|
23
|
+
});
|
|
24
|
+
return /* @__PURE__ */ c("article", {
|
|
25
|
+
id: p.id,
|
|
26
|
+
className: "group scroll-mt-4 py-8 first:pt-0",
|
|
27
|
+
children: [/* @__PURE__ */ c("div", {
|
|
28
|
+
className: "mb-4 flex flex-wrap items-center gap-x-3 gap-y-1",
|
|
29
|
+
children: [
|
|
30
|
+
p.version === void 0 ? null : /* @__PURE__ */ c("span", {
|
|
31
|
+
title: v("changelog.version", { version: p.version }),
|
|
32
|
+
className: "inline-flex items-center gap-1.5 rounded-full border border-primary/30 bg-primary/10 px-2.5 py-0.5 font-mono text-xs font-semibold text-primary",
|
|
33
|
+
children: [/* @__PURE__ */ s(d, {
|
|
34
|
+
className: "size-3",
|
|
35
|
+
"aria-hidden": "true"
|
|
36
|
+
}), p.version]
|
|
37
|
+
}),
|
|
38
|
+
p.title === void 0 ? null : /* @__PURE__ */ s("h2", {
|
|
39
|
+
className: "text-lg font-semibold leading-tight text-foreground",
|
|
40
|
+
children: p.title
|
|
41
|
+
}),
|
|
42
|
+
S === void 0 ? null : /* @__PURE__ */ s("a", {
|
|
43
|
+
href: `#${p.id}`,
|
|
44
|
+
onClick: C,
|
|
45
|
+
className: "text-sm font-medium text-muted-foreground hover:text-primary",
|
|
46
|
+
children: S
|
|
47
|
+
}),
|
|
48
|
+
w
|
|
49
|
+
]
|
|
50
|
+
}), /* @__PURE__ */ s("div", {
|
|
51
|
+
className: "space-y-4 pl-4 sm:pl-6",
|
|
52
|
+
children: b.map((e, t) => {
|
|
53
|
+
let r = x[t];
|
|
54
|
+
return /* @__PURE__ */ c("div", {
|
|
55
|
+
id: r,
|
|
56
|
+
className: n("scroll-mt-4 rounded-md", r !== void 0 && r === _ && "-mx-3 bg-primary/5 px-3 py-2 ring-1 ring-primary/20"),
|
|
57
|
+
children: [e.tag === void 0 || r === void 0 ? null : /* @__PURE__ */ c("p", {
|
|
58
|
+
className: n("mb-1 flex items-center gap-1.5 text-sm font-semibold", g.includes(e.tag) ? "text-primary" : "text-foreground"),
|
|
59
|
+
children: [/* @__PURE__ */ s("button", {
|
|
60
|
+
type: "button",
|
|
61
|
+
onClick: () => {
|
|
62
|
+
h(r);
|
|
63
|
+
},
|
|
64
|
+
title: v("markdown.copyLink"),
|
|
65
|
+
"aria-label": v("markdown.copyLink"),
|
|
66
|
+
className: "inline-flex shrink-0 text-muted-foreground opacity-60 transition hover:text-primary hover:opacity-100",
|
|
67
|
+
children: /* @__PURE__ */ s(l, {
|
|
68
|
+
className: "size-3.5",
|
|
69
|
+
"aria-hidden": "true"
|
|
70
|
+
})
|
|
71
|
+
}), e.tag]
|
|
72
|
+
}), /* @__PURE__ */ s("div", {
|
|
73
|
+
className: n("min-w-0 [&>*:last-child]:mb-0", e.tag !== void 0 && "pl-5"),
|
|
74
|
+
children: /* @__PURE__ */ s(a, {
|
|
75
|
+
content: e.content,
|
|
76
|
+
headingAnchors: !1
|
|
77
|
+
})
|
|
78
|
+
})]
|
|
79
|
+
}, r ?? `item-${String(t)}`);
|
|
80
|
+
})
|
|
81
|
+
})]
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
//#endregion
|
|
85
|
+
export { p as AppChangelogEntry };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { useDateFnsLocale as t } from "../../../i18n/useDateFnsLocale.js";
|
|
3
|
+
import { useKrosoftTranslation as n } from "../../../i18n/useKrosoftTranslation.js";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
import { format as a } from "date-fns";
|
|
6
|
+
//#region src/components/core/changelog/AppChangelogNav.tsx
|
|
7
|
+
var o = ({ entries: o, activeId: s, onSelect: c, className: l }) => {
|
|
8
|
+
let { t: u } = n(), d = t();
|
|
9
|
+
return /* @__PURE__ */ i("nav", {
|
|
10
|
+
"aria-label": u("changelog.nav"),
|
|
11
|
+
className: l,
|
|
12
|
+
children: [/* @__PURE__ */ r("p", {
|
|
13
|
+
className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",
|
|
14
|
+
children: u("changelog.nav")
|
|
15
|
+
}), /* @__PURE__ */ r("ul", {
|
|
16
|
+
className: "space-y-1",
|
|
17
|
+
children: o.map((t) => {
|
|
18
|
+
let n = t.id === s, o = t.date ? a(t.date, t.hasTime ? "d MMM yyyy - HH:mm" : "d MMM yyyy", { locale: d }) : void 0, l = t.title ?? o ?? t.heading, f = [t.version === void 0 ? void 0 : u("changelog.version", { version: t.version }), t.title === void 0 ? void 0 : o].filter(Boolean).join(" ");
|
|
19
|
+
return /* @__PURE__ */ r("li", { children: /* @__PURE__ */ i("a", {
|
|
20
|
+
href: `#${t.id}`,
|
|
21
|
+
onClick: (e) => {
|
|
22
|
+
e.preventDefault(), c(t.id);
|
|
23
|
+
},
|
|
24
|
+
"aria-current": n ? "location" : void 0,
|
|
25
|
+
className: e("block rounded-md border border-transparent px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground", n && "border-border bg-muted text-foreground"),
|
|
26
|
+
children: [/* @__PURE__ */ r("span", {
|
|
27
|
+
className: e("block", n && "font-semibold"),
|
|
28
|
+
children: l
|
|
29
|
+
}), f === "" ? null : /* @__PURE__ */ r("span", {
|
|
30
|
+
className: "mt-0.5 block whitespace-pre text-xs text-muted-foreground",
|
|
31
|
+
children: f
|
|
32
|
+
})]
|
|
33
|
+
}) }, t.id);
|
|
34
|
+
})
|
|
35
|
+
})]
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { o as AppChangelogNav };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { useKrosoftTranslation as t } from "../../../i18n/useKrosoftTranslation.js";
|
|
3
|
+
import { badgeVariants as n } from "../../ui/badge.js";
|
|
4
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/core/changelog/AppChangelogTagFilter.tsx
|
|
6
|
+
var a = ({ tags: a, selected: o, onToggle: s, onClear: c, className: l }) => {
|
|
7
|
+
let { t: u } = t();
|
|
8
|
+
return /* @__PURE__ */ i("div", {
|
|
9
|
+
className: l,
|
|
10
|
+
children: [/* @__PURE__ */ i("div", {
|
|
11
|
+
className: "mb-2 flex items-center justify-between gap-2",
|
|
12
|
+
children: [/* @__PURE__ */ r("p", {
|
|
13
|
+
className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground",
|
|
14
|
+
children: u("changelog.tagsPlaceholder")
|
|
15
|
+
}), o.length > 0 ? /* @__PURE__ */ r("button", {
|
|
16
|
+
type: "button",
|
|
17
|
+
onClick: c,
|
|
18
|
+
className: "text-xs text-muted-foreground hover:text-foreground",
|
|
19
|
+
children: u("actions.clear")
|
|
20
|
+
}) : null]
|
|
21
|
+
}), /* @__PURE__ */ r("div", {
|
|
22
|
+
className: "flex flex-wrap gap-1.5",
|
|
23
|
+
children: a.map((t) => {
|
|
24
|
+
let i = o.includes(t);
|
|
25
|
+
return /* @__PURE__ */ r("button", {
|
|
26
|
+
type: "button",
|
|
27
|
+
"aria-pressed": i,
|
|
28
|
+
onClick: () => {
|
|
29
|
+
s(t);
|
|
30
|
+
},
|
|
31
|
+
className: e(n({ variant: i ? "default" : "outline" }), "cursor-pointer font-medium focus:ring-0 focus-visible:ring-2", !i && "hover:bg-muted"),
|
|
32
|
+
children: t
|
|
33
|
+
}, t);
|
|
34
|
+
})
|
|
35
|
+
})]
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { a as AppChangelogTagFilter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { AppChangelog } from "./AppChangelog.js";
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { ChartContainer as t, ChartTooltip as n, ChartTooltipContent as r } from "../../ui/chart.js";
|
|
3
|
+
import { buildTooltipValueFormatter as i } from "./chartTooltip.helper.js";
|
|
4
|
+
import * as a from "react";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
import { Bar as c, BarChart as l, CartesianGrid as u, Rectangle as d, XAxis as f, YAxis as p } from "recharts";
|
|
7
|
+
//#region src/components/core/charts/BarChartHorizontal.tsx
|
|
8
|
+
var m = .35, h = (e, t) => t > 0 && e.length > t ? `${e.slice(0, t)}…` : e, g = ({ data: g, label: _ = "Valeur", color: v = "hsl(var(--primary))", categoryWidth: y = 140, maxLabelLength: b = 22, valueFormatter: x, onSelect: S, className: C }) => {
|
|
9
|
+
let [w, T] = a.useState(null), E = a.useMemo(() => ({ value: {
|
|
10
|
+
label: _,
|
|
11
|
+
color: v
|
|
12
|
+
} }), [_, v]), D = a.useMemo(() => i(x, _), [x, _]), O = a.useMemo(() => g.some((e) => e.color !== void 0) ? g.map((e) => ({
|
|
13
|
+
...e,
|
|
14
|
+
fill: e.color ?? v
|
|
15
|
+
})) : g, [g, v]);
|
|
16
|
+
return /* @__PURE__ */ o(t, {
|
|
17
|
+
config: E,
|
|
18
|
+
className: e("aspect-auto size-full", C),
|
|
19
|
+
children: /* @__PURE__ */ s(l, {
|
|
20
|
+
data: O,
|
|
21
|
+
layout: "vertical",
|
|
22
|
+
margin: {
|
|
23
|
+
top: 5,
|
|
24
|
+
right: 20,
|
|
25
|
+
left: 0,
|
|
26
|
+
bottom: 5
|
|
27
|
+
},
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ o(u, {
|
|
30
|
+
strokeDasharray: "3 3",
|
|
31
|
+
horizontal: !1
|
|
32
|
+
}),
|
|
33
|
+
/* @__PURE__ */ o(f, {
|
|
34
|
+
type: "number",
|
|
35
|
+
dataKey: "value",
|
|
36
|
+
allowDecimals: !1,
|
|
37
|
+
tickLine: !1,
|
|
38
|
+
axisLine: !1,
|
|
39
|
+
tickMargin: 8,
|
|
40
|
+
tickFormatter: x ? (e) => x(Number(e)) : void 0
|
|
41
|
+
}),
|
|
42
|
+
/* @__PURE__ */ o(p, {
|
|
43
|
+
type: "category",
|
|
44
|
+
dataKey: "name",
|
|
45
|
+
width: y,
|
|
46
|
+
tickLine: !1,
|
|
47
|
+
axisLine: !1,
|
|
48
|
+
tickFormatter: (e) => h(String(e), b)
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ o(n, { content: /* @__PURE__ */ o(r, { formatter: D }) }),
|
|
51
|
+
/* @__PURE__ */ o(c, {
|
|
52
|
+
dataKey: "value",
|
|
53
|
+
fill: "var(--color-value)",
|
|
54
|
+
radius: [
|
|
55
|
+
0,
|
|
56
|
+
4,
|
|
57
|
+
4,
|
|
58
|
+
0
|
|
59
|
+
],
|
|
60
|
+
className: S ? "cursor-pointer" : void 0,
|
|
61
|
+
onMouseEnter: S ? (e, t) => {
|
|
62
|
+
T(t);
|
|
63
|
+
} : void 0,
|
|
64
|
+
onMouseLeave: S ? () => {
|
|
65
|
+
T(null);
|
|
66
|
+
} : void 0,
|
|
67
|
+
shape: (e) => /* @__PURE__ */ o(d, {
|
|
68
|
+
...e,
|
|
69
|
+
fillOpacity: w !== null && w !== e.index ? m : 1
|
|
70
|
+
}),
|
|
71
|
+
onClick: S ? (e, t) => {
|
|
72
|
+
S(g[t], t);
|
|
73
|
+
} : void 0
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
//#endregion
|
|
80
|
+
export { g as BarChartHorizontal };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { cn as e } from "../../../helpers/tailwind.helper.js";
|
|
2
|
+
import { ChartContainer as t, ChartTooltip as n, ChartTooltipContent as r } from "../../ui/chart.js";
|
|
3
|
+
import { buildTooltipValueFormatter as i } from "./chartTooltip.helper.js";
|
|
4
|
+
import * as a from "react";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
import { Bar as c, BarChart as l, CartesianGrid as u, XAxis as d, YAxis as f } from "recharts";
|
|
7
|
+
//#region src/components/core/charts/BarChartVertical.tsx
|
|
8
|
+
var p = ({ data: p, label: m = "Valeur", color: h = "hsl(var(--primary))", labelAngle: g, valueFormatter: _, allowDecimals: v = !1, onSelect: y, className: b }) => {
|
|
9
|
+
let x = a.useMemo(() => ({ value: {
|
|
10
|
+
label: m,
|
|
11
|
+
color: h
|
|
12
|
+
} }), [m, h]), S = a.useMemo(() => i(_, m), [_, m]), C = g !== void 0 && g !== 0, w = a.useMemo(() => p.some((e) => e.color !== void 0) ? p.map((e) => ({
|
|
13
|
+
...e,
|
|
14
|
+
fill: e.color ?? h
|
|
15
|
+
})) : p, [p, h]);
|
|
16
|
+
return /* @__PURE__ */ o(t, {
|
|
17
|
+
config: x,
|
|
18
|
+
className: e("aspect-auto size-full", b),
|
|
19
|
+
children: /* @__PURE__ */ s(l, {
|
|
20
|
+
data: w,
|
|
21
|
+
margin: {
|
|
22
|
+
top: 10,
|
|
23
|
+
right: 10,
|
|
24
|
+
left: 0,
|
|
25
|
+
bottom: C ? 20 : 10
|
|
26
|
+
},
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ o(u, {
|
|
29
|
+
strokeDasharray: "3 3",
|
|
30
|
+
vertical: !1
|
|
31
|
+
}),
|
|
32
|
+
/* @__PURE__ */ o(d, {
|
|
33
|
+
dataKey: "name",
|
|
34
|
+
angle: g,
|
|
35
|
+
textAnchor: C ? "end" : "middle",
|
|
36
|
+
height: C ? 50 : void 0,
|
|
37
|
+
tickLine: !1,
|
|
38
|
+
axisLine: !1,
|
|
39
|
+
tickMargin: 8
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ o(f, {
|
|
42
|
+
allowDecimals: v,
|
|
43
|
+
tickLine: !1,
|
|
44
|
+
axisLine: !1,
|
|
45
|
+
width: _ ? 48 : 32,
|
|
46
|
+
tickFormatter: _ ? (e) => _(Number(e)) : void 0
|
|
47
|
+
}),
|
|
48
|
+
/* @__PURE__ */ o(n, { content: /* @__PURE__ */ o(r, { formatter: S }) }),
|
|
49
|
+
/* @__PURE__ */ o(c, {
|
|
50
|
+
dataKey: "value",
|
|
51
|
+
fill: "var(--color-value)",
|
|
52
|
+
radius: [
|
|
53
|
+
4,
|
|
54
|
+
4,
|
|
55
|
+
0,
|
|
56
|
+
0
|
|
57
|
+
],
|
|
58
|
+
className: y ? "cursor-pointer" : void 0,
|
|
59
|
+
onClick: y ? (e, t) => {
|
|
60
|
+
y(p[t], t);
|
|
61
|
+
} : void 0
|
|
62
|
+
})
|
|
63
|
+
]
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { p as BarChartVertical };
|