enr 0.2.3-alpha.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.
Files changed (109) hide show
  1. package/209.mjs +10 -0
  2. package/209.mjs.map +1 -0
  3. package/LICENSE +25 -0
  4. package/README.md +139 -0
  5. package/client.mjs +10 -0
  6. package/components/ThemeContext/index.d.ts +11 -0
  7. package/components/ThemeContext/types.d.ts +26 -0
  8. package/components/button/button.d.ts +10 -0
  9. package/components/button/index.d.ts +9 -0
  10. package/components/image/index.d.ts +11 -0
  11. package/components/image/types.d.ts +13 -0
  12. package/components/image/useSrcChange.d.ts +11 -0
  13. package/components/layout/content.d.ts +17 -0
  14. package/components/layout/footer.d.ts +21 -0
  15. package/components/layout/get-value.d.ts +10 -0
  16. package/components/layout/header.d.ts +23 -0
  17. package/components/layout/index.d.ts +8 -0
  18. package/components/layout/is-fragment.d.ts +9 -0
  19. package/components/layout/layout.d.ts +55 -0
  20. package/components/layout/sidebar.d.ts +29 -0
  21. package/components/layout/types.d.ts +99 -0
  22. package/components/marquee/MarqueeEle.d.ts +15 -0
  23. package/components/marquee/index.d.ts +7 -0
  24. package/components/marquee/type.d.ts +9 -0
  25. package/components/menu/index.d.ts +6 -0
  26. package/components/menu/menu.d.ts +6 -0
  27. package/components/ripples/Content.d.ts +8 -0
  28. package/components/ripples/LazyRippleEle.d.ts +42 -0
  29. package/components/ripples/RipplesEle.d.ts +42 -0
  30. package/components/ripples/index.d.ts +11 -0
  31. package/components/ripples/types.d.ts +17 -0
  32. package/components/ripples/useOptionUpdate.d.ts +12 -0
  33. package/components/shared/EnLayoutContent/index.d.ts +19 -0
  34. package/components/shared/EnLayoutContent/types.d.ts +17 -0
  35. package/components/switch/SwitchContainer.d.ts +7 -0
  36. package/components/switch/SwitchContent.d.ts +10 -0
  37. package/components/switch/SwitchLabel.d.ts +9 -0
  38. package/components/switch/index.d.ts +14 -0
  39. package/customHooks/use-xcn/index.d.ts +14 -0
  40. package/customHooks/useAnimationFrame.d.ts +58 -0
  41. package/customHooks/useInputIsComposing.d.ts +44 -0
  42. package/customHooks/useRipples/buildBackground/create-background-color.d.ts +9 -0
  43. package/customHooks/useRipples/buildBackground/create-linear-gradient.d.ts +9 -0
  44. package/customHooks/useRipples/buildBackground/default-background/_createImageData.d.ts +13 -0
  45. package/customHooks/useRipples/buildBackground/default-background/circleDataList.d.ts +24 -0
  46. package/customHooks/useRipples/buildBackground/default-background/createCanvasElementBySize.d.ts +8 -0
  47. package/customHooks/useRipples/buildBackground/default-background/createDefault.d.ts +8 -0
  48. package/customHooks/useRipples/buildBackground/default-background/index.d.ts +18 -0
  49. package/customHooks/useRipples/buildBackground/load-image.d.ts +19 -0
  50. package/customHooks/useRipples/buildBackground/run-side.d.ts +15 -0
  51. package/customHooks/useRipples/buildBackground/type.d.ts +37 -0
  52. package/customHooks/useRipples/buildBackground/utils/bind-image.d.ts +10 -0
  53. package/customHooks/useRipples/buildBackground/utils/create-canvas-element.d.ts +9 -0
  54. package/customHooks/useRipples/buildBackground/utils/create-image-by-src.d.ts +8 -0
  55. package/customHooks/useRipples/buildBackground/utils/get-background-style.d.ts +9 -0
  56. package/customHooks/useRipples/buildBackground/utils/hide-css-background.d.ts +16 -0
  57. package/customHooks/useRipples/buildBackground/utils/restore-css-background.d.ts +13 -0
  58. package/customHooks/useRipples/callback/can-side.d.ts +14 -0
  59. package/customHooks/useRipples/callback/destroy.d.ts +9 -0
  60. package/customHooks/useRipples/callback/drop.d.ts +9 -0
  61. package/customHooks/useRipples/callback/extract-url.d.ts +8 -0
  62. package/customHooks/useRipples/callback/fade.d.ts +9 -0
  63. package/customHooks/useRipples/callback/get-new-image.d.ts +14 -0
  64. package/customHooks/useRipples/callback/reload-background.d.ts +12 -0
  65. package/customHooks/useRipples/callback/scale.d.ts +8 -0
  66. package/customHooks/useRipples/index.d.ts +45 -0
  67. package/customHooks/useRipples/init/index.d.ts +11 -0
  68. package/customHooks/useRipples/init/initEvent.d.ts +11 -0
  69. package/customHooks/useRipples/init/initShaders.d.ts +13 -0
  70. package/customHooks/useRipples/init/initTexture.d.ts +13 -0
  71. package/customHooks/useRipples/render/computeTextureBoundaries.d.ts +9 -0
  72. package/customHooks/useRipples/render/draw.d.ts +13 -0
  73. package/customHooks/useRipples/render/drawQuad.d.ts +13 -0
  74. package/customHooks/useRipples/render/dropAtPointer.d.ts +13 -0
  75. package/customHooks/useRipples/render/index.d.ts +12 -0
  76. package/customHooks/useRipples/render/swapBufferIndices.d.ts +11 -0
  77. package/customHooks/useRipples/render/update.d.ts +11 -0
  78. package/customHooks/useRipples/rippersData/defaultData.d.ts +11 -0
  79. package/customHooks/useRipples/rippersData/fadeData.d.ts +51 -0
  80. package/customHooks/useRipples/rippersData/index.d.ts +46 -0
  81. package/customHooks/useRipples/rippersData/loadConfig.d.ts +25 -0
  82. package/customHooks/useRipples/rippersData/renderData.d.ts +80 -0
  83. package/customHooks/useRipples/rippersData/useOptions.d.ts +91 -0
  84. package/customHooks/useRipples/rippersData/vertexSource.d.ts +34 -0
  85. package/customHooks/useRipples/ripple.html.d.ts +12 -0
  86. package/customHooks/useRipples/ripplesClass.d.ts +57 -0
  87. package/customHooks/useRipples/tools.d.ts +37 -0
  88. package/customHooks/useRipples/types.d.ts +209 -0
  89. package/customHooks/useRipples/use-lazy-ripple.d.ts +15 -0
  90. package/customHooks/useTimeId.d.ts +50 -0
  91. package/index.client.d.ts +20 -0
  92. package/index.d.ts +8 -0
  93. package/index.mjs +3 -0
  94. package/index.server.d.ts +8 -0
  95. package/layoutUtil.mjs +10 -0
  96. package/layoutUtil.mjs.map +1 -0
  97. package/package.json +82 -0
  98. package/server.mjs +8 -0
  99. package/server.mjs.map +1 -0
  100. package/storage/main-logic .d.ts +26 -0
  101. package/storage/storage-store.d.ts +14 -0
  102. package/styles/common.css +1012 -0
  103. package/styles/common.scss +453 -0
  104. package/styles/reset.scss +93 -0
  105. package/styles/respond.scss +54 -0
  106. package/styles/root.scss +212 -0
  107. package/styles/vars-color.scss +247 -0
  108. package/utilities/cookie.d.ts +28 -0
  109. package/utilities/sys.d.ts +41 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/rippersData/useOptions.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ import { ImageCrossOrigin, RippleImgUrl, RipplesUseOptions } from '../types';
