@alepha/ui 0.15.0 → 0.15.2
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/admin/AdminAudits-BlGGKLof.js +3 -0
- package/dist/admin/{AdminAudits-DIrCCPk3.js → AdminAudits-C0DPYw0W.js} +4 -4
- package/dist/admin/AdminAudits-C0DPYw0W.js.map +1 -0
- package/dist/admin/AdminFiles-Bg9feLFH.js +3 -0
- package/dist/admin/{AdminFiles-RsL178Ta.js → AdminFiles-Cu8GHgQ3.js} +5 -5
- package/dist/admin/AdminFiles-Cu8GHgQ3.js.map +1 -0
- package/dist/admin/AdminLayout-BfeFXiul.js +3 -0
- package/dist/admin/{AdminLayout-XiSivwWH.js → AdminLayout-QJLIesuG.js} +1 -1
- package/dist/admin/{AdminLayout-XiSivwWH.js.map → AdminLayout-QJLIesuG.js.map} +1 -1
- package/dist/admin/{AdminNotifications-cIbywWKi.js → AdminNotifications-CgYkBuG_.js} +5 -5
- package/dist/admin/AdminNotifications-CgYkBuG_.js.map +1 -0
- package/dist/admin/AdminNotifications-DmfGPqHe.js +3 -0
- package/dist/admin/{AdminParameters-BKObzzpN.js → AdminParameters-Cl-R0nXt.js} +1 -1
- package/dist/admin/{AdminParameters-D-q3Qmhv.js → AdminParameters-hjNG_KXb.js} +4 -4
- package/dist/admin/AdminParameters-hjNG_KXb.js.map +1 -0
- package/dist/admin/{AdminSessions-vOgkrQ2U.js → AdminSessions-Bey9cuy1.js} +6 -6
- package/dist/admin/AdminSessions-Bey9cuy1.js.map +1 -0
- package/dist/admin/AdminSessions-Cn4_jB04.js +3 -0
- package/dist/admin/{AdminUserAudits-CSsN1fIC.js → AdminUserAudits-C7AN9jx7.js} +4 -4
- package/dist/admin/AdminUserAudits-C7AN9jx7.js.map +1 -0
- package/dist/admin/{AdminUserAudits-DmAnivo3.js → AdminUserAudits-Cp_ERd2g.js} +1 -1
- package/dist/admin/{AdminUserCreate-DpA13zwj.js → AdminUserCreate-Chr-7hLk.js} +1 -1
- package/dist/admin/{AdminUserCreate-B72nu-3W.js → AdminUserCreate-DiXi1EWB.js} +4 -4
- package/dist/admin/AdminUserCreate-DiXi1EWB.js.map +1 -0
- package/dist/admin/{AdminUserDetails-Zib_B6Al.js → AdminUserDetails-Dcn3OwMC.js} +1 -1
- package/dist/admin/{AdminUserDetails-CKM2IEMr.js → AdminUserDetails-yM4x8JE6.js} +5 -5
- package/dist/admin/AdminUserDetails-yM4x8JE6.js.map +1 -0
- package/dist/admin/{AdminUserLayout-BNBOEiAO.js → AdminUserLayout-CfeQHH6e.js} +1 -1
- package/dist/admin/{AdminUserLayout-D7En9UBq.js → AdminUserLayout-D9bqGt6T.js} +3 -3
- package/dist/admin/AdminUserLayout-D9bqGt6T.js.map +1 -0
- package/dist/admin/{AdminUserSessions-DEaGu6n6.js → AdminUserSessions-kmkXG-xf.js} +4 -4
- package/dist/admin/AdminUserSessions-kmkXG-xf.js.map +1 -0
- package/dist/admin/AdminUserSessions-rvA0ztxn.js +3 -0
- package/dist/admin/{AdminUserSettings-Di73D7g2.js → AdminUserSettings-BnzRAcqV.js} +4 -4
- package/dist/admin/AdminUserSettings-BnzRAcqV.js.map +1 -0
- package/dist/admin/AdminUserSettings-CXs-jtRv.js +3 -0
- package/dist/admin/{AdminUsers-BnGIRvmV.js → AdminUsers-CYkcUWCg.js} +6 -6
- package/dist/admin/AdminUsers-CYkcUWCg.js.map +1 -0
- package/dist/admin/AdminUsers-DdFXzrEn.js +3 -0
- package/dist/admin/index.d.ts +33 -18
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +48 -33
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{AuthLayout-B1sUB8fB.js → AuthLayout-Dj5K4SIN.js} +2 -2
- package/dist/auth/AuthLayout-Dj5K4SIN.js.map +1 -0
- package/dist/{demo/IconGoogle-DvmFiEDB.js → auth/IconGoogle-DpSlPZ1u.js} +1 -1
- package/dist/auth/{IconGoogle-Cm5d8J3f.js.map → IconGoogle-DpSlPZ1u.js.map} +1 -1
- package/dist/auth/{Login-Cjxv3EDi.js → Login-BAFVcX_J.js} +6 -6
- package/dist/auth/Login-BAFVcX_J.js.map +1 -0
- package/dist/auth/Login-C5PUsp8I.js +4 -0
- package/dist/auth/{Register-CGlbQ50l.js → Register-CZRXEcWy.js} +7 -7
- package/dist/auth/Register-CZRXEcWy.js.map +1 -0
- package/dist/auth/Register-DMTs5ep_.js +4 -0
- package/dist/auth/ResetPassword-D-mhMtmx.js +3 -0
- package/dist/auth/{ResetPassword-DvqD_1SJ.js → ResetPassword-DTYNsBIj.js} +5 -5
- package/dist/auth/ResetPassword-DTYNsBIj.js.map +1 -0
- package/dist/auth/VerifyEmail-BsrCmncc.js +3 -0
- package/dist/auth/{VerifyEmail-VaBruOnO.js → VerifyEmail-DolENWGn.js} +4 -4
- package/dist/auth/VerifyEmail-DolENWGn.js.map +1 -0
- package/dist/auth/index.d.ts +34 -23
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +25 -14
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +272 -209
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +314 -99
- package/dist/core/index.js.map +1 -1
- package/dist/demo/{DemoDataTable-2mzzf__a.js → DemoDataTable-CguplbR7.js} +2 -2
- package/dist/demo/{DemoDataTable-2mzzf__a.js.map → DemoDataTable-CguplbR7.js.map} +1 -1
- package/dist/demo/{DemoHome-CnuL5WV9.js → DemoHome-Cce2bWmg.js} +1 -1
- package/dist/demo/{DemoHome-CnuL5WV9.js.map → DemoHome-Cce2bWmg.js.map} +1 -1
- package/dist/demo/DemoHome-DC9qkMNe.js +3 -0
- package/dist/demo/DemoJsonViewer-DIssGVlJ.js +4 -0
- package/dist/demo/{DemoJsonViewer-NUGst5wW.js → DemoJsonViewer-Dgdk3Txb.js} +3 -3
- package/dist/demo/{DemoJsonViewer-NUGst5wW.js.map → DemoJsonViewer-Dgdk3Txb.js.map} +1 -1
- package/dist/demo/{DemoLayout-dvbeuBBf.js → DemoLayout-B20TEuhV.js} +2 -2
- package/dist/demo/DemoLayout-B20TEuhV.js.map +1 -0
- package/dist/demo/DemoLayout-DSRyf4qJ.js +3 -0
- package/dist/demo/{DemoLogin-DvltFTER.js → DemoLogin-mtkN6340.js} +7 -7
- package/dist/demo/DemoLogin-mtkN6340.js.map +1 -0
- package/dist/demo/{DemoRegister-Vu6ZPWib.js → DemoRegister-C0MW7anp.js} +8 -8
- package/dist/demo/DemoRegister-C0MW7anp.js.map +1 -0
- package/dist/demo/{DemoResetPassword-BFwmqwec.js → DemoResetPassword-CPTy88iK.js} +6 -6
- package/dist/demo/DemoResetPassword-CPTy88iK.js.map +1 -0
- package/dist/demo/{DemoSidebar-DWnjYHoP.js → DemoSidebar-MVmQKfMt.js} +2 -2
- package/dist/demo/{DemoSidebar-DWnjYHoP.js.map → DemoSidebar-MVmQKfMt.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-P5_VInW2.js → DemoTypeForm-w-qtfRlC.js} +3 -3
- package/dist/demo/DemoTypeForm-w-qtfRlC.js.map +1 -0
- package/dist/demo/{DemoVerifyEmail-C_ooC5u8.js → DemoVerifyEmail-C8FFJT5A.js} +5 -5
- package/dist/demo/DemoVerifyEmail-C8FFJT5A.js.map +1 -0
- package/dist/{auth/IconGoogle-Cm5d8J3f.js → demo/IconGoogle-CbBF8Hqq.js} +1 -1
- package/dist/demo/{IconGoogle-DvmFiEDB.js.map → IconGoogle-CbBF8Hqq.js.map} +1 -1
- package/dist/demo/{Showcase-vemLuO2t.js → Showcase-CQrMWars.js} +4 -4
- package/dist/demo/Showcase-CQrMWars.js.map +1 -0
- package/dist/demo/index.d.ts +37 -27
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +26 -16
- package/dist/demo/index.js.map +1 -1
- package/dist/json/index.d.ts +17 -17
- package/dist/json/index.d.ts.map +1 -1
- package/package.json +13 -14
- package/src/admin/AdminRouter.ts +2 -2
- package/src/admin/MainRouter.ts +1 -1
- package/src/admin/components/audits/AdminAudits.tsx +3 -3
- package/src/admin/components/files/AdminFiles.tsx +2 -2
- package/src/admin/components/jobs/AdminJobs.tsx +2 -2
- package/src/admin/components/notifications/AdminNotifications.tsx +2 -2
- package/src/admin/components/parameters/AdminParameters.tsx +1 -1
- package/src/admin/components/parameters/ParameterDetails.tsx +2 -2
- package/src/admin/components/parameters/ParameterHistory.tsx +1 -1
- package/src/admin/components/parameters/types.ts +9 -3
- package/src/admin/components/sessions/AdminSessions.tsx +3 -3
- package/src/admin/components/shared/AdminResourceHeader.tsx +1 -1
- package/src/admin/components/shared/AdminResourceTabs.tsx +1 -1
- package/src/admin/components/users/AdminUserAudits.tsx +3 -3
- package/src/admin/components/users/AdminUserCreate.tsx +3 -3
- package/src/admin/components/users/AdminUserDetails.tsx +4 -4
- package/src/admin/components/users/AdminUserLayout.tsx +2 -2
- package/src/admin/components/users/AdminUserSessions.tsx +3 -3
- package/src/admin/components/users/AdminUserSettings.tsx +3 -3
- package/src/admin/components/users/AdminUsers.tsx +3 -3
- package/src/admin/index.ts +16 -1
- package/src/auth/AuthI18n.ts +1 -1
- package/src/auth/AuthRouter.ts +2 -2
- package/src/auth/components/AuthLayout.tsx +1 -1
- package/src/auth/components/Login.tsx +4 -4
- package/src/auth/components/Register.tsx +5 -5
- package/src/auth/components/ResetPassword.tsx +4 -4
- package/src/auth/components/VerifyEmail.tsx +3 -3
- package/src/auth/components/buttons/UserButton.tsx +2 -2
- package/src/auth/index.ts +14 -3
- package/src/core/RootRouter.ts +1 -1
- package/src/core/atoms/alephaSidebarAtom.ts +57 -0
- package/src/core/components/buttons/ActionButton.tsx +9 -9
- package/src/core/components/buttons/BurgerButton.tsx +5 -4
- package/src/core/components/buttons/LanguageButton.tsx +1 -1
- package/src/core/components/buttons/OmnibarButton.tsx +20 -1
- package/src/core/components/buttons/ThemeButton.tsx +1 -1
- package/src/core/components/buttons/ToggleSidebarButton.tsx +33 -23
- package/src/core/components/form/Control.tsx +1 -1
- package/src/core/components/form/ControlArray.tsx +2 -2
- package/src/core/components/form/ControlDate.tsx +1 -1
- package/src/core/components/form/ControlNumber.tsx +2 -2
- package/src/core/components/form/ControlObject.tsx +1 -1
- package/src/core/components/form/ControlQueryBuilder.tsx +1 -1
- package/src/core/components/form/ControlSelect.tsx +1 -1
- package/src/core/components/form/TypeForm.tsx +2 -2
- package/src/core/components/layout/AdminShell.tsx +205 -27
- package/src/core/components/layout/AlephaMantineProvider.tsx +3 -3
- package/src/core/components/layout/Omnibar.tsx +2 -2
- package/src/core/components/layout/Sidebar.tsx +42 -77
- package/src/core/components/table/DataTable.tsx +2 -2
- package/src/core/components/table/DataTableFilters.tsx +1 -1
- package/src/core/components/table/types.ts +1 -1
- package/src/core/hooks/useDialog.ts +1 -1
- package/src/core/hooks/useTheme.ts +1 -1
- package/src/core/hooks/useToast.ts +1 -1
- package/src/core/index.ts +57 -6
- package/src/core/providers/ThemeProvider.ts +1 -1
- package/src/core/styles.css +58 -0
- package/src/core/utils/parseInput.ts +1 -1
- package/src/demo/DemoRouter.ts +1 -1
- package/src/demo/components/DemoLayout.tsx +1 -1
- package/src/demo/components/core/DemoTypeForm.tsx +1 -1
- package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
- package/src/demo/components/shared/Showcase.tsx +1 -1
- package/src/demo/index.ts +11 -1
- package/src/json/index.ts +13 -0
- package/dist/admin/AdminAudits-B3EhKhN7.js +0 -3
- package/dist/admin/AdminAudits-DIrCCPk3.js.map +0 -1
- package/dist/admin/AdminFiles-C8OG4dtD.js +0 -3
- package/dist/admin/AdminFiles-RsL178Ta.js.map +0 -1
- package/dist/admin/AdminLayout-BnSmtA4x.js +0 -3
- package/dist/admin/AdminNotifications-BSL4B2fQ.js +0 -3
- package/dist/admin/AdminNotifications-cIbywWKi.js.map +0 -1
- package/dist/admin/AdminParameters-D-q3Qmhv.js.map +0 -1
- package/dist/admin/AdminSessions-DHG9zPfr.js +0 -3
- package/dist/admin/AdminSessions-vOgkrQ2U.js.map +0 -1
- package/dist/admin/AdminUserAudits-CSsN1fIC.js.map +0 -1
- package/dist/admin/AdminUserCreate-B72nu-3W.js.map +0 -1
- package/dist/admin/AdminUserDetails-CKM2IEMr.js.map +0 -1
- package/dist/admin/AdminUserLayout-D7En9UBq.js.map +0 -1
- package/dist/admin/AdminUserSessions-D9X2_HMA.js +0 -3
- package/dist/admin/AdminUserSessions-DEaGu6n6.js.map +0 -1
- package/dist/admin/AdminUserSettings-Di73D7g2.js.map +0 -1
- package/dist/admin/AdminUserSettings-yI-JECf5.js +0 -3
- package/dist/admin/AdminUsers-BnGIRvmV.js.map +0 -1
- package/dist/admin/AdminUsers-CG9-2Z8W.js +0 -3
- package/dist/auth/AuthLayout-B1sUB8fB.js.map +0 -1
- package/dist/auth/Login-BWi-pPbO.js +0 -4
- package/dist/auth/Login-Cjxv3EDi.js.map +0 -1
- package/dist/auth/Register-CGlbQ50l.js.map +0 -1
- package/dist/auth/Register-CWdkXWkc.js +0 -4
- package/dist/auth/ResetPassword-BUdM7T_R.js +0 -3
- package/dist/auth/ResetPassword-DvqD_1SJ.js.map +0 -1
- package/dist/auth/VerifyEmail-BYmtnkEl.js +0 -3
- package/dist/auth/VerifyEmail-VaBruOnO.js.map +0 -1
- package/dist/demo/DemoHome-D6Z7EE4V.js +0 -3
- package/dist/demo/DemoJsonViewer-CYUggLop.js +0 -4
- package/dist/demo/DemoLayout-ZFDzyvY3.js +0 -3
- package/dist/demo/DemoLayout-dvbeuBBf.js.map +0 -1
- package/dist/demo/DemoLogin-DvltFTER.js.map +0 -1
- package/dist/demo/DemoRegister-Vu6ZPWib.js.map +0 -1
- package/dist/demo/DemoResetPassword-BFwmqwec.js.map +0 -1
- package/dist/demo/DemoTypeForm-P5_VInW2.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-C_ooC5u8.js.map +0 -1
- package/dist/demo/Showcase-vemLuO2t.js.map +0 -1
package/dist/core/index.js
CHANGED
|
@@ -1,24 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { $atom, $context, $inject, $module, Alepha, AlephaError, TypeBoxError, t } from "alepha";
|
|
2
|
+
import { AlephaReactForm, FormValidationError, useForm, useFormState } from "alepha/react/form";
|
|
3
|
+
import { $head, AlephaReactHead } from "alepha/react/head";
|
|
4
|
+
import { AlephaReactI18n, useI18n } from "alepha/react/i18n";
|
|
5
5
|
import { $cookie } from "alepha/server/cookies";
|
|
6
|
-
import { $page, NestedView, useActive, useRouter } from "
|
|
7
|
-
import { useAction, useEvents, useInject, useStore } from "@alepha/react";
|
|
6
|
+
import { $page, NestedView, useActive, useRouter } from "alepha/react/router";
|
|
8
7
|
import { ActionIcon, Anchor, AppShell, Autocomplete, Badge, Box, Burger, Button, Card, Checkbox, Collapse, ColorInput, ColorSchemeScript, CopyButton, Divider, Fieldset, FileInput, Flex, Flex as Flex$1, Grid, Group, Input, Kbd, MantineProvider, Menu, MultiSelect, NumberInput, Pagination, PasswordInput, Popover, ScrollArea, SegmentedControl, Select, Slider, Stack, Switch, Table, TagsInput, Text, Text as Text$1, TextInput, Textarea, ThemeIcon, Tooltip, UnstyledButton, useComputedColorScheme, useMantineColorScheme, useMantineTheme } from "@mantine/core";
|
|
9
8
|
import { ModalsProvider, modals } from "@mantine/modals";
|
|
10
9
|
import { Notifications, notifications } from "@mantine/notifications";
|
|
11
10
|
import { NavigationProgress, nprogress } from "@mantine/nprogress";
|
|
11
|
+
import { ClientOnly, useAction, useEvents, useInject, useStore } from "alepha/react";
|
|
12
12
|
import { IconAlertTriangle, IconArrowDown, IconArrowUp, IconArrowsSort, IconAt, IconCalendar, IconCheck, IconChevronDown, IconChevronRight, IconClock, IconColorPicker, IconColumns, IconCopy, IconFile, IconFilter, IconGripVertical, IconHash, IconInfoCircle, IconInfoTriangle, IconKey, IconLanguage, IconLayoutSidebarLeftCollapse, IconLayoutSidebarRightCollapse, IconLetterCase, IconLink, IconList, IconMail, IconMoon, IconPalette, IconPhone, IconPlus, IconRefresh, IconSearch, IconSelector, IconSquareRounded, IconSun, IconToggleLeft, IconTrash, IconX } from "@tabler/icons-react";
|
|
13
13
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
14
14
|
import { Spotlight, spotlight } from "@mantine/spotlight";
|
|
15
15
|
import { Children, createElement, isValidElement, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
16
16
|
import { ui as ui$1 } from "@alepha/ui";
|
|
17
|
+
import { useDebouncedCallback, useOs } from "@mantine/hooks";
|
|
17
18
|
import { DateInput, DateTimePicker, TimeInput } from "@mantine/dates";
|
|
18
19
|
import { parseQueryString } from "alepha/orm";
|
|
19
|
-
import { useDebouncedCallback } from "@mantine/hooks";
|
|
20
20
|
import { DateTimeProvider } from "alepha/datetime";
|
|
21
21
|
|
|
22
|
+
//#region ../../src/core/atoms/alephaSidebarAtom.ts
|
|
23
|
+
const alephaSidebarAtom = $atom({
|
|
24
|
+
name: "alepha.ui.sidebar",
|
|
25
|
+
schema: t.object({
|
|
26
|
+
opened: t.boolean(),
|
|
27
|
+
collapsed: t.boolean(),
|
|
28
|
+
width: t.number(),
|
|
29
|
+
defaultWidth: t.number(),
|
|
30
|
+
collapsedWidth: t.number(),
|
|
31
|
+
maxWidth: t.number(),
|
|
32
|
+
collapseThreshold: t.number(),
|
|
33
|
+
hoverDelay: t.number()
|
|
34
|
+
}),
|
|
35
|
+
default: {
|
|
36
|
+
opened: false,
|
|
37
|
+
collapsed: false,
|
|
38
|
+
width: 300,
|
|
39
|
+
defaultWidth: 300,
|
|
40
|
+
collapsedWidth: 78,
|
|
41
|
+
maxWidth: 500,
|
|
42
|
+
collapseThreshold: 240,
|
|
43
|
+
hoverDelay: 300
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
22
48
|
//#region ../../src/core/atoms/alephaThemeAtom.ts
|
|
23
49
|
const alephaThemeAtom = $atom({
|
|
24
50
|
name: "alepha.ui.theme",
|
|
@@ -208,8 +234,8 @@ const useTheme = () => {
|
|
|
208
234
|
useStore(alephaThemeAtom);
|
|
209
235
|
const themeProvider = useInject(ThemeProvider);
|
|
210
236
|
const theme = themeProvider.getTheme();
|
|
211
|
-
const setTheme = (theme
|
|
212
|
-
themeProvider.setTheme(theme
|
|
237
|
+
const setTheme = (theme) => {
|
|
238
|
+
themeProvider.setTheme(theme.index);
|
|
213
239
|
};
|
|
214
240
|
return [theme, setTheme];
|
|
215
241
|
};
|
|
@@ -825,7 +851,7 @@ const ActionButton = (_props) => {
|
|
|
825
851
|
}
|
|
826
852
|
}
|
|
827
853
|
if (props.icon) {
|
|
828
|
-
const icon
|
|
854
|
+
const icon = isComponentType(props.icon) ? /* @__PURE__ */ jsx(props.icon, { size: ui.sizes.icon.md }) : /* @__PURE__ */ jsx(ThemeIcon, {
|
|
829
855
|
w: 24,
|
|
830
856
|
variant: "transparent",
|
|
831
857
|
size: "sm",
|
|
@@ -834,9 +860,9 @@ const ActionButton = (_props) => {
|
|
|
834
860
|
children: props.icon
|
|
835
861
|
});
|
|
836
862
|
if (!props.children) {
|
|
837
|
-
restProps.children = Children.only(icon
|
|
863
|
+
restProps.children = Children.only(icon);
|
|
838
864
|
restProps.px ??= "xs";
|
|
839
|
-
} else restProps.leftSection = icon
|
|
865
|
+
} else restProps.leftSection = icon;
|
|
840
866
|
}
|
|
841
867
|
if (props.leftSection && !props.children) restProps.px ??= "xs";
|
|
842
868
|
if (props.textVisibleFrom) {
|
|
@@ -1050,10 +1076,13 @@ const ActionHrefButton = (props) => {
|
|
|
1050
1076
|
//#endregion
|
|
1051
1077
|
//#region ../../src/core/components/buttons/BurgerButton.tsx
|
|
1052
1078
|
const BurgerButton = (props) => {
|
|
1053
|
-
const [
|
|
1079
|
+
const [sidebar, setSidebar] = useStore(alephaSidebarAtom);
|
|
1054
1080
|
return /* @__PURE__ */ jsx(Burger, {
|
|
1055
|
-
opened,
|
|
1056
|
-
onClick: () =>
|
|
1081
|
+
opened: sidebar.opened,
|
|
1082
|
+
onClick: () => setSidebar({
|
|
1083
|
+
...sidebar,
|
|
1084
|
+
opened: !sidebar.opened
|
|
1085
|
+
}),
|
|
1057
1086
|
hiddenFrom: "sm",
|
|
1058
1087
|
size: "sm",
|
|
1059
1088
|
...props
|
|
@@ -1152,14 +1181,27 @@ var LanguageButton_default = LanguageButton;
|
|
|
1152
1181
|
//#endregion
|
|
1153
1182
|
//#region ../../src/core/components/buttons/OmnibarButton.tsx
|
|
1154
1183
|
const OmnibarButton = (props) => {
|
|
1184
|
+
const os = useOs();
|
|
1185
|
+
const shortcut = os === "macos" || os === "ios" ? "⌘" : "Ctrl";
|
|
1186
|
+
if (props.collapsed) return /* @__PURE__ */ jsx(ActionButton_default, {
|
|
1187
|
+
variant: "subtle",
|
|
1188
|
+
onClick: spotlight.open,
|
|
1189
|
+
radius: "md",
|
|
1190
|
+
icon: /* @__PURE__ */ jsx(IconSearch, { size: 16 }),
|
|
1191
|
+
tooltip: {
|
|
1192
|
+
label: "Search",
|
|
1193
|
+
position: "right"
|
|
1194
|
+
},
|
|
1195
|
+
...props.actionProps
|
|
1196
|
+
});
|
|
1155
1197
|
return /* @__PURE__ */ jsx(ActionButton_default, {
|
|
1156
1198
|
variant: "default",
|
|
1157
1199
|
onClick: spotlight.open,
|
|
1158
1200
|
justify: "space-between",
|
|
1159
|
-
rightSection: /* @__PURE__ */
|
|
1201
|
+
rightSection: /* @__PURE__ */ jsxs(Kbd, {
|
|
1160
1202
|
visibleFrom: "sm",
|
|
1161
1203
|
size: "sm",
|
|
1162
|
-
children: "
|
|
1204
|
+
children: [/* @__PURE__ */ jsx(ClientOnly, { children: shortcut }), "+K"]
|
|
1163
1205
|
}),
|
|
1164
1206
|
radius: "md",
|
|
1165
1207
|
...props.actionProps,
|
|
@@ -1201,6 +1243,32 @@ const ThemeButton = (props) => {
|
|
|
1201
1243
|
};
|
|
1202
1244
|
var ThemeButton_default = ThemeButton;
|
|
1203
1245
|
|
|
1246
|
+
//#endregion
|
|
1247
|
+
//#region ../../src/core/components/buttons/ToggleSidebarButton.tsx
|
|
1248
|
+
const ToggleSidebarButton = (props) => {
|
|
1249
|
+
const [sidebar, setSidebar] = useStore(alephaSidebarAtom);
|
|
1250
|
+
return /* @__PURE__ */ jsx(ActionButton_default, {
|
|
1251
|
+
icon: sidebar.collapsed ? /* @__PURE__ */ jsx(IconLayoutSidebarRightCollapse, {}) : /* @__PURE__ */ jsx(IconLayoutSidebarLeftCollapse, {}),
|
|
1252
|
+
visibleFrom: "sm",
|
|
1253
|
+
variant: "subtle",
|
|
1254
|
+
size: "md",
|
|
1255
|
+
onClick: () => {
|
|
1256
|
+
const expanding = sidebar.collapsed;
|
|
1257
|
+
setSidebar({
|
|
1258
|
+
...sidebar,
|
|
1259
|
+
collapsed: !sidebar.collapsed,
|
|
1260
|
+
width: expanding ? sidebar.defaultWidth : sidebar.width
|
|
1261
|
+
});
|
|
1262
|
+
},
|
|
1263
|
+
tooltip: {
|
|
1264
|
+
position: "right",
|
|
1265
|
+
label: sidebar.collapsed ? "Show sidebar" : "Hide sidebar"
|
|
1266
|
+
},
|
|
1267
|
+
...props
|
|
1268
|
+
});
|
|
1269
|
+
};
|
|
1270
|
+
var ToggleSidebarButton_default = ToggleSidebarButton;
|
|
1271
|
+
|
|
1204
1272
|
//#endregion
|
|
1205
1273
|
//#region ../../src/core/utils/icons.tsx
|
|
1206
1274
|
/**
|
|
@@ -1878,9 +1946,9 @@ const ControlQueryBuilder = ({ schema, value = "", onChange, placeholder = "Ente
|
|
|
1878
1946
|
const inputRef = useRef(null);
|
|
1879
1947
|
const fields = schema ? extractSchemaFields(schema) : [];
|
|
1880
1948
|
const [error, setError] = useState(null);
|
|
1881
|
-
const isValid = (value
|
|
1949
|
+
const isValid = (value) => {
|
|
1882
1950
|
try {
|
|
1883
|
-
parseQueryString(value
|
|
1951
|
+
parseQueryString(value.trim());
|
|
1884
1952
|
} catch (e) {
|
|
1885
1953
|
setError(e.message);
|
|
1886
1954
|
return false;
|
|
@@ -2184,7 +2252,7 @@ const ControlSelect = (props) => {
|
|
|
2184
2252
|
});
|
|
2185
2253
|
}
|
|
2186
2254
|
if (isArray && itemsEnum || props.multi) {
|
|
2187
|
-
const data
|
|
2255
|
+
const data = itemsEnum?.map((value) => ({
|
|
2188
2256
|
value,
|
|
2189
2257
|
label: value
|
|
2190
2258
|
})) || [];
|
|
@@ -2193,7 +2261,7 @@ const ControlSelect = (props) => {
|
|
|
2193
2261
|
...inputProps,
|
|
2194
2262
|
id,
|
|
2195
2263
|
leftSection: icon,
|
|
2196
|
-
data
|
|
2264
|
+
data,
|
|
2197
2265
|
defaultValue: Array.isArray(props.input.props.defaultValue) ? props.input.props.defaultValue : [],
|
|
2198
2266
|
onChange: (value) => {
|
|
2199
2267
|
props.input.set(value);
|
|
@@ -2449,7 +2517,7 @@ var Control_default = Control;
|
|
|
2449
2517
|
* @example
|
|
2450
2518
|
* ```tsx
|
|
2451
2519
|
* import { t } from "alepha";
|
|
2452
|
-
* import { useForm } from "
|
|
2520
|
+
* import { useForm } from "alepha/react/form";
|
|
2453
2521
|
* import { TypeForm } from "@alepha/ui";
|
|
2454
2522
|
*
|
|
2455
2523
|
* const form = useForm({
|
|
@@ -2616,44 +2684,35 @@ const AppBar = (props) => {
|
|
|
2616
2684
|
};
|
|
2617
2685
|
var AppBar_default = AppBar;
|
|
2618
2686
|
|
|
2619
|
-
//#endregion
|
|
2620
|
-
//#region ../../src/core/components/buttons/ToggleSidebarButton.tsx
|
|
2621
|
-
const ToggleSidebarButton = () => {
|
|
2622
|
-
const [collapsed, setCollapsed] = useStore("alepha.ui.sidebar.collapsed");
|
|
2623
|
-
return /* @__PURE__ */ jsx(Flex$1, { children: /* @__PURE__ */ jsx(ActionButton_default, {
|
|
2624
|
-
icon: collapsed ? /* @__PURE__ */ jsx(IconLayoutSidebarRightCollapse, {}) : /* @__PURE__ */ jsx(IconLayoutSidebarLeftCollapse, {}),
|
|
2625
|
-
variant: "subtle",
|
|
2626
|
-
size: "md",
|
|
2627
|
-
onClick: () => setCollapsed(!collapsed),
|
|
2628
|
-
tooltip: {
|
|
2629
|
-
position: "right",
|
|
2630
|
-
label: collapsed ? "Show sidebar" : "Hide sidebar"
|
|
2631
|
-
}
|
|
2632
|
-
}) });
|
|
2633
|
-
};
|
|
2634
|
-
var ToggleSidebarButton_default = ToggleSidebarButton;
|
|
2635
|
-
|
|
2636
2687
|
//#endregion
|
|
2637
2688
|
//#region ../../src/core/components/layout/Sidebar.tsx
|
|
2638
2689
|
const Sidebar = (props) => {
|
|
2639
2690
|
const router = useRouter();
|
|
2640
2691
|
const { onItemClick } = props;
|
|
2692
|
+
const divider = (key) => {
|
|
2693
|
+
return /* @__PURE__ */ jsx(Flex$1, {
|
|
2694
|
+
h: 1,
|
|
2695
|
+
bg: "var(--alepha-border)",
|
|
2696
|
+
my: "xs",
|
|
2697
|
+
mx: props.collapsed ? 0 : "sm"
|
|
2698
|
+
}, key);
|
|
2699
|
+
};
|
|
2641
2700
|
const renderNode = (item, key) => {
|
|
2642
2701
|
if ("type" in item) {
|
|
2643
|
-
if (item.type === "spacer")
|
|
2644
|
-
|
|
2645
|
-
h:
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2702
|
+
if (item.type === "spacer") {
|
|
2703
|
+
if (props.collapsed) return null;
|
|
2704
|
+
return /* @__PURE__ */ jsx(Flex$1, { h: 16 }, key);
|
|
2705
|
+
}
|
|
2706
|
+
if (item.type === "divider") return divider(key);
|
|
2707
|
+
if (item.type === "search") return /* @__PURE__ */ jsx(Flex$1, {
|
|
2708
|
+
mb: "xs",
|
|
2709
|
+
children: /* @__PURE__ */ jsx(OmnibarButton_default, { collapsed: props.collapsed })
|
|
2649
2710
|
}, key);
|
|
2650
|
-
if (item.type === "search") return /* @__PURE__ */ jsx(OmnibarButton_default, { collapsed: props.collapsed }, key);
|
|
2651
2711
|
if (item.type === "toggle") return /* @__PURE__ */ jsx(ToggleSidebarButton_default, {}, key);
|
|
2652
2712
|
if (item.type === "section") {
|
|
2653
|
-
if (props.collapsed) return;
|
|
2713
|
+
if (props.collapsed) return divider(key);
|
|
2654
2714
|
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
2655
2715
|
mt: "md",
|
|
2656
|
-
mb: "xs",
|
|
2657
2716
|
align: "center",
|
|
2658
2717
|
gap: "xs",
|
|
2659
2718
|
children: [renderIcon(item.icon), /* @__PURE__ */ jsx(Text$1, {
|
|
@@ -2662,7 +2721,7 @@ const Sidebar = (props) => {
|
|
|
2662
2721
|
tt: "uppercase",
|
|
2663
2722
|
fw: "bold",
|
|
2664
2723
|
children: item.label
|
|
2665
|
-
}
|
|
2724
|
+
})]
|
|
2666
2725
|
}, key);
|
|
2667
2726
|
}
|
|
2668
2727
|
}
|
|
@@ -2698,13 +2757,13 @@ const Sidebar = (props) => {
|
|
|
2698
2757
|
return [];
|
|
2699
2758
|
};
|
|
2700
2759
|
const padding = "md";
|
|
2701
|
-
const gap = props.items ? props.gap : "xs";
|
|
2702
|
-
const menu = useMemo(() => getSidebarNodes(), []);
|
|
2760
|
+
const gap = props.items ? props.gap ?? 2 : "xs";
|
|
2761
|
+
const menu = useMemo(() => getSidebarNodes(), [props.items, props.autoPopulateMenu]);
|
|
2703
2762
|
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
2704
2763
|
flex: 1,
|
|
2705
2764
|
py: padding,
|
|
2706
2765
|
direction: "column",
|
|
2707
|
-
className: "
|
|
2766
|
+
className: "alepha-sidebar-scroll",
|
|
2708
2767
|
...props.flexProps,
|
|
2709
2768
|
children: [
|
|
2710
2769
|
/* @__PURE__ */ jsx(Flex$1, {
|
|
@@ -2718,7 +2777,7 @@ const Sidebar = (props) => {
|
|
|
2718
2777
|
px: padding,
|
|
2719
2778
|
direction: "column",
|
|
2720
2779
|
flex: 1,
|
|
2721
|
-
className: "
|
|
2780
|
+
className: "alepha-sidebar-scroll",
|
|
2722
2781
|
children: menu.filter((it) => !it.position).map((item, index) => renderNode(item, index))
|
|
2723
2782
|
}),
|
|
2724
2783
|
/* @__PURE__ */ jsx(Flex$1, {
|
|
@@ -2734,9 +2793,9 @@ const SidebarItem = (props) => {
|
|
|
2734
2793
|
const { item, level } = props;
|
|
2735
2794
|
const maxLevel = 2;
|
|
2736
2795
|
const router = useRouter();
|
|
2737
|
-
const isActive = useCallback((item
|
|
2738
|
-
if (!item
|
|
2739
|
-
for (const child of item
|
|
2796
|
+
const isActive = useCallback((item) => {
|
|
2797
|
+
if (!item.children) return false;
|
|
2798
|
+
for (const child of item.children) {
|
|
2740
2799
|
if (child.href) {
|
|
2741
2800
|
if (router.isActive(child.href)) return true;
|
|
2742
2801
|
}
|
|
@@ -2809,31 +2868,15 @@ const SidebarItem = (props) => {
|
|
|
2809
2868
|
};
|
|
2810
2869
|
const SidebarCollapsedItem = (props) => {
|
|
2811
2870
|
const { item, level } = props;
|
|
2812
|
-
const
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
for (const child of item$1.children) {
|
|
2816
|
-
if (child.href) {
|
|
2817
|
-
if (router.isActive(child.href)) return true;
|
|
2818
|
-
}
|
|
2819
|
-
if (isActive(child)) return true;
|
|
2820
|
-
}
|
|
2821
|
-
return false;
|
|
2822
|
-
}, []);
|
|
2823
|
-
const [isOpen, setIsOpen] = useState(isActive(item));
|
|
2824
|
-
const handleItemClick = (e) => {
|
|
2825
|
-
if (!props.item.target) e.preventDefault();
|
|
2826
|
-
if (item.children && item.children.length > 0) setIsOpen(!isOpen);
|
|
2827
|
-
else {
|
|
2828
|
-
props.onItemClick?.(item);
|
|
2829
|
-
item.onClick?.();
|
|
2830
|
-
}
|
|
2871
|
+
const handleItemClick = () => {
|
|
2872
|
+
props.onItemClick?.(item);
|
|
2873
|
+
item.onClick?.();
|
|
2831
2874
|
};
|
|
2832
2875
|
return /* @__PURE__ */ jsx(ActionButton_default, {
|
|
2833
2876
|
size: props.item.theme?.size ?? props.theme.button?.size ?? (level === 0 ? "sm" : "xs"),
|
|
2834
2877
|
variant: "subtle",
|
|
2835
2878
|
variantActive: "default",
|
|
2836
|
-
tooltip:
|
|
2879
|
+
tooltip: {
|
|
2837
2880
|
label: item.label,
|
|
2838
2881
|
position: "right"
|
|
2839
2882
|
},
|
|
@@ -2842,16 +2885,6 @@ const SidebarCollapsedItem = (props) => {
|
|
|
2842
2885
|
icon: renderIcon(item.icon) ?? /* @__PURE__ */ jsx(IconSquareRounded, {}),
|
|
2843
2886
|
href: props.item.href,
|
|
2844
2887
|
target: props.item.target,
|
|
2845
|
-
menu: item.children ? {
|
|
2846
|
-
position: "right",
|
|
2847
|
-
on: "hover",
|
|
2848
|
-
items: item.children.filter((child) => !child.can || child.can()).map((child) => ({
|
|
2849
|
-
label: child.label,
|
|
2850
|
-
href: child.href,
|
|
2851
|
-
icon: renderIcon(child.icon),
|
|
2852
|
-
children: child.children?.filter((c) => !c.can || c.can())
|
|
2853
|
-
}))
|
|
2854
|
-
} : void 0,
|
|
2855
2888
|
...props.item.actionProps
|
|
2856
2889
|
});
|
|
2857
2890
|
};
|
|
@@ -2860,8 +2893,129 @@ const SidebarCollapsedItem = (props) => {
|
|
|
2860
2893
|
//#region ../../src/core/components/layout/AdminShell.tsx
|
|
2861
2894
|
const AdminShell = (props) => {
|
|
2862
2895
|
const router = useRouter();
|
|
2863
|
-
const [
|
|
2864
|
-
const
|
|
2896
|
+
const [sidebar, setSidebar] = useStore(alephaSidebarAtom);
|
|
2897
|
+
const { opened, collapsed } = sidebar;
|
|
2898
|
+
useEffect(() => {
|
|
2899
|
+
if (props.sidebarProps?.collapsed !== void 0) setSidebar({
|
|
2900
|
+
...sidebar,
|
|
2901
|
+
collapsed: props.sidebarProps.collapsed
|
|
2902
|
+
});
|
|
2903
|
+
}, []);
|
|
2904
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
2905
|
+
const [isHovering, setIsHovering] = useState(false);
|
|
2906
|
+
const [collapseEffect, setCollapseEffect] = useState({
|
|
2907
|
+
offset: 0,
|
|
2908
|
+
opacity: 1
|
|
2909
|
+
});
|
|
2910
|
+
const resizeRef = useRef(null);
|
|
2911
|
+
const { collapsedWidth, collapseThreshold, maxWidth, hoverDelay, defaultWidth } = sidebar;
|
|
2912
|
+
const handleResizeStart = useCallback((e) => {
|
|
2913
|
+
if (!props.resizable) return;
|
|
2914
|
+
e.preventDefault();
|
|
2915
|
+
if (collapsed) {
|
|
2916
|
+
setSidebar({
|
|
2917
|
+
...sidebar,
|
|
2918
|
+
collapsed: false,
|
|
2919
|
+
width: defaultWidth
|
|
2920
|
+
});
|
|
2921
|
+
setIsResizing(true);
|
|
2922
|
+
resizeRef.current = {
|
|
2923
|
+
startX: e.clientX,
|
|
2924
|
+
startWidth: defaultWidth
|
|
2925
|
+
};
|
|
2926
|
+
} else {
|
|
2927
|
+
setIsResizing(true);
|
|
2928
|
+
resizeRef.current = {
|
|
2929
|
+
startX: e.clientX,
|
|
2930
|
+
startWidth: sidebar.width
|
|
2931
|
+
};
|
|
2932
|
+
}
|
|
2933
|
+
}, [
|
|
2934
|
+
props.resizable,
|
|
2935
|
+
collapsed,
|
|
2936
|
+
sidebar,
|
|
2937
|
+
setSidebar,
|
|
2938
|
+
defaultWidth
|
|
2939
|
+
]);
|
|
2940
|
+
useEffect(() => {
|
|
2941
|
+
if (!isResizing) return;
|
|
2942
|
+
const handleMouseMove = (e) => {
|
|
2943
|
+
if (!resizeRef.current) return;
|
|
2944
|
+
const delta = e.clientX - resizeRef.current.startX;
|
|
2945
|
+
const rawWidth = resizeRef.current.startWidth + delta;
|
|
2946
|
+
const newWidth = Math.min(Math.max(rawWidth, collapsedWidth), maxWidth);
|
|
2947
|
+
if (rawWidth < collapseThreshold) {
|
|
2948
|
+
const progress = Math.max(0, (collapseThreshold - rawWidth) / collapseThreshold);
|
|
2949
|
+
setCollapseEffect({
|
|
2950
|
+
offset: -progress * collapsedWidth,
|
|
2951
|
+
opacity: 1 - progress * .7
|
|
2952
|
+
});
|
|
2953
|
+
setSidebar({
|
|
2954
|
+
...sidebar,
|
|
2955
|
+
width: collapseThreshold,
|
|
2956
|
+
collapsed: false
|
|
2957
|
+
});
|
|
2958
|
+
} else {
|
|
2959
|
+
setCollapseEffect({
|
|
2960
|
+
offset: 0,
|
|
2961
|
+
opacity: 1
|
|
2962
|
+
});
|
|
2963
|
+
setSidebar({
|
|
2964
|
+
...sidebar,
|
|
2965
|
+
width: newWidth,
|
|
2966
|
+
collapsed: false
|
|
2967
|
+
});
|
|
2968
|
+
}
|
|
2969
|
+
};
|
|
2970
|
+
const handleMouseUp = () => {
|
|
2971
|
+
if (collapseEffect.offset < 0) setSidebar({
|
|
2972
|
+
...sidebar,
|
|
2973
|
+
collapsed: true
|
|
2974
|
+
});
|
|
2975
|
+
setCollapseEffect({
|
|
2976
|
+
offset: 0,
|
|
2977
|
+
opacity: 1
|
|
2978
|
+
});
|
|
2979
|
+
setIsResizing(false);
|
|
2980
|
+
resizeRef.current = null;
|
|
2981
|
+
};
|
|
2982
|
+
document.addEventListener("mousemove", handleMouseMove);
|
|
2983
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
2984
|
+
return () => {
|
|
2985
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
2986
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
2987
|
+
};
|
|
2988
|
+
}, [
|
|
2989
|
+
isResizing,
|
|
2990
|
+
sidebar,
|
|
2991
|
+
setSidebar,
|
|
2992
|
+
collapsedWidth,
|
|
2993
|
+
maxWidth,
|
|
2994
|
+
collapseThreshold,
|
|
2995
|
+
collapseEffect.offset
|
|
2996
|
+
]);
|
|
2997
|
+
const hoverTimeoutRef = useRef(null);
|
|
2998
|
+
const handleNavbarMouseEnter = useCallback(() => {
|
|
2999
|
+
if (collapsed) hoverTimeoutRef.current = setTimeout(() => {
|
|
3000
|
+
setIsHovering(true);
|
|
3001
|
+
}, hoverDelay);
|
|
3002
|
+
}, [collapsed, hoverDelay]);
|
|
3003
|
+
const handleNavbarMouseLeave = useCallback(() => {
|
|
3004
|
+
if (hoverTimeoutRef.current) {
|
|
3005
|
+
clearTimeout(hoverTimeoutRef.current);
|
|
3006
|
+
hoverTimeoutRef.current = null;
|
|
3007
|
+
}
|
|
3008
|
+
setIsHovering(false);
|
|
3009
|
+
}, []);
|
|
3010
|
+
useEffect(() => {
|
|
3011
|
+
if (collapsed) {
|
|
3012
|
+
setIsHovering(false);
|
|
3013
|
+
if (hoverTimeoutRef.current) {
|
|
3014
|
+
clearTimeout(hoverTimeoutRef.current);
|
|
3015
|
+
hoverTimeoutRef.current = null;
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
}, [collapsed]);
|
|
2865
3019
|
const shouldShowSidebar = () => {
|
|
2866
3020
|
if (props.noSidebarWhen?.paths) {
|
|
2867
3021
|
for (const path of props.noSidebarWhen.paths) if (router.isActive(path, { startWith: true })) return false;
|
|
@@ -2874,9 +3028,12 @@ const AdminShell = (props) => {
|
|
|
2874
3028
|
setShowSidebar(shouldShowSidebar());
|
|
2875
3029
|
},
|
|
2876
3030
|
"react:transition:begin": () => {
|
|
2877
|
-
|
|
3031
|
+
setSidebar({
|
|
3032
|
+
...sidebar,
|
|
3033
|
+
opened: false
|
|
3034
|
+
});
|
|
2878
3035
|
}
|
|
2879
|
-
}, []);
|
|
3036
|
+
}, [sidebar]);
|
|
2880
3037
|
const defaultAppBarItems = [{
|
|
2881
3038
|
position: "left",
|
|
2882
3039
|
type: "burger"
|
|
@@ -2885,14 +3042,19 @@ const AdminShell = (props) => {
|
|
|
2885
3042
|
const hasAppBar = hasSidebar || props.appBarProps || props.header;
|
|
2886
3043
|
const headerHeight = hasAppBar ? 60 : 0;
|
|
2887
3044
|
const footerHeight = props.footer ? 24 : 0;
|
|
2888
|
-
const
|
|
3045
|
+
const expandedWidth = Math.max(sidebar.width, collapsedWidth);
|
|
3046
|
+
const isExpandedByHover = collapsed && isHovering;
|
|
3047
|
+
const effectiveCollapsed = collapsed && !isHovering;
|
|
3048
|
+
const hoverWidth = Math.max(defaultWidth, collapsedWidth);
|
|
3049
|
+
const sidebarWidth = hasSidebar ? effectiveCollapsed ? collapsedWidth : isExpandedByHover ? hoverWidth : expandedWidth : 0;
|
|
3050
|
+
const canResize = props.resizable && !collapsed;
|
|
2889
3051
|
return /* @__PURE__ */ jsxs(AppShell, {
|
|
2890
3052
|
w: "100%",
|
|
2891
3053
|
flex: 1,
|
|
2892
3054
|
padding: "md",
|
|
2893
3055
|
header: hasAppBar ? { height: 60 } : void 0,
|
|
2894
3056
|
navbar: hasSidebar ? {
|
|
2895
|
-
width:
|
|
3057
|
+
width: effectiveCollapsed ? { base: collapsedWidth } : isExpandedByHover ? { base: hoverWidth } : { base: expandedWidth },
|
|
2896
3058
|
breakpoint: "sm",
|
|
2897
3059
|
collapsed: { mobile: !opened }
|
|
2898
3060
|
} : void 0,
|
|
@@ -2907,13 +3069,32 @@ const AdminShell = (props) => {
|
|
|
2907
3069
|
...props.appBarProps
|
|
2908
3070
|
})
|
|
2909
3071
|
}),
|
|
2910
|
-
hasSidebar && /* @__PURE__ */
|
|
3072
|
+
hasSidebar && /* @__PURE__ */ jsxs(AppShell.Navbar, {
|
|
2911
3073
|
bg: ui.colors.surface,
|
|
3074
|
+
className: "alepha-sidebar-navbar",
|
|
3075
|
+
"data-resizing": isResizing,
|
|
3076
|
+
onMouseEnter: handleNavbarMouseEnter,
|
|
3077
|
+
onMouseLeave: handleNavbarMouseLeave,
|
|
3078
|
+
style: {
|
|
3079
|
+
transform: collapseEffect.offset ? `translateX(${collapseEffect.offset}px)` : void 0,
|
|
3080
|
+
opacity: collapseEffect.opacity
|
|
3081
|
+
},
|
|
2912
3082
|
...props.appShellNavbarProps,
|
|
2913
|
-
children: /* @__PURE__ */ jsx(Sidebar, {
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
})
|
|
3083
|
+
children: [/* @__PURE__ */ jsx(Sidebar, {
|
|
3084
|
+
...props.sidebarProps ?? {},
|
|
3085
|
+
collapsed: effectiveCollapsed
|
|
3086
|
+
}), (canResize || isExpandedByHover) && /* @__PURE__ */ jsx(Flex$1, {
|
|
3087
|
+
pos: "absolute",
|
|
3088
|
+
right: -2,
|
|
3089
|
+
top: 0,
|
|
3090
|
+
bottom: 0,
|
|
3091
|
+
w: 4,
|
|
3092
|
+
style: {
|
|
3093
|
+
cursor: "col-resize",
|
|
3094
|
+
userSelect: "none"
|
|
3095
|
+
},
|
|
3096
|
+
onMouseDown: handleResizeStart
|
|
3097
|
+
})]
|
|
2917
3098
|
}),
|
|
2918
3099
|
/* @__PURE__ */ jsx(AppShell.Main, {
|
|
2919
3100
|
pl: sidebarWidth,
|
|
@@ -2923,6 +3104,8 @@ const AdminShell = (props) => {
|
|
|
2923
3104
|
display: "flex",
|
|
2924
3105
|
flex: 1,
|
|
2925
3106
|
style: { flexDirection: "column" },
|
|
3107
|
+
className: "alepha-sidebar-main",
|
|
3108
|
+
"data-resizing": isResizing,
|
|
2926
3109
|
...props.appShellMainProps,
|
|
2927
3110
|
children: props.children ?? /* @__PURE__ */ jsx(NestedView, {})
|
|
2928
3111
|
}),
|
|
@@ -3618,7 +3801,25 @@ const useDialog = () => {
|
|
|
3618
3801
|
//#endregion
|
|
3619
3802
|
//#region ../../src/core/index.ts
|
|
3620
3803
|
/**
|
|
3621
|
-
*
|
|
3804
|
+
* | type | quality | stability |
|
|
3805
|
+
* |------|---------|-----------|
|
|
3806
|
+
* | frontend | rare | experimental |
|
|
3807
|
+
*
|
|
3808
|
+
* Core UI components based on Mantine UI v8.
|
|
3809
|
+
*
|
|
3810
|
+
* **Features:**
|
|
3811
|
+
* - Mantine integration with theme support
|
|
3812
|
+
* - ActionButton, BurgerButton, ClipboardButton, DarkModeButton, LanguageButton, ThemeButton
|
|
3813
|
+
* - AlertDialog, ConfirmDialog, PromptDialog
|
|
3814
|
+
* - Form controls: Control, ControlArray, ControlDate, ControlNumber, ControlObject, ControlSelect, ControlQueryBuilder
|
|
3815
|
+
* - TypeForm for automatic form generation from TypeBox schemas
|
|
3816
|
+
* - AdminShell layout component
|
|
3817
|
+
* - AppBar with configurable elements
|
|
3818
|
+
* - Sidebar navigation with sections and menu items
|
|
3819
|
+
* - Omnibar for command palette / search
|
|
3820
|
+
* - DataTable with filtering, sorting, pagination
|
|
3821
|
+
* - Toast notifications
|
|
3822
|
+
* - Theme system with dark mode
|
|
3622
3823
|
*
|
|
3623
3824
|
* @module alepha.ui
|
|
3624
3825
|
*/
|
|
@@ -3639,7 +3840,21 @@ const AlephaUI = $module({
|
|
|
3639
3840
|
alepha.with(ToastService);
|
|
3640
3841
|
}
|
|
3641
3842
|
});
|
|
3843
|
+
/**
|
|
3844
|
+
* Register UI components and get the RootRouter instance.
|
|
3845
|
+
*/
|
|
3846
|
+
const $ui = (opts = {}) => {
|
|
3847
|
+
const { alepha } = $context();
|
|
3848
|
+
/**
|
|
3849
|
+
* If multi ui, should we have N themes ? or one $atom theme but with change based on current ui app ?
|
|
3850
|
+
*
|
|
3851
|
+
* App (theme=T1) -> Admin (theme=T2) ?
|
|
3852
|
+
*
|
|
3853
|
+
* > It can be done with onLeave()/onEnter() of the RootRouter to set the theme atom.
|
|
3854
|
+
*/
|
|
3855
|
+
return alepha.inject(RootRouter);
|
|
3856
|
+
};
|
|
3642
3857
|
|
|
3643
3858
|
//#endregion
|
|
3644
|
-
export { ActionButton_default as ActionButton, AdminShell_default as AdminShell, AlephaMantineProvider_default as AlephaMantineProvider, AlephaUI, AlertDialog_default as AlertDialog, AppBar_default as AppBar, BurgerButton_default as BurgerButton, ClipboardButton_default as ClipboardButton, ConfirmDialog_default as ConfirmDialog, Control_default as Control, ControlArray_default as ControlArray, ControlDate_default as ControlDate, ControlNumber_default as ControlNumber, ControlObject_default as ControlObject, ControlQueryBuilder_default as ControlQueryBuilder, ControlSelect_default as ControlSelect, DarkModeButton_default as DarkModeButton, DataTable_default as DataTable, DialogService, Flex, LanguageButton_default as LanguageButton, OPERATOR_INFO, Omnibar_default as Omnibar, OmnibarButton_default as OmnibarButton, PromptDialog_default as PromptDialog, RootRouter, Sidebar, Text, ThemeButton_default as ThemeButton, ThemeProvider, ToastService, TypeForm_default as TypeForm, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, ui, useDialog, useToast };
|
|
3859
|
+
export { $ui, ActionButton_default as ActionButton, AdminShell_default as AdminShell, AlephaMantineProvider_default as AlephaMantineProvider, AlephaUI, AlertDialog_default as AlertDialog, AppBar_default as AppBar, BurgerButton_default as BurgerButton, ClipboardButton_default as ClipboardButton, ConfirmDialog_default as ConfirmDialog, Control_default as Control, ControlArray_default as ControlArray, ControlDate_default as ControlDate, ControlNumber_default as ControlNumber, ControlObject_default as ControlObject, ControlQueryBuilder_default as ControlQueryBuilder, ControlSelect_default as ControlSelect, DarkModeButton_default as DarkModeButton, DataTable_default as DataTable, DialogService, Flex, LanguageButton_default as LanguageButton, OPERATOR_INFO, Omnibar_default as Omnibar, OmnibarButton_default as OmnibarButton, PromptDialog_default as PromptDialog, RootRouter, Sidebar, Text, ThemeButton_default as ThemeButton, ThemeProvider, ToastService, ToggleSidebarButton_default as ToggleSidebarButton, TypeForm_default as TypeForm, alephaSidebarAtom, alephaThemeAtom, alephaThemeListAtom, capitalize, defaultTheme, extractSchemaFields, getDefaultIcon, getOperatorsForField, midnightTheme, prettyName, ui, useDialog, useToast };
|
|
3645
3860
|
//# sourceMappingURL=index.js.map
|