@pallasoft/ps-internal-components 1.5.0 → 1.6.0
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/components/ps-alert-dialog-content.js +1 -1
- package/dist/components/ps-alert-dialog-overlay.js +1 -1
- package/dist/components/ps-app-sidebar.d.ts +2 -0
- package/dist/components/ps-app-sidebar.js +14 -0
- package/dist/components/ps-dialog-content.js +1 -1
- package/dist/components/ps-dialog-overlay.js +1 -1
- package/dist/components/ps-sheet-overlay.js +1 -1
- package/dist/components/ps-sidebar-content.d.ts +3 -0
- package/dist/components/ps-sidebar-content.js +41 -0
- package/dist/components/ps-sidebar-footer.d.ts +3 -0
- package/dist/components/ps-sidebar-footer.js +41 -0
- package/dist/components/ps-sidebar-group-content.d.ts +3 -0
- package/dist/components/ps-sidebar-group-content.js +41 -0
- package/dist/components/ps-sidebar-group-label.d.ts +3 -0
- package/dist/components/ps-sidebar-group-label.js +45 -0
- package/dist/components/ps-sidebar-group.d.ts +3 -0
- package/dist/components/ps-sidebar-group.js +41 -0
- package/dist/components/ps-sidebar-header.d.ts +3 -0
- package/dist/components/ps-sidebar-header.js +41 -0
- package/dist/components/ps-sidebar-inset.d.ts +3 -0
- package/dist/components/ps-sidebar-inset.js +41 -0
- package/dist/components/ps-sidebar-layout.d.ts +3 -0
- package/dist/components/ps-sidebar-layout.js +58 -0
- package/dist/components/ps-sidebar-menu-action.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-action.js +46 -0
- package/dist/components/ps-sidebar-menu-badge.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-badge.js +41 -0
- package/dist/components/ps-sidebar-menu-button.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-button.js +56 -0
- package/dist/components/ps-sidebar-menu-item.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-item.js +41 -0
- package/dist/components/ps-sidebar-menu-sub-button.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-sub-button.js +45 -0
- package/dist/components/ps-sidebar-menu-sub-item.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-sub-item.js +41 -0
- package/dist/components/ps-sidebar-menu-sub.d.ts +3 -0
- package/dist/components/ps-sidebar-menu-sub.js +41 -0
- package/dist/components/ps-sidebar-menu.d.ts +3 -0
- package/dist/components/ps-sidebar-menu.js +41 -0
- package/dist/components/ps-sidebar-nav-groups.d.ts +2 -0
- package/dist/components/ps-sidebar-nav-groups.js +19 -0
- package/dist/components/ps-sidebar-provider.d.ts +3 -0
- package/dist/components/ps-sidebar-provider.js +89 -0
- package/dist/components/ps-sidebar-rail.d.ts +3 -0
- package/dist/components/ps-sidebar-rail.js +46 -0
- package/dist/components/ps-sidebar-separator.d.ts +3 -0
- package/dist/components/ps-sidebar-separator.js +42 -0
- package/dist/components/ps-sidebar-trigger.d.ts +3 -0
- package/dist/components/ps-sidebar-trigger.js +51 -0
- package/dist/components/ps-sidebar-user-menu.d.ts +2 -0
- package/dist/components/ps-sidebar-user-menu.js +26 -0
- package/dist/components/ps-sidebar-workspace-switcher.d.ts +2 -0
- package/dist/components/ps-sidebar-workspace-switcher.js +41 -0
- package/dist/components/ps-sidebar.d.ts +3 -0
- package/dist/components/ps-sidebar.js +66 -0
- package/dist/constants/ps-app-sidebar-config.d.ts +7 -0
- package/dist/constants/ps-app-sidebar-config.js +10 -0
- package/dist/constants/ps-sidebar-config.d.ts +14 -0
- package/dist/constants/ps-sidebar-config.js +17 -0
- package/dist/constants/ps-sidebar-menu-button-variants.d.ts +4 -0
- package/dist/constants/ps-sidebar-menu-button-variants.js +21 -0
- package/dist/constants/ps-sidebar-state.d.ts +4 -0
- package/dist/constants/ps-sidebar-state.js +8 -0
- package/dist/contexts/ps-sidebar-context.d.ts +3 -0
- package/dist/contexts/ps-sidebar-context.js +38 -0
- package/dist/esm/components/ps-alert-dialog-content.js +1 -1
- package/dist/esm/components/ps-alert-dialog-overlay.js +1 -1
- package/dist/esm/components/ps-app-sidebar.js +10 -0
- package/dist/esm/components/ps-dialog-content.js +1 -1
- package/dist/esm/components/ps-dialog-overlay.js +1 -1
- package/dist/esm/components/ps-sheet-overlay.js +1 -1
- package/dist/esm/components/ps-sidebar-content.js +5 -0
- package/dist/esm/components/ps-sidebar-footer.js +5 -0
- package/dist/esm/components/ps-sidebar-group-content.js +5 -0
- package/dist/esm/components/ps-sidebar-group-label.js +9 -0
- package/dist/esm/components/ps-sidebar-group.js +5 -0
- package/dist/esm/components/ps-sidebar-header.js +5 -0
- package/dist/esm/components/ps-sidebar-inset.js +5 -0
- package/dist/esm/components/ps-sidebar-layout.js +21 -0
- package/dist/esm/components/ps-sidebar-menu-action.js +10 -0
- package/dist/esm/components/ps-sidebar-menu-badge.js +5 -0
- package/dist/esm/components/ps-sidebar-menu-button.js +20 -0
- package/dist/esm/components/ps-sidebar-menu-item.js +5 -0
- package/dist/esm/components/ps-sidebar-menu-sub-button.js +9 -0
- package/dist/esm/components/ps-sidebar-menu-sub-item.js +5 -0
- package/dist/esm/components/ps-sidebar-menu-sub.js +5 -0
- package/dist/esm/components/ps-sidebar-menu.js +5 -0
- package/dist/esm/components/ps-sidebar-nav-groups.js +15 -0
- package/dist/esm/components/ps-sidebar-provider.js +53 -0
- package/dist/esm/components/ps-sidebar-rail.js +10 -0
- package/dist/esm/components/ps-sidebar-separator.js +6 -0
- package/dist/esm/components/ps-sidebar-trigger.js +15 -0
- package/dist/esm/components/ps-sidebar-user-menu.js +22 -0
- package/dist/esm/components/ps-sidebar-workspace-switcher.js +37 -0
- package/dist/esm/components/ps-sidebar.js +30 -0
- package/dist/esm/constants/ps-app-sidebar-config.js +7 -0
- package/dist/esm/constants/ps-sidebar-config.js +14 -0
- package/dist/esm/constants/ps-sidebar-menu-button-variants.js +18 -0
- package/dist/esm/constants/ps-sidebar-state.js +5 -0
- package/dist/esm/contexts/ps-sidebar-context.js +2 -0
- package/dist/esm/hooks/use-ps-dialog-state.js +8 -0
- package/dist/esm/hooks/use-ps-is-mobile.js +13 -0
- package/dist/esm/hooks/use-ps-sidebar.js +9 -0
- package/dist/esm/index.js +65 -0
- package/dist/esm/models/ps-app-sidebar-group-data.js +1 -0
- package/dist/esm/models/ps-app-sidebar-item-data.js +1 -0
- package/dist/esm/models/ps-app-sidebar-props.js +1 -0
- package/dist/esm/models/ps-dialog-state-data.js +1 -0
- package/dist/esm/models/ps-dialog-state-value.js +1 -0
- package/dist/esm/models/ps-sidebar-content-props.js +1 -0
- package/dist/esm/models/ps-sidebar-context-data.js +1 -0
- package/dist/esm/models/ps-sidebar-footer-props.js +1 -0
- package/dist/esm/models/ps-sidebar-group-content-props.js +1 -0
- package/dist/esm/models/ps-sidebar-group-label-props.js +1 -0
- package/dist/esm/models/ps-sidebar-group-props.js +1 -0
- package/dist/esm/models/ps-sidebar-header-props.js +1 -0
- package/dist/esm/models/ps-sidebar-inset-props.js +1 -0
- package/dist/esm/models/ps-sidebar-layout-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-action-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-badge-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-button-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-item-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-sub-button-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-sub-item-props.js +1 -0
- package/dist/esm/models/ps-sidebar-menu-sub-props.js +1 -0
- package/dist/esm/models/ps-sidebar-nav-groups-props.js +1 -0
- package/dist/esm/models/ps-sidebar-props.js +1 -0
- package/dist/esm/models/ps-sidebar-provider-props.js +1 -0
- package/dist/esm/models/ps-sidebar-rail-props.js +1 -0
- package/dist/esm/models/ps-sidebar-separator-props.js +1 -0
- package/dist/esm/models/ps-sidebar-trigger-props.js +1 -0
- package/dist/esm/models/ps-sidebar-user-menu-props.js +1 -0
- package/dist/esm/models/ps-sidebar-workspace-switcher-props.js +1 -0
- package/dist/esm/services/ps-link-service.js +12 -0
- package/dist/esm/services/ps-sidebar-service.js +14 -0
- package/dist/hooks/use-ps-dialog-state.d.ts +2 -0
- package/dist/hooks/use-ps-dialog-state.js +45 -0
- package/dist/hooks/use-ps-is-mobile.d.ts +1 -0
- package/dist/hooks/use-ps-is-mobile.js +50 -0
- package/dist/hooks/use-ps-sidebar.d.ts +2 -0
- package/dist/hooks/use-ps-sidebar.js +46 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +65 -0
- package/dist/models/ps-app-sidebar-group-data.d.ts +6 -0
- package/dist/models/ps-app-sidebar-group-data.js +2 -0
- package/dist/models/ps-app-sidebar-item-data.d.ts +9 -0
- package/dist/models/ps-app-sidebar-item-data.js +2 -0
- package/dist/models/ps-app-sidebar-props.d.ts +16 -0
- package/dist/models/ps-app-sidebar-props.js +2 -0
- package/dist/models/ps-dialog-state-data.d.ts +7 -0
- package/dist/models/ps-dialog-state-data.js +2 -0
- package/dist/models/ps-dialog-state-value.d.ts +4 -0
- package/dist/models/ps-dialog-state-value.js +2 -0
- package/dist/models/ps-sidebar-content-props.d.ts +3 -0
- package/dist/models/ps-sidebar-content-props.js +2 -0
- package/dist/models/ps-sidebar-context-data.d.ts +10 -0
- package/dist/models/ps-sidebar-context-data.js +2 -0
- package/dist/models/ps-sidebar-footer-props.d.ts +3 -0
- package/dist/models/ps-sidebar-footer-props.js +2 -0
- package/dist/models/ps-sidebar-group-content-props.d.ts +3 -0
- package/dist/models/ps-sidebar-group-content-props.js +2 -0
- package/dist/models/ps-sidebar-group-label-props.d.ts +4 -0
- package/dist/models/ps-sidebar-group-label-props.js +2 -0
- package/dist/models/ps-sidebar-group-props.d.ts +3 -0
- package/dist/models/ps-sidebar-group-props.js +2 -0
- package/dist/models/ps-sidebar-header-props.d.ts +3 -0
- package/dist/models/ps-sidebar-header-props.js +2 -0
- package/dist/models/ps-sidebar-inset-props.d.ts +3 -0
- package/dist/models/ps-sidebar-inset-props.js +2 -0
- package/dist/models/ps-sidebar-layout-props.d.ts +11 -0
- package/dist/models/ps-sidebar-layout-props.js +2 -0
- package/dist/models/ps-sidebar-menu-action-props.d.ts +5 -0
- package/dist/models/ps-sidebar-menu-action-props.js +2 -0
- package/dist/models/ps-sidebar-menu-badge-props.d.ts +3 -0
- package/dist/models/ps-sidebar-menu-badge-props.js +2 -0
- package/dist/models/ps-sidebar-menu-button-props.d.ts +8 -0
- package/dist/models/ps-sidebar-menu-button-props.js +2 -0
- package/dist/models/ps-sidebar-menu-item-props.d.ts +3 -0
- package/dist/models/ps-sidebar-menu-item-props.js +2 -0
- package/dist/models/ps-sidebar-menu-props.d.ts +3 -0
- package/dist/models/ps-sidebar-menu-props.js +2 -0
- package/dist/models/ps-sidebar-menu-sub-button-props.d.ts +6 -0
- package/dist/models/ps-sidebar-menu-sub-button-props.js +2 -0
- package/dist/models/ps-sidebar-menu-sub-item-props.d.ts +3 -0
- package/dist/models/ps-sidebar-menu-sub-item-props.js +2 -0
- package/dist/models/ps-sidebar-menu-sub-props.d.ts +3 -0
- package/dist/models/ps-sidebar-menu-sub-props.js +2 -0
- package/dist/models/ps-sidebar-nav-groups-props.d.ts +7 -0
- package/dist/models/ps-sidebar-nav-groups-props.js +2 -0
- package/dist/models/ps-sidebar-props.d.ts +6 -0
- package/dist/models/ps-sidebar-props.js +2 -0
- package/dist/models/ps-sidebar-provider-props.d.ts +6 -0
- package/dist/models/ps-sidebar-provider-props.js +2 -0
- package/dist/models/ps-sidebar-rail-props.d.ts +3 -0
- package/dist/models/ps-sidebar-rail-props.js +2 -0
- package/dist/models/ps-sidebar-separator-props.d.ts +4 -0
- package/dist/models/ps-sidebar-separator-props.js +2 -0
- package/dist/models/ps-sidebar-trigger-props.d.ts +4 -0
- package/dist/models/ps-sidebar-trigger-props.js +2 -0
- package/dist/models/ps-sidebar-user-menu-props.d.ts +5 -0
- package/dist/models/ps-sidebar-user-menu-props.js +2 -0
- package/dist/models/ps-sidebar-workspace-switcher-props.d.ts +11 -0
- package/dist/models/ps-sidebar-workspace-switcher-props.js +2 -0
- package/dist/services/ps-link-service.d.ts +5 -0
- package/dist/services/ps-link-service.js +49 -0
- package/dist/services/ps-sidebar-service.d.ts +3 -0
- package/dist/services/ps-sidebar-service.js +18 -0
- package/package.json +4 -4
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PsSidebarWorkspaceSwitcher = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const lucide_react_1 = require("lucide-react");
|
|
7
|
+
const ps_app_sidebar_config_js_1 = require("../constants/ps-app-sidebar-config.js");
|
|
8
|
+
const use_ps_sidebar_js_1 = require("../hooks/use-ps-sidebar.js");
|
|
9
|
+
const ps_link_service_js_1 = require("../services/ps-link-service.js");
|
|
10
|
+
const ps_dropdown_menu_content_js_1 = require("./ps-dropdown-menu-content.js");
|
|
11
|
+
const ps_dropdown_menu_item_js_1 = require("./ps-dropdown-menu-item.js");
|
|
12
|
+
const ps_dropdown_menu_label_js_1 = require("./ps-dropdown-menu-label.js");
|
|
13
|
+
const ps_dropdown_menu_trigger_js_1 = require("./ps-dropdown-menu-trigger.js");
|
|
14
|
+
const ps_dropdown_menu_js_1 = require("./ps-dropdown-menu.js");
|
|
15
|
+
const ps_sidebar_menu_button_js_1 = require("./ps-sidebar-menu-button.js");
|
|
16
|
+
const ps_sidebar_menu_item_js_1 = require("./ps-sidebar-menu-item.js");
|
|
17
|
+
const ps_sidebar_menu_js_1 = require("./ps-sidebar-menu.js");
|
|
18
|
+
const ps_workspace_badge_js_1 = require("./ps-workspace-badge.js");
|
|
19
|
+
const PsSidebarWorkspaceSwitcher = ({ appTitle, homeHref, logoAlt = ps_app_sidebar_config_js_1.PsAppSidebarConfig.logoAlt, logoSrc, renderLink, switcher, }) => {
|
|
20
|
+
const { isMobile } = (0, use_ps_sidebar_js_1.usePsSidebar)();
|
|
21
|
+
const active = switcher === undefined ? undefined : switcher.items.find((item) => item.active);
|
|
22
|
+
const brand = ((0, jsx_runtime_1.jsx)("div", { className: 'flex aspect-square size-8 shrink-0 items-center justify-center rounded-lg border bg-background', children: (0, jsx_runtime_1.jsx)("img", { alt: logoAlt, className: 'size-5 object-contain', src: logoSrc }) }));
|
|
23
|
+
if (switcher === undefined) {
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(ps_sidebar_menu_js_1.PsSidebarMenu, { children: (0, jsx_runtime_1.jsx)(ps_sidebar_menu_item_js_1.PsSidebarMenuItem, { children: (0, jsx_runtime_1.jsx)(ps_sidebar_menu_button_js_1.PsSidebarMenuButton, { asChild: true, size: 'lg', tooltip: appTitle, children: ps_link_service_js_1.PsLinkService.render(renderLink, {
|
|
25
|
+
children: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [brand, (0, jsx_runtime_1.jsx)("span", { className: 'truncate font-semibold', children: appTitle })] })),
|
|
26
|
+
className: '',
|
|
27
|
+
href: homeHref,
|
|
28
|
+
}) }) }) }));
|
|
29
|
+
}
|
|
30
|
+
return ((0, jsx_runtime_1.jsx)(ps_sidebar_menu_js_1.PsSidebarMenu, { children: (0, jsx_runtime_1.jsx)(ps_sidebar_menu_item_js_1.PsSidebarMenuItem, { children: (0, jsx_runtime_1.jsxs)(ps_dropdown_menu_js_1.PsDropdownMenu, { children: [(0, jsx_runtime_1.jsx)(ps_dropdown_menu_trigger_js_1.PsDropdownMenuTrigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(ps_sidebar_menu_button_js_1.PsSidebarMenuButton, { className: 'data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground', size: 'lg', tooltip: active === undefined ? appTitle : active.label, children: [active === undefined ? (brand) : ((0, jsx_runtime_1.jsx)(ps_workspace_badge_js_1.PsWorkspaceBadge, { active: true, iconUrl: active.iconUrl, initials: active.initials, size: 'lg' })), (0, jsx_runtime_1.jsxs)("div", { className: 'grid flex-1 text-left text-sm leading-tight', children: [(0, jsx_runtime_1.jsx)("span", { className: 'truncate font-semibold', children: active === undefined ? appTitle : active.label }), (0, jsx_runtime_1.jsx)("span", { className: 'truncate text-xs text-muted-foreground', children: active === undefined ? switcher.placeholder : appTitle })] }), (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronsUpDown, { className: 'ml-auto' })] }) }), (0, jsx_runtime_1.jsxs)(ps_dropdown_menu_content_js_1.PsDropdownMenuContent, { align: 'start', className: 'w-[--radix-dropdown-menu-trigger-width] min-w-60 rounded-lg', side: isMobile ? 'bottom' : 'right', sideOffset: 4, children: [(0, jsx_runtime_1.jsx)(ps_dropdown_menu_label_js_1.PsDropdownMenuLabel, { className: 'text-xs text-muted-foreground', children: switcher.label }), (0, jsx_runtime_1.jsx)(ps_dropdown_menu_item_js_1.PsDropdownMenuItem, { asChild: true, className: 'gap-2 p-2', children: ps_link_service_js_1.PsLinkService.render(renderLink, {
|
|
31
|
+
children: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [brand, (0, jsx_runtime_1.jsx)("span", { className: 'font-medium', children: appTitle })] })),
|
|
32
|
+
className: '',
|
|
33
|
+
href: homeHref,
|
|
34
|
+
}) }), switcher.items.map((item) => ((0, jsx_runtime_1.jsx)(ps_dropdown_menu_item_js_1.PsDropdownMenuItem, { asChild: true, className: 'gap-2 p-2', children: ps_link_service_js_1.PsLinkService.render(renderLink, {
|
|
35
|
+
active: item.active,
|
|
36
|
+
children: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ps_workspace_badge_js_1.PsWorkspaceBadge, { active: item.active, iconUrl: item.iconUrl, initials: item.initials, size: 'lg' }), (0, jsx_runtime_1.jsxs)("span", { className: 'grid min-w-0 flex-1 leading-tight', children: [(0, jsx_runtime_1.jsx)("span", { className: 'truncate font-medium', children: item.label }), (0, jsx_runtime_1.jsx)("span", { className: 'truncate text-xs text-muted-foreground', children: item.description })] })] })),
|
|
37
|
+
className: '',
|
|
38
|
+
href: item.href,
|
|
39
|
+
}) }, item.id)))] })] }) }) }));
|
|
40
|
+
};
|
|
41
|
+
exports.PsSidebarWorkspaceSwitcher = PsSidebarWorkspaceSwitcher;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.PsSidebar = void 0;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const React = __importStar(require("react"));
|
|
40
|
+
const ps_sidebar_config_js_1 = require("../constants/ps-sidebar-config.js");
|
|
41
|
+
const ps_sidebar_state_js_1 = require("../constants/ps-sidebar-state.js");
|
|
42
|
+
const use_ps_sidebar_js_1 = require("../hooks/use-ps-sidebar.js");
|
|
43
|
+
const ps_class_name_service_js_1 = require("../services/ps-class-name-service.js");
|
|
44
|
+
const ps_sheet_content_js_1 = require("./ps-sheet-content.js");
|
|
45
|
+
const ps_sheet_description_js_1 = require("./ps-sheet-description.js");
|
|
46
|
+
const ps_sheet_header_js_1 = require("./ps-sheet-header.js");
|
|
47
|
+
const ps_sheet_title_js_1 = require("./ps-sheet-title.js");
|
|
48
|
+
const ps_sheet_js_1 = require("./ps-sheet.js");
|
|
49
|
+
exports.PsSidebar = React.forwardRef(({ side = 'left', variant = 'sidebar', collapsible = 'offcanvas', className, children, ...props }, ref) => {
|
|
50
|
+
const { isMobile, state, openMobile, setOpenMobile } = (0, use_ps_sidebar_js_1.usePsSidebar)();
|
|
51
|
+
const isFramed = variant === 'floating' || variant === 'inset';
|
|
52
|
+
if (collapsible === 'none') {
|
|
53
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: ps_class_name_service_js_1.PsClassNameService.merge('flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground', className), ...props, children: children }));
|
|
54
|
+
}
|
|
55
|
+
if (isMobile) {
|
|
56
|
+
return ((0, jsx_runtime_1.jsx)(ps_sheet_js_1.PsSheet, { open: openMobile, onOpenChange: setOpenMobile, children: (0, jsx_runtime_1.jsxs)(ps_sheet_content_js_1.PsSheetContent, { "data-sidebar": 'sidebar', "data-mobile": 'true', className: 'w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden', style: { '--sidebar-width': ps_sidebar_config_js_1.PsSidebarConfig.widthMobile }, side: side, children: [(0, jsx_runtime_1.jsxs)(ps_sheet_header_js_1.PsSheetHeader, { className: 'sr-only', children: [(0, jsx_runtime_1.jsx)(ps_sheet_title_js_1.PsSheetTitle, { children: ps_sidebar_config_js_1.PsSidebarConfig.mobileTitle }), (0, jsx_runtime_1.jsx)(ps_sheet_description_js_1.PsSheetDescription, { children: ps_sidebar_config_js_1.PsSidebarConfig.mobileDescription })] }), (0, jsx_runtime_1.jsx)("div", { className: 'flex h-full w-full flex-col', children: children })] }) }));
|
|
57
|
+
}
|
|
58
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: 'group peer hidden text-sidebar-foreground md:block', "data-state": state, "data-collapsible": state === ps_sidebar_state_js_1.PsSidebarState.Collapsed ? collapsible : '', "data-variant": variant, "data-side": side, children: [(0, jsx_runtime_1.jsx)("div", { className: ps_class_name_service_js_1.PsClassNameService.merge('relative w-[--sidebar-width] bg-transparent transition-[width] duration-200 ease-linear', 'group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180', isFramed
|
|
59
|
+
? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'
|
|
60
|
+
: 'group-data-[collapsible=icon]:w-[--sidebar-width-icon]') }), (0, jsx_runtime_1.jsx)("div", { className: ps_class_name_service_js_1.PsClassNameService.merge('fixed inset-y-0 z-docked hidden h-svh w-[--sidebar-width] transition-[left,right,width] duration-200 ease-linear md:flex', side === 'left'
|
|
61
|
+
? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'
|
|
62
|
+
: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]', isFramed
|
|
63
|
+
? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'
|
|
64
|
+
: 'group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l', className), ...props, children: (0, jsx_runtime_1.jsx)("div", { "data-sidebar": 'sidebar', className: 'flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow', children: children }) })] }));
|
|
65
|
+
});
|
|
66
|
+
exports.PsSidebar.displayName = 'PsSidebar';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsAppSidebarConfig = void 0;
|
|
4
|
+
exports.PsAppSidebarConfig = {
|
|
5
|
+
account: 'Account',
|
|
6
|
+
breadcrumbLabel: 'Breadcrumb',
|
|
7
|
+
logoAlt: 'App logo',
|
|
8
|
+
signOut: 'Sign out',
|
|
9
|
+
switchLabel: 'Switch',
|
|
10
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const PsSidebarConfig: {
|
|
2
|
+
readonly cookieMaxAgeSeconds: number;
|
|
3
|
+
readonly cookieName: "ps_sidebar_state";
|
|
4
|
+
readonly keyboardShortcut: "b";
|
|
5
|
+
readonly mobileBreakpoint: 768;
|
|
6
|
+
readonly mobileTitle: "Navigation";
|
|
7
|
+
readonly mobileDescription: "Pages and products in this app.";
|
|
8
|
+
readonly missingContext: "usePsSidebar must be used inside PsSidebarProvider.";
|
|
9
|
+
readonly railLabel: "Toggle sidebar";
|
|
10
|
+
readonly toggleLabel: "Toggle sidebar";
|
|
11
|
+
readonly width: "16rem";
|
|
12
|
+
readonly widthIcon: "3rem";
|
|
13
|
+
readonly widthMobile: "18rem";
|
|
14
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsSidebarConfig = void 0;
|
|
4
|
+
exports.PsSidebarConfig = {
|
|
5
|
+
cookieMaxAgeSeconds: 60 * 60 * 24 * 365,
|
|
6
|
+
cookieName: 'ps_sidebar_state',
|
|
7
|
+
keyboardShortcut: 'b',
|
|
8
|
+
mobileBreakpoint: 768,
|
|
9
|
+
mobileTitle: 'Navigation',
|
|
10
|
+
mobileDescription: 'Pages and products in this app.',
|
|
11
|
+
missingContext: 'usePsSidebar must be used inside PsSidebarProvider.',
|
|
12
|
+
railLabel: 'Toggle sidebar',
|
|
13
|
+
toggleLabel: 'Toggle sidebar',
|
|
14
|
+
width: '16rem',
|
|
15
|
+
widthIcon: '3rem',
|
|
16
|
+
widthMobile: '18rem',
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsSidebarMenuButtonVariants = void 0;
|
|
4
|
+
const class_variance_authority_1 = require("class-variance-authority");
|
|
5
|
+
exports.PsSidebarMenuButtonVariants = (0, class_variance_authority_1.cva)('peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
|
|
9
|
+
outline: 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',
|
|
10
|
+
},
|
|
11
|
+
size: {
|
|
12
|
+
default: 'h-8 text-sm',
|
|
13
|
+
sm: 'h-7 text-xs',
|
|
14
|
+
lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
variant: 'default',
|
|
19
|
+
size: 'default',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PsSidebarState = void 0;
|
|
4
|
+
var PsSidebarState;
|
|
5
|
+
(function (PsSidebarState) {
|
|
6
|
+
PsSidebarState["Collapsed"] = "collapsed";
|
|
7
|
+
PsSidebarState["Expanded"] = "expanded";
|
|
8
|
+
})(PsSidebarState || (exports.PsSidebarState = PsSidebarState = {}));
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PsSidebarContext = void 0;
|
|
37
|
+
const React = __importStar(require("react"));
|
|
38
|
+
exports.PsSidebarContext = React.createContext(null);
|
|
@@ -5,5 +5,5 @@ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
|
5
5
|
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
6
6
|
import { PsAlertDialogOverlay } from './ps-alert-dialog-overlay.js';
|
|
7
7
|
import { PsAlertDialogPortal } from './ps-alert-dialog-portal.js';
|
|
8
|
-
export const PsAlertDialogContent = React.forwardRef(({ className, ...props }, ref) => (_jsxs(PsAlertDialogPortal, { children: [_jsx(PsAlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { ref: ref, className: PsClassNameService.merge('fixed left-[50%] top-[50%] z-modal grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
|
|
8
|
+
export const PsAlertDialogContent = React.forwardRef(({ className, ...props }, ref) => (_jsxs(PsAlertDialogPortal, { children: [_jsx(PsAlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { ref: ref, className: PsClassNameService.merge('fixed left-[50%] top-[50%] z-modal grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg', className), ...props })] })));
|
|
9
9
|
PsAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
|
|
@@ -3,5 +3,5 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
5
5
|
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
6
|
-
export const PsAlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Overlay, { className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/
|
|
6
|
+
export const PsAlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Overlay, { className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/50 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props, ref: ref })));
|
|
7
7
|
PsAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PsSidebarContent } from './ps-sidebar-content.js';
|
|
3
|
+
import { PsSidebarFooter } from './ps-sidebar-footer.js';
|
|
4
|
+
import { PsSidebarHeader } from './ps-sidebar-header.js';
|
|
5
|
+
import { PsSidebarNavGroups } from './ps-sidebar-nav-groups.js';
|
|
6
|
+
import { PsSidebarRail } from './ps-sidebar-rail.js';
|
|
7
|
+
import { PsSidebarUserMenu } from './ps-sidebar-user-menu.js';
|
|
8
|
+
import { PsSidebarWorkspaceSwitcher } from './ps-sidebar-workspace-switcher.js';
|
|
9
|
+
import { PsSidebar } from './ps-sidebar.js';
|
|
10
|
+
export const PsAppSidebar = ({ appTitle, groups, homeHref, logoAlt, logoSrc, logoutHref, renderLink, user, workspaceSwitcher, }) => (_jsxs(PsSidebar, { collapsible: 'icon', children: [_jsx(PsSidebarHeader, { children: _jsx(PsSidebarWorkspaceSwitcher, { appTitle: appTitle, homeHref: homeHref, logoAlt: logoAlt, logoSrc: logoSrc, renderLink: renderLink, switcher: workspaceSwitcher }) }), _jsx(PsSidebarContent, { children: _jsx(PsSidebarNavGroups, { groups: groups, renderLink: renderLink }) }), user === null ? null : (_jsx(PsSidebarFooter, { children: _jsx(PsSidebarUserMenu, { logoutHref: logoutHref, user: user }) })), _jsx(PsSidebarRail, {})] }));
|
|
@@ -6,5 +6,5 @@ import { X } from 'lucide-react';
|
|
|
6
6
|
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
7
7
|
import { PsDialogOverlay } from './ps-dialog-overlay.js';
|
|
8
8
|
import { PsDialogPortal } from './ps-dialog-portal.js';
|
|
9
|
-
export const PsDialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(PsDialogPortal, { children: [_jsx(PsDialogOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: PsClassNameService.merge('fixed left-[50%] top-[50%] z-modal grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
|
|
9
|
+
export const PsDialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(PsDialogPortal, { children: [_jsx(PsDialogOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: PsClassNameService.merge('fixed left-[50%] top-[50%] z-modal grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg', className), ...props, children: [children, _jsxs(DialogPrimitive.Close, { className: 'absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground', children: [_jsx(X, { className: 'h-4 w-4' }), _jsx("span", { className: 'sr-only', children: "Close" })] })] })] })));
|
|
10
10
|
PsDialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
@@ -3,5 +3,5 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
5
5
|
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
6
|
-
export const PsDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/
|
|
6
|
+
export const PsDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/50 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props })));
|
|
7
7
|
PsDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
@@ -2,5 +2,5 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
4
4
|
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
5
|
-
export const PsSheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/
|
|
5
|
+
export const PsSheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { className: PsClassNameService.merge('fixed inset-0 z-overlay bg-black/50 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props, ref: ref })));
|
|
6
6
|
PsSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarContent = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'content', className: PsClassNameService.merge('flex min-h-0 flex-1 flex-col gap-2 overflow-auto [scrollbar-width:none] group-data-[collapsible=icon]:overflow-hidden [&::-webkit-scrollbar]:hidden', className), ...props })));
|
|
5
|
+
PsSidebarContent.displayName = 'PsSidebarContent';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarFooter = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'footer', className: PsClassNameService.merge('flex flex-col gap-2 p-2', className), ...props })));
|
|
5
|
+
PsSidebarFooter.displayName = 'PsSidebarFooter';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarGroupContent = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'group-content', className: PsClassNameService.merge('w-full text-sm', className), ...props })));
|
|
5
|
+
PsSidebarGroupContent.displayName = 'PsSidebarGroupContent';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
4
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
5
|
+
export const PsSidebarGroupLabel = React.forwardRef(({ className, asChild = false, ...props }, ref) => {
|
|
6
|
+
const Component = asChild ? Slot : 'div';
|
|
7
|
+
return (_jsx(Component, { ref: ref, "data-sidebar": 'group-label', className: PsClassNameService.merge('flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 [&>svg]:size-4 [&>svg]:shrink-0', className), ...props }));
|
|
8
|
+
});
|
|
9
|
+
PsSidebarGroupLabel.displayName = 'PsSidebarGroupLabel';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarGroup = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'group', className: PsClassNameService.merge('relative flex w-full min-w-0 flex-col p-2', className), ...props })));
|
|
5
|
+
PsSidebarGroup.displayName = 'PsSidebarGroup';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'header', className: PsClassNameService.merge('flex flex-col gap-2 p-2', className), ...props })));
|
|
5
|
+
PsSidebarHeader.displayName = 'PsSidebarHeader';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarInset = React.forwardRef(({ className, ...props }, ref) => (_jsx("main", { ref: ref, className: PsClassNameService.merge('relative flex w-full min-w-0 flex-1 flex-col bg-background peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow', className), ...props })));
|
|
5
|
+
PsSidebarInset.displayName = 'PsSidebarInset';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsAppSidebarConfig } from '../constants/ps-app-sidebar-config.js';
|
|
4
|
+
import { PsLinkService } from '../services/ps-link-service.js';
|
|
5
|
+
import { PsAppSidebar } from './ps-app-sidebar.js';
|
|
6
|
+
import { PsAppSwitcher } from './ps-app-switcher.js';
|
|
7
|
+
import { PsBreadcrumbItem } from './ps-breadcrumb-item.js';
|
|
8
|
+
import { PsBreadcrumbLink } from './ps-breadcrumb-link.js';
|
|
9
|
+
import { PsBreadcrumbList } from './ps-breadcrumb-list.js';
|
|
10
|
+
import { PsBreadcrumbPage } from './ps-breadcrumb-page.js';
|
|
11
|
+
import { PsBreadcrumbSeparator } from './ps-breadcrumb-separator.js';
|
|
12
|
+
import { PsBreadcrumb } from './ps-breadcrumb.js';
|
|
13
|
+
import { PsSeparator } from './ps-separator.js';
|
|
14
|
+
import { PsSidebarInset } from './ps-sidebar-inset.js';
|
|
15
|
+
import { PsSidebarProvider } from './ps-sidebar-provider.js';
|
|
16
|
+
import { PsSidebarTrigger } from './ps-sidebar-trigger.js';
|
|
17
|
+
export const PsSidebarLayout = ({ actions, appSwitcher, children, crumbs = [], defaultOpen = true, ...sidebar }) => (_jsxs(PsSidebarProvider, { defaultOpen: defaultOpen, children: [_jsx(PsAppSidebar, { ...sidebar }), _jsxs(PsSidebarInset, { children: [_jsxs("header", { className: 'sticky top-0 z-header flex h-14 shrink-0 items-center gap-2 border-b bg-background/95 px-4 backdrop-blur supports-[backdrop-filter]:bg-background/80', children: [_jsx(PsSidebarTrigger, { className: '-ml-1' }), crumbs.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(PsSeparator, { className: 'mr-1 h-4', orientation: 'vertical' }), _jsx(PsBreadcrumb, { "aria-label": PsAppSidebarConfig.breadcrumbLabel, className: 'min-w-0', children: _jsx(PsBreadcrumbList, { className: 'flex-nowrap', children: crumbs.map((crumb, index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(PsBreadcrumbSeparator, { className: 'hidden sm:block' }) : null, _jsx(PsBreadcrumbItem, { className: index < crumbs.length - 1 ? 'hidden min-w-0 sm:inline-flex' : 'min-w-0', children: index === crumbs.length - 1 ? (_jsx(PsBreadcrumbPage, { className: 'truncate', children: crumb.label })) : (_jsx(PsBreadcrumbLink, { asChild: true, children: PsLinkService.render(sidebar.renderLink, {
|
|
18
|
+
children: crumb.label,
|
|
19
|
+
className: 'truncate',
|
|
20
|
+
href: crumb.href,
|
|
21
|
+
}) })) })] }, crumb.href))) }) })] })) : null, _jsxs("div", { className: 'ml-auto flex shrink-0 items-center gap-1.5', children: [actions, appSwitcher === undefined ? null : _jsx(PsAppSwitcher, { ...appSwitcher })] })] }), _jsx("div", { className: 'flex min-w-0 flex-1 flex-col', children: children })] })] }));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
4
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
5
|
+
export const PsSidebarMenuAction = React.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
|
|
6
|
+
const Component = asChild ? Slot : 'button';
|
|
7
|
+
return (_jsx(Component, { ref: ref, "data-sidebar": 'menu-action', className: PsClassNameService.merge('absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground after:absolute after:-inset-2 after:md:hidden peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden [&>svg]:size-4 [&>svg]:shrink-0', showOnHover &&
|
|
8
|
+
'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0', className), ...props }));
|
|
9
|
+
});
|
|
10
|
+
PsSidebarMenuAction.displayName = 'PsSidebarMenuAction';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarMenuBadge = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-sidebar": 'menu-badge', className: PsClassNameService.merge('pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground peer-data-[size=sm]/menu-button:top-1 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 group-data-[collapsible=icon]:hidden', className), ...props })));
|
|
5
|
+
PsSidebarMenuBadge.displayName = 'PsSidebarMenuBadge';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
5
|
+
import { PsSidebarMenuButtonVariants } from '../constants/ps-sidebar-menu-button-variants.js';
|
|
6
|
+
import { PsSidebarState } from '../constants/ps-sidebar-state.js';
|
|
7
|
+
import { usePsSidebar } from '../hooks/use-ps-sidebar.js';
|
|
8
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
9
|
+
import { PsTooltipContent } from './ps-tooltip-content.js';
|
|
10
|
+
import { PsTooltipTrigger } from './ps-tooltip-trigger.js';
|
|
11
|
+
import { PsTooltip } from './ps-tooltip.js';
|
|
12
|
+
export const PsSidebarMenuButton = React.forwardRef(({ asChild = false, isActive = false, variant = 'default', size = 'default', tooltip, className, ...props }, ref) => {
|
|
13
|
+
const Component = asChild ? Slot : 'button';
|
|
14
|
+
const { isMobile, state } = usePsSidebar();
|
|
15
|
+
const button = (_jsx(Component, { ref: ref, "data-sidebar": 'menu-button', "data-size": size, "data-active": isActive, className: PsClassNameService.merge(PsSidebarMenuButtonVariants({ variant, size }), className), ...props }));
|
|
16
|
+
if (tooltip === undefined)
|
|
17
|
+
return button;
|
|
18
|
+
return (_jsxs(PsTooltip, { children: [_jsx(PsTooltipTrigger, { asChild: true, children: button }), _jsx(PsTooltipContent, { align: 'center', hidden: state !== PsSidebarState.Collapsed || isMobile, side: 'right', children: tooltip })] }));
|
|
19
|
+
});
|
|
20
|
+
PsSidebarMenuButton.displayName = 'PsSidebarMenuButton';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarMenuItem = React.forwardRef(({ className, ...props }, ref) => (_jsx("li", { ref: ref, "data-sidebar": 'menu-item', className: PsClassNameService.merge('group/menu-item relative', className), ...props })));
|
|
5
|
+
PsSidebarMenuItem.displayName = 'PsSidebarMenuItem';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
4
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
5
|
+
export const PsSidebarMenuSubButton = React.forwardRef(({ asChild = false, size = 'md', isActive = false, className, ...props }, ref) => {
|
|
6
|
+
const Component = asChild ? Slot : 'a';
|
|
7
|
+
return (_jsx(Component, { ref: ref, "data-sidebar": 'menu-sub-button', "data-size": size, "data-active": isActive, className: PsClassNameService.merge('flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground group-data-[collapsible=icon]:hidden [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground', size === 'sm' ? 'text-xs' : 'text-sm', className), ...props }));
|
|
8
|
+
});
|
|
9
|
+
PsSidebarMenuSubButton.displayName = 'PsSidebarMenuSubButton';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarMenuSubItem = React.forwardRef(({ className, ...props }, ref) => (_jsx("li", { ref: ref, "data-sidebar": 'menu-sub-item', className: PsClassNameService.merge('', className), ...props })));
|
|
5
|
+
PsSidebarMenuSubItem.displayName = 'PsSidebarMenuSubItem';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarMenuSub = React.forwardRef(({ className, ...props }, ref) => (_jsx("ul", { ref: ref, "data-sidebar": 'menu-sub', className: PsClassNameService.merge('mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden', className), ...props })));
|
|
5
|
+
PsSidebarMenuSub.displayName = 'PsSidebarMenuSub';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
export const PsSidebarMenu = React.forwardRef(({ className, ...props }, ref) => (_jsx("ul", { ref: ref, "data-sidebar": 'menu', className: PsClassNameService.merge('flex w-full min-w-0 flex-col gap-1', className), ...props })));
|
|
5
|
+
PsSidebarMenu.displayName = 'PsSidebarMenu';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PsLinkService } from '../services/ps-link-service.js';
|
|
3
|
+
import { PsSidebarGroupContent } from './ps-sidebar-group-content.js';
|
|
4
|
+
import { PsSidebarGroupLabel } from './ps-sidebar-group-label.js';
|
|
5
|
+
import { PsSidebarGroup } from './ps-sidebar-group.js';
|
|
6
|
+
import { PsSidebarMenuBadge } from './ps-sidebar-menu-badge.js';
|
|
7
|
+
import { PsSidebarMenuButton } from './ps-sidebar-menu-button.js';
|
|
8
|
+
import { PsSidebarMenuItem } from './ps-sidebar-menu-item.js';
|
|
9
|
+
import { PsSidebarMenu } from './ps-sidebar-menu.js';
|
|
10
|
+
export const PsSidebarNavGroups = ({ groups, renderLink }) => (_jsx(_Fragment, { children: groups.map((group) => (_jsxs(PsSidebarGroup, { children: [_jsx(PsSidebarGroupLabel, { children: group.label }), _jsx(PsSidebarGroupContent, { children: _jsx(PsSidebarMenu, { children: group.items.map((item) => (_jsxs(PsSidebarMenuItem, { children: [_jsx(PsSidebarMenuButton, { asChild: true, isActive: item.active === true, tooltip: item.label, children: PsLinkService.render(renderLink, {
|
|
11
|
+
active: item.active,
|
|
12
|
+
children: (_jsxs(_Fragment, { children: [item.icon, _jsx("span", { children: item.label })] })),
|
|
13
|
+
className: '',
|
|
14
|
+
href: item.href,
|
|
15
|
+
}) }), item.badge === undefined ? null : (_jsx(PsSidebarMenuBadge, { children: item.badge }))] }, item.id))) }) })] }, group.id))) }));
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { PsSidebarConfig } from '../constants/ps-sidebar-config.js';
|
|
5
|
+
import { PsSidebarState } from '../constants/ps-sidebar-state.js';
|
|
6
|
+
import { PsSidebarContext } from '../contexts/ps-sidebar-context.js';
|
|
7
|
+
import { usePsIsMobile } from '../hooks/use-ps-is-mobile.js';
|
|
8
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
9
|
+
import { PsTooltipProvider } from './ps-tooltip-provider.js';
|
|
10
|
+
export const PsSidebarProvider = React.forwardRef(({ defaultOpen = true, open: openProp, onOpenChange, className, style, children, ...props }, ref) => {
|
|
11
|
+
const isMobile = usePsIsMobile();
|
|
12
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
13
|
+
const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
|
|
14
|
+
const open = openProp === undefined ? internalOpen : openProp;
|
|
15
|
+
const setOpen = React.useCallback((value) => {
|
|
16
|
+
if (onOpenChange === undefined)
|
|
17
|
+
setInternalOpen(value);
|
|
18
|
+
else
|
|
19
|
+
onOpenChange(value);
|
|
20
|
+
document.cookie = `${PsSidebarConfig.cookieName}=${value}; path=/; max-age=${PsSidebarConfig.cookieMaxAgeSeconds}; SameSite=Lax`;
|
|
21
|
+
}, [onOpenChange]);
|
|
22
|
+
const toggleSidebar = React.useCallback(() => {
|
|
23
|
+
if (isMobile)
|
|
24
|
+
setOpenMobile((current) => !current);
|
|
25
|
+
else
|
|
26
|
+
setOpen(!open);
|
|
27
|
+
}, [isMobile, open, setOpen]);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
const onKeyDown = (event) => {
|
|
30
|
+
if (event.key === PsSidebarConfig.keyboardShortcut && (event.metaKey || event.ctrlKey)) {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
toggleSidebar();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
window.addEventListener('keydown', onKeyDown);
|
|
36
|
+
return () => window.removeEventListener('keydown', onKeyDown);
|
|
37
|
+
}, [toggleSidebar]);
|
|
38
|
+
const value = React.useMemo(() => ({
|
|
39
|
+
isMobile,
|
|
40
|
+
open,
|
|
41
|
+
openMobile,
|
|
42
|
+
setOpen,
|
|
43
|
+
setOpenMobile,
|
|
44
|
+
state: open ? PsSidebarState.Expanded : PsSidebarState.Collapsed,
|
|
45
|
+
toggleSidebar,
|
|
46
|
+
}), [isMobile, open, openMobile, setOpen, toggleSidebar]);
|
|
47
|
+
return (_jsx(PsSidebarContext.Provider, { value: value, children: _jsx(PsTooltipProvider, { delayDuration: 0, children: _jsx("div", { ref: ref, style: {
|
|
48
|
+
'--sidebar-width': PsSidebarConfig.width,
|
|
49
|
+
'--sidebar-width-icon': PsSidebarConfig.widthIcon,
|
|
50
|
+
...style,
|
|
51
|
+
}, className: PsClassNameService.merge('group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar', className), ...props, children: children }) }) }));
|
|
52
|
+
});
|
|
53
|
+
PsSidebarProvider.displayName = 'PsSidebarProvider';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsSidebarConfig } from '../constants/ps-sidebar-config.js';
|
|
4
|
+
import { usePsSidebar } from '../hooks/use-ps-sidebar.js';
|
|
5
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
6
|
+
export const PsSidebarRail = React.forwardRef(({ className, ...props }, ref) => {
|
|
7
|
+
const { toggleSidebar } = usePsSidebar();
|
|
8
|
+
return (_jsx("button", { ref: ref, "data-sidebar": 'rail', "aria-label": PsSidebarConfig.railLabel, tabIndex: -1, onClick: toggleSidebar, title: PsSidebarConfig.railLabel, type: 'button', className: PsClassNameService.merge('absolute inset-y-0 z-docked hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex', '[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize', '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize', 'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar', '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&]:-left-2', className), ...props }));
|
|
9
|
+
});
|
|
10
|
+
PsSidebarRail.displayName = 'PsSidebarRail';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
4
|
+
import { PsSeparator } from './ps-separator.js';
|
|
5
|
+
export const PsSidebarSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(PsSeparator, { ref: ref, "data-sidebar": 'separator', className: PsClassNameService.merge('mx-2 w-auto bg-sidebar-border', className), ...props })));
|
|
6
|
+
PsSidebarSeparator.displayName = 'PsSidebarSeparator';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { PanelLeft } from 'lucide-react';
|
|
4
|
+
import { PsSidebarConfig } from '../constants/ps-sidebar-config.js';
|
|
5
|
+
import { usePsSidebar } from '../hooks/use-ps-sidebar.js';
|
|
6
|
+
import { PsClassNameService } from '../services/ps-class-name-service.js';
|
|
7
|
+
import { PsButton } from './ps-button.js';
|
|
8
|
+
export const PsSidebarTrigger = React.forwardRef(({ className, onClick, ...props }, ref) => {
|
|
9
|
+
const { toggleSidebar } = usePsSidebar();
|
|
10
|
+
return (_jsxs(PsButton, { ref: ref, "data-sidebar": 'trigger', variant: 'ghost', size: 'icon', className: PsClassNameService.merge('size-8', className), onClick: (event) => {
|
|
11
|
+
onClick?.(event);
|
|
12
|
+
toggleSidebar();
|
|
13
|
+
}, ...props, children: [_jsx(PanelLeft, {}), _jsx("span", { className: 'sr-only', children: PsSidebarConfig.toggleLabel })] }));
|
|
14
|
+
});
|
|
15
|
+
PsSidebarTrigger.displayName = 'PsSidebarTrigger';
|