8
+ /** 用户使用参数 */
9
+ export declare class UseOptions {
10
+ #private;
11
+ /** 倍级触发光标事件 */
12
+ set accelerating(value: number);
13
+ /**
14
+ * 倍级触发光标事件
15
+ */
16
+ get accelerating(): number;
17
+ /** 是否与鼠标互动 */
18
+ set interactive(value: boolean);
19
+ /**
20
+ * 是否与鼠标互动
21
+ */
22
+ get interactive(): boolean;
23
+ /** 分辨率
24
+ *
25
+ * 纹理的尺寸,该项目中该值为纹理的宽和高
26
+ *
27
+ */
28
+ set resolution(value: number);
29
+ /**
30
+ * 纹理的尺寸,该项目中该值为纹理的宽和高
31
+ */
32
+ get resolution(): number;
33
+ /**
34
+ * 扰动系数
35
+ *
36
+ * 缺省 `0.01`
37
+ *
38
+ * 取之范围 `0.01 - 1`
39
+ */
40
+ set perturbance(value: number);
41
+ /**
42
+ * 扰动系数
43
+ */
44
+ get perturbance(): number;
45
+ /**
46
+ * 扩散半径
47
+ *
48
+ * 缺省为 `20`
49
+ */
50
+ set dropRadius(value: number);
51
+ /**
52
+ * 扩散半径
53
+ */
54
+ get dropRadius(): number;
55
+ /** 传入的背景图片 */
56
+ imgUrl: RippleImgUrl;
57
+ /** 闲置波动 */
58
+ set idleFluctuations(value: boolean);
59
+ /**
60
+ * 闲置波动
61
+ */
62
+ get idleFluctuations(): boolean;
63
+ /** 雨滴落下的时间间隔 */
64
+ set raindropsTimeInterval(value: number);
65
+ /**
66
+ * 雨滴落下的时间间隔
67
+ */
68
+ get raindropsTimeInterval(): number;
69
+ /** crossOrigin (是否跨域) */
70
+ crossOrigin: ImageCrossOrigin;
71
+ /** canvas 的显隐 */
72
+ visible: boolean;
73
+ /** 当前执行的状态 */
74
+ running: boolean;
75
+ /** 当前执行的状态 */
76
+ set playingState(value: boolean);
77
+ /**
78
+ * 当前执行的状态
79
+ */
80
+ get playingState(): boolean;
81
+ /** 当前时候为暗黑模式 */
82
+ get darkMode(): boolean | undefined;
83
+ /** 当前时候为暗黑模式 */
84
+ set darkMode(value: boolean | undefined);
85
+ /** 上一次执行渲染状态 */
86
+ lastRunningState: boolean;
87
+ /**
88
+ * 构建使用参数的数据
89
+ */
90
+ constructor(options: RipplesUseOptions);
91
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/rippersData/vertexSource.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ /**
8
+ *
9
+ */
10
+ export declare const vertexShader = "\n attribute vec2 vertex;\n varying vec2 coord;\n void main() {\n coord = vertex * 0.5 + 0.5;\n gl_Position = vec4(vertex, 0.0, 1.0);\n }";
11
+ /**
12
+ *
13
+ *
14
+ *
15
+ */
16
+ export declare const updateProgramFragmentSource = "\n precision highp float;\n\n uniform sampler2D texture;\n uniform vec2 delta;\n\n varying vec2 coord;\n\n void main() {\n vec4 info = texture2D(texture, coord);\n \n vec2 dx = vec2(delta.x, 0.0);\n vec2 dy = vec2(0.0, delta.y);\n \n float average = (\n texture2D(texture, coord - dx).r +\n texture2D(texture, coord - dy).r +\n texture2D(texture, coord + dx).r +\n texture2D(texture, coord + dy).r\n ) * 0.25;\n \n info.g += (average - info.r) * 2.0;\n info.g *= 0.995;\n info.r += info.g;\n \n gl_FragColor = info;\n }\n ";
17
+ /**
18
+ *
19
+ *
20
+ *
21
+ */
22
+ export declare const renderVertexSource = "\n precision highp float;\n\n attribute vec2 vertex;\n uniform vec2 topLeft;\n uniform vec2 bottomRight;\n uniform vec2 containerRatio;\n varying vec2 ripplesCoord;\n varying vec2 backgroundCoord;\n void main() {\n backgroundCoord = mix(topLeft, bottomRight, vertex * 0.5 + 0.5);\n backgroundCoord.y = 1.0 - backgroundCoord.y;\n ripplesCoord = vec2(vertex.x, -vertex.y) * containerRatio * 0.5 + 0.5;\n gl_Position = vec4(vertex.x, -vertex.y, 0.0, 1.0);\n }\n ";
23
+ /**
24
+ *
25
+ *
26
+ *
27
+ */
28
+ export declare const renderProgramFragmentSource = "\n precision highp float;\n\n uniform sampler2D samplerBackground;\n uniform sampler2D samplerRipples;\n uniform vec2 delta;\n\n uniform float perturbance;\n varying vec2 ripplesCoord;\n varying vec2 backgroundCoord;\n\n void main() {\n float height = texture2D(samplerRipples, ripplesCoord).r;\n float heightX = texture2D(samplerRipples, vec2(ripplesCoord.x + delta.x, ripplesCoord.y)).r;\n float heightY = texture2D(samplerRipples, vec2(ripplesCoord.x, ripplesCoord.y + delta.y)).r;\n vec3 dx = vec3(delta.x, heightX - height, 0.0);\n vec3 dy = vec3(0.0, heightY - height, delta.y);\n vec2 offset = -normalize(cross(dy, dx)).xz;\n float specular = pow(max(0.0, dot(offset, normalize(vec2(-0.6, 1.0)))), 4.0);\n gl_FragColor = texture2D(samplerBackground, backgroundCoord + offset * perturbance) + specular;\n }";
29
+ /**
30
+ *
31
+ * fragmentSource
32
+ *
33
+ */
34
+ export declare const dropProgramFragmentSource = "precision highp float;\n\n const float PI = 3.141592653589793;\n uniform sampler2D texture;\n uniform vec2 center;\n uniform float radius;\n uniform float strength;\n\n varying vec2 coord;\n\n void main() {\n vec4 info = texture2D(texture, coord);\n\n float drop = max(0.0, 1.0 - length(center * 0.5 + 0.5 - coord) / radius);\n drop = 0.5 - cos(drop * PI) * 0.5;\n info.r += drop * strength;\n gl_FragColor = info;\n }";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/ripple.html.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ import { Ripples } from './ripplesClass';
8
+ import { RipplesOptions } from './types';
9
+ /**
10
+ * ripple 的 html 导出,不依赖于 react
11
+ */
12
+ export declare function useRipples(element: HTMLElement, options: RipplesOptions): Ripples;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/ripplesClass.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ import { RipplesData } from './rippersData';
8
+ import { RipplesOptions } from './types';
9
+ import { RipplesRenderData } from './rippersData/renderData';
10
+ import { UseOptions } from './rippersData/useOptions';
11
+ import { FadeData } from './rippersData/fadeData';
12
+ /**
13
+ *
14
+ * ## 水波动涟漪的效果
15
+ *
16
+ * 魔改自大佬的[jQuey 代码](https://github.com/sirxemic/jquery.ripples)
17
+ */
18
+ export declare class Ripples extends RipplesData {
19
+ #private;
20
+ /** 渲染数据 */
21
+ renderData: RipplesRenderData | null;
22
+ /** 使用参数 */
23
+ options: UseOptions;
24
+ /** 背景使用的数据 */
25
+ fadeData: FadeData;
26
+ defaults: import("./types").RipplesDefaultData;
27
+ /** 初始化状态 */
28
+ initialized: boolean;
29
+ /**
30
+ * 构建 Ripple 对象
31
+ */
32
+ constructor(canvas: HTMLCanvasElement, options?: RipplesOptions);
33
+ /** 模拟雨滴下落 */
34
+ raindropsFall(): void;
35
+ /** 公共方法,触发 */
36
+ drop(x: number, y: number, radius: number, strength: number): void;
37
+ /**
38
+ * 缓进缓出
39
+ */
40
+ fade(): void;
41
+ /** 元素的尺寸发生变化 */
42
+ reloadBackground(): void;
43
+ /** 销毁 */
44
+ destroy(): void;
45
+ /** 展示元素 */
46
+ show(): void;
47
+ /** 隐藏元素 */
48
+ hide(): void;
49
+ /** 暂停动画涟漪状态 */
50
+ pause(): void;
51
+ /** 播放动画涟漪状态 */
52
+ play(): void;
53
+ /** 切换当前状态 */
54
+ changePlayingState(): void;
55
+ /** 给初始化变量赋值 */
56
+ set(property: keyof RipplesOptions, value: unknown): void;
57
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/tools.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ /****************************************************************************
8
+ * @Author earthnut
9
+ * @Email earthnut.dev@outlook.com
10
+ * @ProjectName website
11
+ * @FileName tools.ts
12
+ * @CreateDate 周六 12/07/2024
13
+ * @Description 工具
14
+ ****************************************************************************/
15
+ import { Ripples } from './ripplesClass';
16
+ import { Program } from './types';
17
+ /**
18
+ *
19
+ * 增加 WebGLProgram
20
+ *
21
+ *
22
+ */
23
+ export declare function createProgram(vertexSource: string, fragmentSource: string, gl: WebGLRenderingContext, _uniformValues?: string): Program;
24
+ /**
25
+ *
26
+ * 绑定纹理
27
+ *
28
+ */
29
+ export declare function bindTexture(this: Ripples, texture: WebGLTexture, unit?: number): void;
30
+ /**
31
+ * 给 canvas 设置样式
32
+ */
33
+ export declare function setCanvasStyle(canvas: HTMLCanvasElement): void;
34
+ /** 背景色值为空 */
35
+ export declare function isNoneBackGroundColor(color: string): boolean;
36
+ /** 背景图为空 */
37
+ export declare function isNoneBackgroundImage(src: string): boolean;
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/types.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ /****************************************************************************
8
+ * @Author earthnut
9
+ * @Email earthnut.dev@outlook.com
10
+ * @ProjectName react-ripples
11
+ * @FileName interface.ts
12
+ * @CreateDate 周二 12/17/2024
13
+ * @Description BackgroundRipples 的类型声明文件
14
+ ****************************************************************************/
15
+ import { HTMLAttributes } from 'react';
16
+ export type ImageCrossOrigin = 'anonymous' | 'use-credentials' | 'no-cors';
17
+ /**
18
+ *
19
+ * 背景涟漪的 props 类型
20
+ *
21
+ * - children 可选属性,定义子组件或子组件们
22
+ * - style 可选属性,定义自定义外壳的样式,在内含 `children` 时生效
23
+ * - option 可选属性,自定义涟漪的初始化属性
24
+ * - resolution 分辨率,纹理的尺寸,该项目中该值为纹理的宽和高,缺省为 `256`
25
+ * - dropRadius 扩撒半径,缺省值为 `20`
26
+ * - perturbance 扰动系数,缺省为 `0.03`
27
+ * - interactive 光标交互,缺省为 `true` ,关闭须显示传入 `false` 值
28
+ * - accelerating 加速光标移动触发,缺省为 `1`
29
+ * - crossOrigin 原始样式
30
+ * - imgUrl 原始背景图片地址
31
+ * - playingState 当前的播放状态,缺省为 `true` ,设定为 `false` 时并不关闭,而是暂停
32
+ * - raindropsTimeInterval 雨滴滴落的间隔,缺省为 `3600`,可设置区间为 `10 ~ 12000`
33
+ * 该值还将影响无背景设置时默认背景的切换频率,几乎每两个雨滴落下就会切换一次背景
34
+ * - idleFluctuations 闲置波动,在光标交互不触发时,将触发模拟雨滴,缺省为 `true`
35
+ * - darkMode 暗黑模式,仅用于在默认的背景图时更改默认背景图的背景色,如果使用了 `imgUrl` 配置,请执行处理色差异常
36
+ *
37
+ */
38
+ export type BackgroundRipplesProps = HTMLAttributes<HTMLDivElement> & {
39
+ /**
40
+ * ## 可设定涟漪的参数
41
+ *
42
+ * - resolution 波速,值越小,波动越快。缺省为 `360`
43
+ * - dropRadius 波动强度,值越小,波动效果越大,缺省值为 `12`
44
+ * - perturbance 扰动系数,值越大,对原背景造成干涉越强,缺省为 `0.01`
45
+ * - interactive 光标交互,缺省为 `true` ,关闭须显示传入 `false` 值
46
+ * - accelerating 加速光标移动触发,类似于扰动系数,及作用与鼠标或手指触发,缺省为 `1`
47
+ * - crossOrigin 原始样式
48
+ * - imgUrl 原始背景图片地址
49
+ * - playingState 当前的播放状态,缺省为 `true` ,设定为 `false` 时并不关闭,而是暂停
50
+ * - raindropsTimeInterval 雨滴滴落的间隔,缺省为 `3650`,可设置区间为 `10 ~ 12000`,值越小,雨越大
51
+ * 该值还将影响无背景设置时默认背景的切换频率,几乎每两个雨滴落下就会切换一次背景
52
+ * - idleFluctuations 闲置波动,在光标交互不触发时,将触发模拟雨滴,缺省为 `true`
53
+ * - darkMode 暗黑模式,仅用于在默认的背景图时更改默认背景图的背景色,如果使用了 `imgUrl` 配置,请执行处理色差异常
54
+ */
55
+ option?: RipplesOptions;
56
+ };
57
+ /**
58
+ *
59
+ * WebGLProgram
60
+ *
61
+ */
62
+ export interface Program {
63
+ id: WebGLProgram;
64
+ uniforms: {
65
+ [x: string]: Float32Array;
66
+ };
67
+ locations: {
68
+ [x: string]: WebGLUniformLocation;
69
+ };
70
+ }
71
+ /**
72
+ * 设定的元素背景的 url 地址
73
+ *
74
+ * 缺省为 `null`
75
+ */
76
+ export type RippleImgUrl = string | string[] | null;
77
+ export type RipplesUseOptions = {
78
+ /**
79
+ * 波速
80
+ *
81
+ * 作用为波传播的速度,值越大,波传播的越慢
82
+ *
83
+ * 缺省为 `360`
84
+ */
85
+ resolution: number;
86
+ /**
87
+ * 波动强度
88
+ *
89
+ * 值越小,波动越明显
90
+ *
91
+ * 缺省为 `12`
92
+ */
93
+ dropRadius: number;
94
+ /**
95
+ * 扰动系数
96
+ *
97
+ * 缺省 `0.01`
98
+ *
99
+ * 取之范围 `0.01 - 1`
100
+ *
101
+ * 值越大,扰动效果越明显
102
+ */
103
+ perturbance: number;
104
+ /**
105
+ * 是否开启光标滑动轨迹
106
+ *
107
+ * 缺省为 `true`
108
+ */
109
+ interactive: boolean;
110
+ /**
111
+ * 加速光标移动触发,缺省为 `1`
112
+ *
113
+ *
114
+ * 由于大佬原方法在光标触发 mousemove 时不怎么明显
115
+ *
116
+ * 所以以倍级触发会让波动更加明显
117
+ *
118
+ * 可设置区间为 `2 - 100`
119
+ */
120
+ accelerating: number;
121
+ /**
122
+ * 原设定的背景图片
123
+ *
124
+ * 缺省为 `''`
125
+ */
126
+ crossOrigin: ImageCrossOrigin;
127
+ /**
128
+ * 设定的元素背景的 url 地址
129
+ *
130
+ * 缺省为 `null`
131
+ */
132
+ imgUrl: RippleImgUrl;
133
+ /**
134
+ * 当前涟漪的状态
135
+ *
136
+ * 缺省为 `true` , 即涟漪触发正在执行
137
+ */
138
+ playingState: boolean;
139
+ /**
140
+ * 雨滴滴落的时间间隔
141
+ *
142
+ * 单位为 ms
143
+ *
144
+ * 缺省值为 `3600`
145
+ *
146
+ *
147
+ * 可设置区间为 `10 ~ 12000`
148
+ *
149
+ * 该值还将影响无背景设置时默认背景的切换频率,几乎每两个雨滴落下就会切换一次背景
150
+ */
151
+ raindropsTimeInterval: number;
152
+ /**
153
+ * 闲置波动
154
+ *
155
+ * 在光标交互不触发时,将触发模拟雨滴
156
+ *
157
+ * 缺省为 `true`
158
+ */
159
+ idleFluctuations: boolean;
160
+ /**
161
+ * 是否为暗黑模式
162
+ *
163
+ * 在使用默认的主题设置时,当页面使用暗黑模式时出现了文本看不清的现象
164
+ *
165
+ */
166
+ darkMode: boolean | undefined;
167
+ };
168
+ /**
169
+ *
170
+ * 涟漪设定参数
171
+ *
172
+ * - resolution 分波速,值越小,波动越快。缺省为 `360`
173
+ * - dropRadius 波动强度,值越小,波动效果越大,缺省值为 `12`
174
+ * - perturbance 扰动系数,值越大,对原背景造成干涉越强,缺省为 `0.01`
175
+ * - interactive 光标交互,缺省为 `true` ,关闭须显示传入 `false` 值
176
+ * - accelerating 加速光标移动触发,类似于扰动系数,及作用与鼠标或手指触发,缺省为 `1`
177
+ * - crossOrigin 原始样式
178
+ * - imgUrl 原始背景图片地址
179
+ * - playingState 当前的播放状态,缺省为 `true` ,设定为 `false` 时并不关闭,而是暂停
180
+ * - raindropsTimeInterval 雨滴滴落的间隔,缺省为 `3650`,可设置区间为 `10 ~ 12000`,值越小,雨越大
181
+ * 该值还将影响无背景设置时默认背景的切换频率,几乎每两个雨滴落下就会切换一次背景
182
+ * - idleFluctuations 闲置波动,在光标交互不触发时,将触发模拟雨滴,缺省为 `true`
183
+ * - darkMode 暗黑模式,仅用于在默认的背景图时更改默认背景图的背景色,如果使用了 `imgUrl` 配置,请执行处理色差异常
184
+ */
185
+ export type RipplesOptions = {
186
+ [x in keyof RipplesUseOptions]?: RipplesUseOptions[x];
187
+ };
188
+ /**
189
+ * 初始默认值
190
+ */
191
+ export interface RipplesDefaultData {
192
+ /** 默认的图像地址 */
193
+ imgUrl: null;
194
+ /** */
195
+ resolution: 360;
196
+ dropRadius: 12;
197
+ perturbance: 0.01;
198
+ interactive: true;
199
+ crossOrigin: 'no-cors';
200
+ playingState: true;
201
+ accelerating: 1;
202
+ raindropsTimeInterval: 3600;
203
+ idleFluctuations: true;
204
+ darkMode: undefined;
205
+ }
206
+ /**
207
+ *
208
+ */
209
+ export type Textures = WebGLTexture[];
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useRipples/use-lazy-ripple.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ import { RefObject } from 'react';
8
+ import { Ripples } from './ripplesClass';
9
+ import { RipplesOptions } from './types';
10
+ /** 动态加载包含的自定义的钩子 */
11
+ export declare function useLazyRipples(canvas: RefObject<HTMLCanvasElement | null>, option?: RipplesOptions): {
12
+ ripples: RefObject<Ripples | null>;
13
+ isLoading: boolean;
14
+ error: unknown;
15
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@customHooks/useTimeId.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ /**
8
+ *
9
+ * ### 导出一个使用 `useRef` 创建的 `NodeJS.Timeout`
10
+ *
11
+ * 该数值在组件卸载时会自动调用 `clearTimeout` 清理
12
+ *
13
+ * @version 0.0.3
14
+ * @see https://earthnut.dev/custom-hooks/use-time-id
15
+ * @example
16
+ *
17
+ * 使用:
18
+ *
19
+ * ```ts
20
+ * // import { useTimeId } from 'earthnut';
21
+ * ...
22
+ * const timeoutId = useTimeId();
23
+ *
24
+ * useEffect(()=>{
25
+ * timeoutId.current = setTimeout(()=>{
26
+ * ...
27
+ * } ,delay);
28
+ * });
29
+ * ...
30
+ *
31
+ * ```
32
+ *
33
+ * 其实,正确的用法是这样的:
34
+ *
35
+ * ```ts
36
+ *
37
+ * useEffect(()=>{
38
+ * const timeId = setTimeout(()=>{
39
+ * ...
40
+ * }, delay) ;
41
+ *
42
+ * return ()=> timeId && clearTimeout(timeId);
43
+ * });
44
+ *
45
+ * ```
46
+ *
47
+ * 根本就不用引入这个自定义 `hook` , 哈哈哈哈哈
48
+ *
49
+ */
50
+ export declare function useTimeId(): import("react").RefObject<NodeJS.Timeout | undefined>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@index.client.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ export { useLazyRipples } from './customHooks/useRipples/use-lazy-ripple';
8
+ export { BackgroundRipple, LazyBackgroundRipple } from './components/ripples';
9
+ export { useTimeId } from './customHooks/useTimeId';
10
+ export { useAnimationFrame } from './customHooks/useAnimationFrame';
11
+ export type { UseAnimationFrameResult, AnimationFrameOption, } from './customHooks/useAnimationFrame';
12
+ export { useInputIsComposing } from './customHooks/useInputIsComposing';
13
+ export { useRipples } from './customHooks/useRipples';
14
+ export type { Ripples, BackgroundRipplesProps, RipplesOptions, RippleImgUrl, } from './customHooks/useRipples';
15
+ export type { LayoutProps, LayoutSideBarProps, LayoutHeaderProps, LayoutFooterProps, } from './components/layout';
16
+ export { Image, Image as EnImage } from './components/image';
17
+ export type { EnImageProps } from './components/image';
18
+ export { useColorMode, ThemeColorModeProvider } from './components/ThemeContext';
19
+ export type { ColorMode, ThemeContextType, ThemeColorModeProviderProps, } from './components/ThemeContext/types';
20
+ export { Switch, Switch as EnSwitch } from './components/switch';
package/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@index.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ export * from './index.client';
8
+ export * from './index.server';
package/index.mjs ADDED
@@ -0,0 +1,3 @@
1
+
2
+ export * from './client.mjs';
3
+ export * from './server.mjs';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@index.server.d.ts
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+ export { _en } from './customHooks/use-xcn';
8
+ export { Layout, LayoutContent, LayoutFooter, LayoutHeader, LayoutSideBar, EnLayout, EnLayoutContent, EnLayoutFooter, EnLayoutHeader, EnLayoutSideBar, } from './components/layout';
package/layoutUtil.mjs ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license MIT
3
+ * earthnut@layoutUtil.mjs
4
+ * Copyright (c) 2025 earthnut.dev
5
+ * 请在项目根参看详细许可证明
6
+ */
7
+
8
+ "use client";
9
+ import{css as n,styled as e}from"styled-components";var t,a,r,o,i,l,d,h,u,s,g,p,y,c,m,f,v,w,b,x,$,T,O,j,z,k,P,N,S,q,A,B={};function C(n,e){return e||(e=n.slice(0)),Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(e)}}))}B.d=(n,e)=>{for(var t in e)B.o(e,t)&&!B.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:e[t]})},B.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e);var D=e.main(t||(t=C(["\n grid-area: content;\n position: relative;\n"]))),E=e.div(a||(a=C(["\n grid-area: footer;\n position: relative;\n height: var(--layout-footer-height);\n box-shadow: 0 -1px 13px 0px #0000001a;\n overflow: hidden;\n"]))),F=e.nav(r||(r=C(["\n grid-area: header;\n position: sticky;\n top: 0px;\n left: 0px;\n z-index: 10;\n height: var(--layout-header-height);\n box-shadow: 0 4px 13px -3px #0000001a;\n overflow: hidden;\n"]))),G=e.aside(o||(o=C(["\n position: sticky;\n left: 0;\n z-index: 8;\n grid-area: side;\n overflow-x: hidden;\n overflow-y: auto;\n"]))),H=e.div(i||(i=C(["\n position: relative;\n grid-area: content;\n overflow: auto;\n"]))),I=e.div(l||(l=C(["\n position: relative;\n top: 0px;\n height: var(--layout-self-height);\n width: var(--layout-self-width);\n overflow-x: hidden;\n overflow-y: auto;\n\n ","\n\n ","\n\n // 侧边栏全屏样式\n ","\n\n // ------------------------------\n // --- 标准模式(全)与侧边栏右置(全)共用样式 ---\n // 标准模式(全)与侧边栏右置(全)\n ","\n\n // 标准模式(全) 侧边栏与内容区设置\n ","\n // 侧边栏(全) 侧边栏与内容区设置\n ","\n\n // 侧边栏 (全) 左侧全屏\n // side bar 居左全尺寸\n // side bar 值由 en-layout-side-full 控制\n ","\n \n // 标准的 side bar 居左全尺寸\n ","\n\n // side bar 居右全尺寸\n ","\n \n // ------------------------------\n // --- 标准模式(无 header)与侧边栏在右侧的无头模式共用样式 ---\n // 标准的无头模式样式、侧边栏在右侧的无头模式样式\n ","\n \n // 侧边栏(无 header )全屏\n // side bar 居左全尺寸\n // side bar 值由 en-layout-side-full 控制\n ","\n\n // 标准的 side bar 居左全尺寸\n ","\n\n // side bar 居右全尺寸\n ","\n \n // ------------------------------\n // 标准模式(无 footer)与侧边栏右置(无 footer)共用样式\n // 没有 footer\n ","\n \n\n // 标准模式(无 footer) 侧边栏与内容区设置\n ","\n\n\n// 侧边栏在右侧的无 footer 模式样式\n ","\n\n// 侧边栏 (全) 左侧全屏\n// side bar 居左全尺寸\n// side bar 值由 en-layout-side-full 控制\n","\n\n// 标准的 side bar 居左全尺寸\n ","\n\n\n // side bar 居右全尺寸\n ","\n \n // ------------------------------\n // --- 分割线 --- \n // 下面是仅头部、底部和侧边栏布局\n // 仅底部布局\n ","\n\n // 仅头部布局\n ","\n \n // 仅侧边布局\n// 标准的无头模式样式、侧边栏在右侧的无头模式样式\n// side bar 值由 en-layout-side-full 控制\n ","\n \n // 右侧侧边布局\n ","\n"])),function(e){var t=e.$headerNoSticky,a=e.$header,r=e.$layoutType,o=e.$content,i=e.$sidebar;return t&&n(d||(d=C(["\n // 头部不粘连样式,头部区域设置\n & > ."," {\n position: relative;\n z-index: 2;\n }\n\n ","\n\n ","\n "])),a,("simple-all"===r||"side-right-all"===r)&&n(h||(h=C(["\n & > ."," > ."," {\n top: 0;\n min-height: calc(\n var(--layout-height) - var (--layout-footer-height) - var(--layout-header-height)\n );\n max-height: var(--layout-height);\n }\n "])),o,i),("simple-no-footer"===r||"side-right-no-footer"===r)&&n(u||(u=C(["\n & > ."," {\n top: 0;\n min-height: calc(var(--layout-height) - var(--layout-footer-height));\n max-height: var(--layout-height);\n }\n "])),i))},function(e){var t=e.$layoutType,a=e.$content;return"no-sidebar"===t&&n(s||(s=C(["\n & > ."," {\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n }\n "])),a)},function(e){var t=e.$layoutType,a=e.$sidebar;return"side-full"===t&&n(g||(g=C(["\n & > ."," {\n top: 0;\n height: var(--layout-height);\n }\n "])),a)},function(e){var t=e.$layoutType,a=e.$content,r=e.$sidebar;return["simple-all","side-right-all"].includes(t)&&n(p||(p=C(["\n // 子元素\n & > ."," {\n display: grid;\n grid-template-rows:\n calc(var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height))\n auto;\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n\n // side bar 块保持粘连,且在 content height 不足时支撑页面\n & > ."," {\n top: var(--layout-header-height);\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n max-height: calc(var(--layout-height) - var(--layout-header-height));\n }\n }\n "])),a,r)},function(e){var t=e.$layoutType,a=e.$content;return["simple-all","simple-no-header"].includes(t)&&n(y||(y=C(["\n & > ."," {\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-areas:\n 'side content'\n '. content';\n }\n "])),a)},function(e){var t=e.$layoutType,a=e.$content;return["side-right-all","side-right-no-header"].includes(t)&&n(c||(c=C(["\n & > ."," {\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'content side'\n 'content .';\n }\n "])),a)},function(e){var t=e.$layoutType;return["side-full-all","side-right-full-all"].includes(t)&&n(m||(m=C(["\n display: grid;\n grid-template-rows: var(--layout-header-height) auto var(--layout-footer-height);\n gap: 0px;\n "])))},function(e){return"side-full-all"===e.$layoutType&&n(f||(f=C(["\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side header'\n 'side content'\n 'side footer';\n "])))},function(e){return"side-right-full-all"===e.$layoutType&&n(v||(v=C(["\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header side'\n 'content side'\n 'footer side';\n "])))},function(e){var t=e.$layoutType,a=e.$content,r=e.$sidebar;return["simple-no-header","side-right-no-header"].includes(t)&&n(w||(w=C(["\n & > ."," {\n display: grid;\n grid-template-rows: auto;\n // side bar 块的样式\n & > ."," {\n top: 0;\n min-height: calc(var(--layout-height) - var(--layout-footer-height));\n max-height: var(--layout-height);\n }\n }\n "])),a,r)},function(e){var t=e.$layoutType;return["side-full-no-header","side-right-full-no-header"].includes(t)&&n(b||(b=C(["\n display: grid;\n grid-template-rows: auto var(--layout-footer-height);\n gap: 0px;\n "])))},function(e){return"side-full-no-header"===e.$layoutType&&n(x||(x=C(["\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side content'\n 'side footer';\n "])))},function(e){return"side-right-full-no-header"===e.$layoutType&&n($||($=C(["\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'content side'\n 'footer side';\n "])))},function(e){var t=e.$layoutType,a=e.$sidebar;return["simple-no-footer","side-right-no-footer"].includes(t)&&n(T||(T=C(["\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n min-height: calc(var(--layout-height) - var(--layout-header-height));\n gap: 0px;\n // side bar 块保持粘连,且在 content height 不足时支撑页面\n & > ."," {\n top: var(--layout-header-height);\n height: calc(var(--layout-height) - var(--layout-header-height));\n }\n "])),a)},function(e){return"simple-no-footer"===e.$layoutType&&n(O||(O=C(["\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header header'\n 'side content'\n '. content';\n "])))},function(e){return"side-right-no-footer"===e.$layoutType&&n(j||(j=C(["\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header header'\n 'content side'\n 'content .';\n "])))},function(e){var t=e.$layoutType,a=e.$main;return["side-full-no-footer","side-right-full-no-footer"].includes(t)&&n(z||(z=C(["\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n gap: 0px;\n\n // content 块\n & > ."," {\n min-height: calc(var(--layout-height) - var (--layout-header-height));\n }\n "])),a)},function(e){return"side-full-no-footer"===e.$layoutType&&n(k||(k=C(["\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side header'\n 'side content';\n "])))},function(e){return"side-right-full-no-footer"===e.$layoutType&&n(P||(P=C(["\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header side'\n 'content side';\n "])))},function(e){return"only-footer"===e.$layoutType&&n(N||(N=C(["\n display: grid;\n grid-template-rows: auto var(--layout-footer-height);\n grid-template-columns: 1fr;\n gap: 0px;\n grid-template-areas: 'content' 'footer';\n "])))},function(e){return"only-header"===e.$layoutType&&n(S||(S=C(["\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n grid-template-columns: 1fr;\n gap: 0px;\n grid-template-areas: 'header' 'content';\n "])))},function(e){var t=e.$layoutType;return["simple-only-side","side-right-only-side","side-full-only-side","side-right-full-only-side"].includes(t)&&n(q||(q=C(["\n display: grid;\n // 纵向空间占比设置\n grid-template-rows: 100%;\n // 横向空间占比设置\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n gap: 0px;\n grid-template-areas:\n 'side content'\n '. content';\n "])))},function(e){var t=e.$layoutType;return("side-right-full-only-side"===t||"side-right-only-side"===t)&&n(A||(A=C(["\n grid-template-areas:\n 'content side'\n 'content .';\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n "])))});export{I as EnLayoutContent,D as LayoutContentContainer,H as LayoutContentWrapper,E as LayoutFooterContent,F as LayoutHeaderContainer,G as LayoutSideBarContainer};
10
+ //# sourceMappingURL=layoutUtil.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutUtil.mjs","mappings":"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","sources":["webpack://earthnut/webpack/bootstrap","webpack://earthnut/./components/shared/EnLayoutContent/index.tsx","webpack://earthnut/webpack/runtime/define property getters","webpack://earthnut/webpack/runtime/hasOwnProperty shorthand"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","'use client';\nimport { styled, css } from 'styled-components';\nimport { EnLayoutContentProps } from './types';\n\n/** 创建带样式的组件 */\nexport const LayoutContentContainer = styled.main`\n grid-area: content;\n position: relative;\n`;\n/** 带样式的组件 */\nexport const LayoutFooterContent = styled.div`\n grid-area: footer;\n position: relative;\n height: var(--layout-footer-height);\n box-shadow: 0 -1px 13px 0px #0000001a;\n overflow: hidden;\n`;\n\n/** 带样式的头部 */\nexport const LayoutHeaderContainer = styled.nav`\n grid-area: header;\n position: sticky;\n top: 0px;\n left: 0px;\n z-index: 10;\n height: var(--layout-header-height);\n box-shadow: 0 4px 13px -3px #0000001a;\n overflow: hidden;\n`;\n\n/** 带样式的组件 */\nexport const LayoutSideBarContainer = styled.aside`\n position: sticky;\n left: 0;\n z-index: 8;\n grid-area: side;\n overflow-x: hidden;\n overflow-y: auto;\n`;\n\n/** 内容区域容器 */\nexport const LayoutContentWrapper = styled.div`\n position: relative;\n grid-area: content;\n overflow: auto;\n`;\n\n/** 元始的外壳 */\nexport const EnLayoutContent = styled.div<EnLayoutContentProps>`\n position: relative;\n top: 0px;\n height: var(--layout-self-height);\n width: var(--layout-self-width);\n overflow-x: hidden;\n overflow-y: auto;\n\n ${({ $headerNoSticky, $header, $layoutType, $content, $sidebar }) =>\n $headerNoSticky &&\n css`\n // 头部不粘连样式,头部区域设置\n & > .${$header} {\n position: relative;\n z-index: 2;\n }\n\n ${($layoutType === 'simple-all' || $layoutType === 'side-right-all') &&\n // 头部不粘连样式,内容区设置\n css`\n & > .${$content} > .${$sidebar} {\n top: 0;\n min-height: calc(\n var(--layout-height) - var (--layout-footer-height) - var(--layout-header-height)\n );\n max-height: var(--layout-height);\n }\n `}\n\n ${($layoutType === 'simple-no-footer' || $layoutType === 'side-right-no-footer') &&\n css`\n & > .${$sidebar} {\n top: 0;\n min-height: calc(var(--layout-height) - var(--layout-footer-height));\n max-height: var(--layout-height);\n }\n `}\n `}\n\n ${({ $layoutType, $content }) =>\n $layoutType === 'no-sidebar' &&\n css`\n & > .${$content} {\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n }\n `}\n\n // 侧边栏全屏样式\n ${({ $layoutType, $sidebar }) =>\n $layoutType === 'side-full' &&\n css`\n & > .${$sidebar} {\n top: 0;\n height: var(--layout-height);\n }\n `}\n\n // ------------------------------\n // --- 标准模式(全)与侧边栏右置(全)共用样式 ---\n // 标准模式(全)与侧边栏右置(全)\n ${({ $layoutType, $content, $sidebar }) =>\n ['simple-all', 'side-right-all'].includes($layoutType) &&\n css`\n // 子元素\n & > .${$content} {\n display: grid;\n grid-template-rows:\n calc(var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height))\n auto;\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n\n // side bar 块保持粘连,且在 content height 不足时支撑页面\n & > .${$sidebar} {\n top: var(--layout-header-height);\n min-height: calc(\n var(--layout-height) - var(--layout-header-height) - var(--layout-footer-height)\n );\n max-height: calc(var(--layout-height) - var(--layout-header-height));\n }\n }\n `}\n\n // 标准模式(全) 侧边栏与内容区设置\n ${({ $layoutType, $content }) =>\n ['simple-all', 'simple-no-header'].includes($layoutType) &&\n css`\n & > .${$content} {\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-areas:\n 'side content'\n '. content';\n }\n `}\n // 侧边栏(全) 侧边栏与内容区设置\n ${({ $layoutType, $content }) =>\n ['side-right-all', 'side-right-no-header'].includes($layoutType) &&\n css`\n & > .${$content} {\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'content side'\n 'content .';\n }\n `}\n\n // 侧边栏 (全) 左侧全屏\n // side bar 居左全尺寸\n // side bar 值由 en-layout-side-full 控制\n ${({ $layoutType }) =>\n ['side-full-all', 'side-right-full-all'].includes($layoutType) &&\n css`\n display: grid;\n grid-template-rows: var(--layout-header-height) auto var(--layout-footer-height);\n gap: 0px;\n `}\n \n // 标准的 side bar 居左全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-full-all' &&\n css`\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side header'\n 'side content'\n 'side footer';\n `}\n\n // side bar 居右全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-right-full-all' &&\n css`\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header side'\n 'content side'\n 'footer side';\n `}\n \n // ------------------------------\n // --- 标准模式(无 header)与侧边栏在右侧的无头模式共用样式 ---\n // 标准的无头模式样式、侧边栏在右侧的无头模式样式\n ${({ $layoutType, $content, $sidebar }) =>\n ['simple-no-header', 'side-right-no-header'].includes($layoutType) &&\n css`\n & > .${$content} {\n display: grid;\n grid-template-rows: auto;\n // side bar 块的样式\n & > .${$sidebar} {\n top: 0;\n min-height: calc(var(--layout-height) - var(--layout-footer-height));\n max-height: var(--layout-height);\n }\n }\n `}\n \n // 侧边栏(无 header )全屏\n // side bar 居左全尺寸\n // side bar 值由 en-layout-side-full 控制\n ${({ $layoutType }) =>\n ['side-full-no-header', 'side-right-full-no-header'].includes($layoutType) &&\n css`\n display: grid;\n grid-template-rows: auto var(--layout-footer-height);\n gap: 0px;\n `}\n\n // 标准的 side bar 居左全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-full-no-header' &&\n css`\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side content'\n 'side footer';\n `}\n\n // side bar 居右全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-right-full-no-header' &&\n css`\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'content side'\n 'footer side';\n `}\n \n // ------------------------------\n // 标准模式(无 footer)与侧边栏右置(无 footer)共用样式\n // 没有 footer\n ${({ $layoutType, $sidebar }) =>\n ['simple-no-footer', 'side-right-no-footer'].includes($layoutType) &&\n css`\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n min-height: calc(var(--layout-height) - var(--layout-header-height));\n gap: 0px;\n // side bar 块保持粘连,且在 content height 不足时支撑页面\n & > .${$sidebar} {\n top: var(--layout-header-height);\n height: calc(var(--layout-height) - var(--layout-header-height));\n }\n `}\n \n\n // 标准模式(无 footer) 侧边栏与内容区设置\n ${({ $layoutType }) =>\n $layoutType === 'simple-no-footer' &&\n css`\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header header'\n 'side content'\n '. content';\n `}\n\n\n// 侧边栏在右侧的无 footer 模式样式\n ${({ $layoutType }) =>\n $layoutType === 'side-right-no-footer' &&\n css`\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header header'\n 'content side'\n 'content .';\n `}\n\n// 侧边栏 (全) 左侧全屏\n// side bar 居左全尺寸\n// side bar 值由 en-layout-side-full 控制\n${({ $layoutType, $main }) =>\n ['side-full-no-footer', 'side-right-full-no-footer'].includes($layoutType) &&\n css`\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n gap: 0px;\n\n // content 块\n & > .${$main} {\n min-height: calc(var(--layout-height) - var (--layout-header-height));\n }\n `}\n\n// 标准的 side bar 居左全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-full-no-footer' &&\n css`\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'side header'\n 'side content';\n `}\n\n\n // side bar 居右全尺寸\n ${({ $layoutType }) =>\n $layoutType === 'side-right-full-no-footer' &&\n css`\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n grid-template-areas:\n 'header side'\n 'content side';\n `}\n \n // ------------------------------\n // --- 分割线 --- \n // 下面是仅头部、底部和侧边栏布局\n // 仅底部布局\n ${({ $layoutType }) =>\n $layoutType === 'only-footer' &&\n css`\n display: grid;\n grid-template-rows: auto var(--layout-footer-height);\n grid-template-columns: 1fr;\n gap: 0px;\n grid-template-areas: 'content' 'footer';\n `}\n\n // 仅头部布局\n ${({ $layoutType }) =>\n $layoutType === 'only-header' &&\n css`\n display: grid;\n grid-template-rows: var(--layout-header-height) auto;\n grid-template-columns: 1fr;\n gap: 0px;\n grid-template-areas: 'header' 'content';\n `}\n \n // 仅侧边布局\n// 标准的无头模式样式、侧边栏在右侧的无头模式样式\n// side bar 值由 en-layout-side-full 控制\n ${({ $layoutType }) =>\n [\n 'simple-only-side',\n 'side-right-only-side',\n 'side-full-only-side',\n 'side-right-full-only-side',\n ].includes($layoutType) &&\n css`\n display: grid;\n // 纵向空间占比设置\n grid-template-rows: 100%;\n // 横向空间占比设置\n grid-template-columns: var(--layout-side-bar-width) auto;\n grid-template-rows: 100% max-content;\n gap: 0px;\n grid-template-areas:\n 'side content'\n '. content';\n `}\n \n // 右侧侧边布局\n ${({ $layoutType }) =>\n ($layoutType === 'side-right-full-only-side' || $layoutType === 'side-right-only-side') &&\n css`\n grid-template-areas:\n 'content side'\n 'content .';\n grid-template-columns: auto var(--layout-side-bar-width);\n grid-template-rows: 100% max-content;\n `}\n`;\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))"],"names":["_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject0","_templateObject1","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","_templateObject18","_templateObject19","_templateObject20","_templateObject21","_templateObject22","_templateObject23","_templateObject24","_templateObject25","_templateObject26","_templateObject27","_templateObject28","_templateObject29","__webpack_require__","_taggedTemplateLiteral","e","t","slice","Object","freeze","defineProperties","raw","value","d","exports","definition","key","o","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","LayoutContentContainer","styled","main","LayoutFooterContent","div","LayoutHeaderContainer","nav","LayoutSideBarContainer","aside","LayoutContentWrapper","EnLayoutContent","_ref","$headerNoSticky","$header","$layoutType","$content","$sidebar","css","_ref2","_ref3","_ref4","includes","_ref5","_ref6","_ref7","_ref8","_ref9","_ref0","_ref1","_ref10","_ref11","_ref12","_ref13","_ref14","_ref15","$main","_ref16","_ref17","_ref18","_ref19","_ref20","_ref21"],"sourceRoot":""}