@adminui-dev/layout 1.0.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.
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export default function (props: {
3
+ buttons: React.ReactElement[];
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ declare function LayoutAside(props: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
2
+ declare namespace LayoutAside {
3
+ var displayName: string;
4
+ }
5
+ export default LayoutAside;
@@ -0,0 +1 @@
1
+ export default function (): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ declare function LayoutContent(props: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
2
+ declare namespace LayoutContent {
3
+ var displayName: string;
4
+ }
5
+ export default LayoutContent;
@@ -0,0 +1,11 @@
1
+ import type { Language, LayoutConfig } from "./typings";
2
+ type ConfigDispatcher = {
3
+ layoutConfig: LayoutConfig;
4
+ setLayoutConfig: (config: LayoutConfig) => void;
5
+ locale: string;
6
+ setLocale: (locale: string) => void;
7
+ getLanguages: () => Language[];
8
+ };
9
+ export declare const createConfigContext: () => import("react").Context<ConfigDispatcher>;
10
+ export declare const useConfigContext: () => ConfigDispatcher;
11
+ export {};
@@ -0,0 +1,5 @@
1
+ declare function LayoutHeader(props: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
2
+ declare namespace LayoutHeader {
3
+ var displayName: string;
4
+ }
5
+ export default LayoutHeader;
@@ -0,0 +1,19 @@
1
+ import type { Theme } from "./typings";
2
+ interface ThemeProviderProps {
3
+ children: React.ReactNode;
4
+ theme?: Theme;
5
+ defaultTheme?: Theme;
6
+ storageKey?: string;
7
+ }
8
+ type ThemeProviderState = {
9
+ theme: Theme;
10
+ setTheme: (theme: Theme) => void;
11
+ };
12
+ /**
13
+ * 明亮模式上下文
14
+ * @param props
15
+ * @returns
16
+ */
17
+ export default function (props: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare const useTheme: () => ThemeProviderState;
19
+ export {};
@@ -0,0 +1,5 @@
1
+ import Layout from "./Layout";
2
+ import FullScreenButton from "./FullScreenButton";
3
+ import LayoutBackground from "./LayoutBackground";
4
+ import ThemeProvider from "./ThemeProvider";
5
+ export { Layout, ThemeProvider, LayoutBackground, FullScreenButton };
@@ -0,0 +1,8 @@
1
+ import type { LayoutPros } from './typings';
2
+ declare function Layout(props: LayoutPros): import("react/jsx-runtime").JSX.Element;
3
+ declare namespace Layout {
4
+ var Aside: typeof import("./LayoutAside").default;
5
+ var Content: typeof import("./LayoutContent").default;
6
+ var Header: typeof import("./LayoutHeader").default;
7
+ }
8
+ export default Layout;
@@ -0,0 +1,61 @@
1
+ type Theme = 'light' | 'dark' | 'system';
2
+ type LayoutType = 'headMenu' | 'leftMenu';
3
+ type LayoutTheme = 'light' | 'dark' | 'system';
4
+ type ContainerMode = 'inline' | 'box' | 'panel';
5
+ type ContainerStretch = 'inline' | 'auto' | 'full';
6
+ interface LayoutConfig {
7
+ layoutType?: LayoutType;
8
+ headerHeight?: number;
9
+ asideWidth?: number;
10
+ asideCollapsedWidth?: number;
11
+ theme?: Theme;
12
+ locale?: string;
13
+ userInfo?: UserInfo;
14
+ brandInfo?: BrandInfo;
15
+ }
16
+ interface Language {
17
+ name: string;
18
+ locale: string;
19
+ flag?: React.ReactNode;
20
+ }
21
+ interface LocaleMessageData {
22
+ locale: string;
23
+ name: string;
24
+ flag?: string;
25
+ messages: Record<string, string>;
26
+ }
27
+ interface UserInfo {
28
+ id?: number;
29
+ uid: string;
30
+ title: string;
31
+ avatar?: string;
32
+ }
33
+ interface BrandInfo {
34
+ id?: number;
35
+ name: string;
36
+ title: string;
37
+ logo?: React.ReactNode;
38
+ }
39
+ declare function defineConfig(config: LayoutConfig): LayoutConfig;
40
+ export interface LayoutPros extends React.HTMLAttributes<HTMLDivElement> {
41
+ layoutConfig?: LayoutConfig;
42
+ theme?: Theme;
43
+ locale?: string;
44
+ localeMessageData?: Record<string, LocaleMessageData>;
45
+ }
46
+ export interface MainLayoutProps extends React.HTMLAttributes<HTMLDivElement> {
47
+ header?: React.ReactNode;
48
+ aside?: React.ReactNode;
49
+ }
50
+ export interface ContainerProps {
51
+ mode?: ContainerMode;
52
+ stretch?: ContainerStretch;
53
+ bordered?: boolean;
54
+ hideTitle?: boolean;
55
+ hideBreadcrumb?: boolean;
56
+ hideFooter?: boolean;
57
+ transparent?: boolean;
58
+ children?: React.ReactNode;
59
+ }
60
+ export { defineConfig };
61
+ export type { Theme, LayoutTheme, LayoutType, LayoutConfig, Language, LocaleMessageData, UserInfo, BrandInfo };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("react");function n(){return e.jsx("div",{style:{boxSizing:"border-box",pointerEvents:"none",position:"fixed",overflow:"hidden",insetBlockStart:"0",insetInlineStart:"0",zIndex:"0",height:"100%",width:"100%"}})}function o(t){return e.jsx("div",{style:{boxSizing:"border-box",display:"flex",flex:"auto",position:"relative",flexDirection:"column",minHeight:"0"},children:t.children})}function r(t){return e.jsx("div",{children:t.children})}o.displayName="LayoutContent",r.displayName="LayoutAside";const i=t.createContext({layoutConfig:{},setLayoutConfig:()=>{},locale:"en-US",setLocale:()=>{},getLanguages:()=>[]});function s(n){const o=t.useContext(i),{layoutConfig:r}=o;let s={boxSizing:"border-box",position:"sticky",width:"100%",zIndex:"100",top:"0",paddingBlock:"0",paddingInline:"0",transition:"background-color .3s cubic-bezier(.645, .045, .355, 1)"};return r.headerHeight&&(s={...s,height:r.headerHeight+"px",minHeight:r.headerHeight+"px"}),e.jsx("header",{style:s,children:n.children})}s.displayName="LayoutHeader";var d="layout-module_rootBox__Y8bEx",l="layout-module_rootLayout__TePvr",a="layout-module_mainLayout__a8Tb9";function c(o){let r=null,i=null,s=null;return t.Children.forEach(o.children,e=>{const t=e.type.displayName;"LayoutHeader"===t?r=e:"LayoutContent"===t?i=e:"LayoutAside"===t&&(s=e)}),e.jsxs("div",{className:d,children:[e.jsx(n,{}),e.jsxs("div",{className:l,children:[s,e.jsxs("div",{className:a,children:[r,i]})]})]})}!function(e,t){void 0===t&&(t={});var n=t.insertAt;if("undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===n&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}('.layout-module_rootBox__Y8bEx {\r\n text-rendering: "optimizeLegibility";\r\n box-sizing: border-box;\r\n width: 100%;\r\n height:100%;\r\n background-color: transparent;\r\n}\r\n.layout-module_rootLayout__TePvr {\r\n box-sizing: border-box;\r\n width: 100%;\r\n min-height: 100%; \r\n display: flex;\r\n flex-flow: row;\r\n background-color: transparent;\r\n}\r\n.layout-module_mainLayout__a8Tb9 {\r\n box-sizing: border-box;\r\n display: flex;\r\n flex:auto; \r\n position: relative;\r\n flex-flow: column;\r\n min-height: 0px; \r\n}\r\n.layout-module_headerLayout__Jx8vy {\r\n box-sizing: border-box;\r\n position: sticky;\r\n width: 100%;\r\n z-index: 100;\r\n top: 0px;\r\n padding-block: 0px;\r\n padding-inline: 0px;\r\n transition: "background-color .3s cubic-bezier(.645, .045, .355, 1)"; \r\n}'),c.Aside=r,c.Content=o,c.Header=s;const u=t.createContext({theme:"system",setTheme:()=>{}});exports.FullScreenButton=function(n){const o=!!document.fullscreenElement,[r,i]=t.useState(o),s=()=>{i(!!document.fullscreenElement)},d=e=>{"F11"===e.code&&(e.preventDefault(),l())};t.useEffect(()=>(document.addEventListener("fullscreenchange",s),document.addEventListener("keydown",d,!0),()=>{document.removeEventListener("fullscreenchange",s),document.removeEventListener("keydown",d)}),[]);const l=()=>{r?document.exitFullscreen():document.documentElement.requestFullscreen()};if(!n.buttons||n.buttons.length<2)return e.jsx(e.Fragment,{});const[a,c]=n.buttons,u=r?a:c;return t.cloneElement(u,{onClick:e=>{console.log(e),l()}})},exports.Layout=c,exports.LayoutBackground=n,exports.ThemeProvider=function(n){const{children:o,storageKey:r="adminui-shadcn-theme"}=n,i=n.theme||localStorage.getItem(r)||n.defaultTheme||"system",[s,d]=t.useState(i);t.useEffect(()=>{const e=window.document.documentElement;if(e.classList.remove("light","dark"),"system"===s){const t=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return void e.classList.add(t)}e.classList.add(s)},[s]);const l={theme:s,setTheme:e=>{localStorage.setItem(r,e),d(e)}};return e.jsx(u.Provider,{value:l,children:o})},exports.defineConfig=function(e){return e};
@@ -0,0 +1,106 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React$1 from 'react';
3
+
4
+ declare function LayoutHeader(props: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
5
+ declare namespace LayoutHeader {
6
+ var displayName: string;
7
+ }
8
+
9
+ declare function LayoutContent(props: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
10
+ declare namespace LayoutContent {
11
+ var displayName: string;
12
+ }
13
+
14
+ declare function LayoutAside(props: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
15
+ declare namespace LayoutAside {
16
+ var displayName: string;
17
+ }
18
+
19
+ type Theme = 'light' | 'dark' | 'system';
20
+ type LayoutType = 'headMenu' | 'leftMenu';
21
+ type LayoutTheme = 'light' | 'dark' | 'system';
22
+ type ContainerMode = 'inline' | 'box' | 'panel';
23
+ type ContainerStretch = 'inline' | 'auto' | 'full';
24
+ interface LayoutConfig {
25
+ layoutType?: LayoutType;
26
+ headerHeight?: number;
27
+ asideWidth?: number;
28
+ asideCollapsedWidth?: number;
29
+ theme?: Theme;
30
+ locale?: string;
31
+ userInfo?: UserInfo;
32
+ brandInfo?: BrandInfo;
33
+ }
34
+ interface Language {
35
+ name: string;
36
+ locale: string;
37
+ flag?: React.ReactNode;
38
+ }
39
+ interface LocaleMessageData {
40
+ locale: string;
41
+ name: string;
42
+ flag?: string;
43
+ messages: Record<string, string>;
44
+ }
45
+ interface UserInfo {
46
+ id?: number;
47
+ uid: string;
48
+ title: string;
49
+ avatar?: string;
50
+ }
51
+ interface BrandInfo {
52
+ id?: number;
53
+ name: string;
54
+ title: string;
55
+ logo?: React.ReactNode;
56
+ }
57
+ declare function defineConfig(config: LayoutConfig): LayoutConfig;
58
+ interface LayoutPros extends React.HTMLAttributes<HTMLDivElement> {
59
+ layoutConfig?: LayoutConfig;
60
+ theme?: Theme;
61
+ locale?: string;
62
+ localeMessageData?: Record<string, LocaleMessageData>;
63
+ }
64
+ interface MainLayoutProps extends React.HTMLAttributes<HTMLDivElement> {
65
+ header?: React.ReactNode;
66
+ aside?: React.ReactNode;
67
+ }
68
+ interface ContainerProps {
69
+ mode?: ContainerMode;
70
+ stretch?: ContainerStretch;
71
+ bordered?: boolean;
72
+ hideTitle?: boolean;
73
+ hideBreadcrumb?: boolean;
74
+ hideFooter?: boolean;
75
+ transparent?: boolean;
76
+ children?: React.ReactNode;
77
+ }
78
+
79
+ declare function Layout(props: LayoutPros): react_jsx_runtime.JSX.Element;
80
+ declare namespace Layout {
81
+ var Aside: typeof LayoutAside;
82
+ var Content: typeof LayoutContent;
83
+ var Header: typeof LayoutHeader;
84
+ }
85
+
86
+ declare function export_default$2(props: {
87
+ buttons: React$1.ReactElement[];
88
+ }): react_jsx_runtime.JSX.Element;
89
+
90
+ declare function export_default$1(): react_jsx_runtime.JSX.Element;
91
+
92
+ interface ThemeProviderProps {
93
+ children: React.ReactNode;
94
+ theme?: Theme;
95
+ defaultTheme?: Theme;
96
+ storageKey?: string;
97
+ }
98
+ /**
99
+ * 明亮模式上下文
100
+ * @param props
101
+ * @returns
102
+ */
103
+ declare function export_default(props: ThemeProviderProps): react_jsx_runtime.JSX.Element;
104
+
105
+ export { export_default$2 as FullScreenButton, Layout, export_default$1 as LayoutBackground, export_default as ThemeProvider, defineConfig };
106
+ export type { BrandInfo, ContainerProps, Language, LayoutConfig, LayoutPros, LayoutTheme, LayoutType, LocaleMessageData, MainLayoutProps, Theme, UserInfo };
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as n,Fragment as t}from"react/jsx-runtime";import o,{createContext as r,useContext as i,useState as d,useEffect as l}from"react";function a(){return e("div",{style:{boxSizing:"border-box",pointerEvents:"none",position:"fixed",overflow:"hidden",insetBlockStart:"0",insetInlineStart:"0",zIndex:"0",height:"100%",width:"100%"}})}function s(n){return e("div",{style:{boxSizing:"border-box",display:"flex",flex:"auto",position:"relative",flexDirection:"column",minHeight:"0"},children:n.children})}function c(n){return e("div",{children:n.children})}s.displayName="LayoutContent",c.displayName="LayoutAside";const u=r({layoutConfig:{},setLayoutConfig:()=>{},locale:"en-US",setLocale:()=>{},getLanguages:()=>[]});function m(n){const t=i(u),{layoutConfig:o}=t;let r={boxSizing:"border-box",position:"sticky",width:"100%",zIndex:"100",top:"0",paddingBlock:"0",paddingInline:"0",transition:"background-color .3s cubic-bezier(.645, .045, .355, 1)"};return o.headerHeight&&(r={...r,height:o.headerHeight+"px",minHeight:o.headerHeight+"px"}),e("header",{style:r,children:n.children})}m.displayName="LayoutHeader";var h="layout-module_rootBox__Y8bEx",y="layout-module_rootLayout__TePvr",g="layout-module_mainLayout__a8Tb9";function x(t){let r=null,i=null,d=null;return o.Children.forEach(t.children,e=>{const n=e.type.displayName;"LayoutHeader"===n?r=e:"LayoutContent"===n?i=e:"LayoutAside"===n&&(d=e)}),n("div",{className:h,children:[e(a,{}),n("div",{className:y,children:[d,n("div",{className:g,children:[r,i]})]})]})}function f(n){const r=!!document.fullscreenElement,[i,a]=d(r),s=()=>{a(!!document.fullscreenElement)},c=e=>{"F11"===e.code&&(e.preventDefault(),u())};l(()=>(document.addEventListener("fullscreenchange",s),document.addEventListener("keydown",c,!0),()=>{document.removeEventListener("fullscreenchange",s),document.removeEventListener("keydown",c)}),[]);const u=()=>{i?document.exitFullscreen():document.documentElement.requestFullscreen()};if(!n.buttons||n.buttons.length<2)return e(t,{});const[m,h]=n.buttons,y=i?m:h;return o.cloneElement(y,{onClick:e=>{console.log(e),u()}})}!function(e,n){void 0===n&&(n={});var t=n.insertAt;if("undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===t&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}('.layout-module_rootBox__Y8bEx {\r\n text-rendering: "optimizeLegibility";\r\n box-sizing: border-box;\r\n width: 100%;\r\n height:100%;\r\n background-color: transparent;\r\n}\r\n.layout-module_rootLayout__TePvr {\r\n box-sizing: border-box;\r\n width: 100%;\r\n min-height: 100%; \r\n display: flex;\r\n flex-flow: row;\r\n background-color: transparent;\r\n}\r\n.layout-module_mainLayout__a8Tb9 {\r\n box-sizing: border-box;\r\n display: flex;\r\n flex:auto; \r\n position: relative;\r\n flex-flow: column;\r\n min-height: 0px; \r\n}\r\n.layout-module_headerLayout__Jx8vy {\r\n box-sizing: border-box;\r\n position: sticky;\r\n width: 100%;\r\n z-index: 100;\r\n top: 0px;\r\n padding-block: 0px;\r\n padding-inline: 0px;\r\n transition: "background-color .3s cubic-bezier(.645, .045, .355, 1)"; \r\n}'),x.Aside=c,x.Content=s,x.Header=m;const p=r({theme:"system",setTheme:()=>{}});function b(n){const{children:t,storageKey:o="adminui-shadcn-theme"}=n,r=n.theme||localStorage.getItem(o)||n.defaultTheme||"system",[i,a]=d(r);l(()=>{const e=window.document.documentElement;if(e.classList.remove("light","dark"),"system"===i){const n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return void e.classList.add(n)}e.classList.add(i)},[i]);const s={theme:i,setTheme:e=>{localStorage.setItem(o,e),a(e)}};return e(p.Provider,{value:s,children:t})}function v(e){return e}export{f as FullScreenButton,x as Layout,a as LayoutBackground,b as ThemeProvider,v as defineConfig};
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@adminui-dev/layout",
3
+ "version": "1.0.0",
4
+ "description": "adminui.dev's layout",
5
+ "keywords": [
6
+ "layout",
7
+ "adminui",
8
+ "admin",
9
+ "dashboard"
10
+ ],
11
+ "license": "MIT",
12
+ "author": "zhouwenqi",
13
+ "type": "commonjs",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "module": "./dist/index.esm.js",
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.esm.js",
21
+ "require": "./dist/index.cjs.js",
22
+ "types": "./dist/index.d.ts"
23
+ }
24
+ },
25
+ "main": "./dist/index.cjs.js",
26
+ "types": "./dist/index.d.ts",
27
+ "authors": [
28
+ "zhouwenqi <zhouwenqi1982@live.com>"
29
+ ],
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "scripts": {
34
+ "build": "rollup -c",
35
+ "dev": "rollup -c -w",
36
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
37
+ "lint:fix": "eslint \"src/**/*.{ts,tsx}\" --fix",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "dependencies": {
41
+ "tslib": "^2.6.0"
42
+ },
43
+ "devDependencies": {
44
+ "@rollup/plugin-commonjs": "^25.0.0",
45
+ "@rollup/plugin-node-resolve": "^15.0.0",
46
+ "@rollup/plugin-typescript": "^11.0.0",
47
+ "@types/commander": "^2.12.5",
48
+ "@types/react": "^18.0.0",
49
+ "@types/react-dom": "^18.0.0",
50
+ "postcss": "^8.5.6",
51
+ "postcss-modules": "^6.0.1",
52
+ "rollup": "^4.0.0",
53
+ "rollup-plugin-dts": "^6.0.0",
54
+ "rollup-plugin-postcss": "^4.0.2",
55
+ "rollup-plugin-terser": "^7.0.2",
56
+ "typescript": "^5.0.3"
57
+ },
58
+ "peerDependencies": {
59
+ "react": "^18.0.0",
60
+ "react-dom": "^18.0.0"
61
+ }
62
+ }